Logstash 400 error: Could not index event to Elasticsearch

Схема отправки логов следующая:
[filebeat => logstash1] => logstash2 => elasticsearch

Суть такая. В документе уже опредено поле [host] с типом keyword, затем мы переконфигурили Logstash1 для парсинга логов, которые присылает filebeat, добавив в него:

mutate {
remove_field => ["tags", "msg", "time", "host"]
}

На logstash2 начали сыпаться ошибки:

Could not index event to Elasticsearch. {:status=>400, :action=>["index" ......

Верно ли я понимаю, что ошибка возникает из-за того что маппинг уже есть, а из-за удаленного поля не удаётся понять как проиндексировать документ (прилетает какой-то объект вместо keyword?

Log message:
https://paste.ubuntu.com/p/r5rqZwf4P8/

Mapping:
https://paste.ubuntu.com/p/ThKgNS2PkN/

Скорее всего - да. Но если добавить stdout output то можно будет узнать точно. Может быть, это даже вот это - Can't get text on a START OBJECT (please improve error handling for key=>{} case) · Issue #41372 · elastic/elasticsearch · GitHub

Спасибо, Игорь, я отловил:
"host":{"name":"HOST-01"},
Но как же получется, что LS не удалил это поле?..... Мистика?)

Да, я попытался воспроизвести проблему вот так:

data.json:

{"host":{"name":"HOST-01"}, "foo": "bar"}
{"host":{"name":"HOST-01"}, "foo": "baz"}

config/test.conf:

input {
  stdin {
    codec => json
  }
}

filter {
  mutate {
    remove_field => ["tags", "msg", "time", "hosts"]
  }
}

output {
  stdout {
  }
}

запускаю

$  bin/logstash -f config/test.conf < data.json

получаю

{
    "@timestamp" => 2019-04-23T13:10:52.781Z,
      "@version" => "1",
           "foo" => "baz"
}
{
    "@timestamp" => 2019-04-23T13:10:52.762Z,
      "@version" => "1",
           "foo" => "bar"
}

Думаю, что чего-то в Вашем описании проблемы не хватает или я что-то в нем пропустил.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.