добавление новых полей из фильтра grok в logstash - PullRequest
0 голосов
/ 17 октября 2018

У меня есть фильтр grok в моей logstash conf.Где я сопоставляю сообщение и хочу добавить новое поле newfield и заполнить значение из одного определенного поля data1 из сообщения.Вот как выглядит моя конфигурация:

input {
  file {
    path => "/var/log/myapp/myapp.log"
    sincedb_path => "/var/log/logstash/.sincedb2/myapp.log"
    start_position => beginning
    type => "myapp"
  }
}
filter {
   grok {
        match => {
          "message" => "%{TIMESTAMP_ISO8601:timestamp}\s+%{LOGLEVEL:loglevel}\s+%{JAVACLASS:class}:\s+%{WORD:word1}\s+%{WORD:word2}:\s+%{WORD:word3}=%{DATA:data1}+%{GREEDYDATA:content}"
       }
    }
    mutate {
        add_field => [ "newfield", "%{data1}" ]
    }
   if ("grokparsefailure" in [tags]) { drop {} }
}
output {
  if [type] == "myapp"{
    elasticsearch {
      hosts => [{% for node in elastic_data_hosts %}"{{node}}:{{elastic_port}}"{% if not loop.last %},{% endif %}{% endfor %}]
      index => "logstash-myapp-log"
     }
  }
}

Я вижу новое поле, добавленное в Kibana, но значение не присваивается.Я делаю это неправильно или что-то пропустил?

1 Ответ

0 голосов
/ 19 октября 2018

Вместо [] попробуйте использовать {}, как показано в примере здесь .

mutate {
    add_field => { "foo" => "Hello world, from %{host}" }
}
...