Ошибка : Could not index event to Elasticsearch

Всем привет.

В /etc/logstash/conf.d/postfix.conf
http://pastebin.calculate-linux.ru/ru/show/127900
В /etc/logstash/patterns/postfix
http://pastebin.calculate-linux.ru/ru/show/127901

Но в логах logstash

Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"buildlog4", :_type=>"_doc", :routing=>nil}, #<LogStash::Event:0x49522875>], :response=>{"index"=>{"_index"=>"buildlog4", "_type"=>"_doc", "_id"=>"tmgaz20Bp3jq-MOqGvqp", "status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"failed to parse field [host] of type [text] in document with id 'tmgaz20Bp3jq-MOqGvqp'. Preview of field's value: '{name=elk.mydomain.com}'", "caused_by"=>{"type"=>"illegal_state_exception", "reason"=>"Can't get text on a START_OBJECT at 1:357"}}}}}

В настройках filebeat

filebeat.inputs:
- type: log
  enabled: true
  paths:
      - /var/log/maillog*
  exclude_files: [".gz$"]
output.logstash:
  hosts: ["10.50.11.8:5044"]

То есть postifx лезет в во все индексы. Как настроить, чтобы postfix был только в своём индексе ?

Если output конфига logstash сделать:

output {
if "postfix" in [tags]{
        elasticsearch {
            hosts    => "localhost:9200"
            index    => "postfix-%{+YYYY.MM.dd}"
        }
}
}

И в filebeat.yml сделать :

filebeat.inputs:
- type: log
  enabled: true
  paths:
      - /var/log/maillog*
  exclude_files: [".gz$"]
tags: ["postfix"]
output.logstash:
  hosts: ["10.50.11.8:5044"]

Это не поможет. Можете помочь ?

Там, в принципе, все написано, только надо внимательно прочитать.

Ошибка:

"Could not index event to Elasticsearch.

Значит что logstash послал сообщение на индексацию, но Elasticsearch это сообщение не принял. Почему?

"reason"=>"failed to parse field [host] of type [text] in document with id 'tmgaz20Bp3jq-MOqGvqp'.

То есть у нас был документ с id mgaz20Bp3jq-MOqGvqp, и в нем было поле host, которое Elasticsearch пытался интерпретировать как текст но не смог. Что же в этом поле такое было?

Preview of field's value: '{name=elk.mydomain.com}'"

Ага, значит в документе было что-то вроде {..... "host": {"name": "elk.domain.com"} ...} и судя по

"reason"=>"Can't get text on a START_OBJECT at 1:357"

Произошло это на 357-м символе.

Результат: mapping для поля host в индексе не соответсвует посылаемой информации.

Огромное спасибо.

Такие ошибки на всех других индексах.

То по идее можно ли переименовать поля в индексе postfix ? Например если host нельзя, то server. Если да, то как это сделать ?
Вот конфиг logstash для индекса postfix https://pastebin.com/k6rnyjE3

Как вы mapping для этих индексов создаете?

В Index Managment любого индекса
image

Это значит, что поля не в схеме игнорируются ?

Это имеется в виду ?

В этом индексе он как-раз должен был сработать. Странно.

Тогда для примера будем смотреть индекс buildlog4. Вот его image

Да, с этим индексом проблемы, так как у вас host проиндексирован как text, а вы в него помещаете объект.

Понятно.

То есть в своём индексе postfix ничего не получиться сделать ? Надо в маппингах проблемных менять ?

Надо менять в тех индексах, в которые вы пишите. Либо переформатировать это поле в вашем документе.

Спасибо.

Подскажите, пожалуйста, как переименовать в моём документе поле host в поле server.

С помощью mutate. Вопрос только в том, стоит ли это делать, или лучше стоит правильно настроить mapping.

Спасибо. Я прочитав доку, понял что это делается так

mutate {
   rename => ["host", "server"]
   convert => {"server" => "string"} 
}

Там индексов с полями host больше десятка.

Как это использовать в моём случае и почему не стоит этого делать ?

Я так понимаю, что host у вас добавляется одним из beat-ов. Это приложение также устанавливает шаблоны индексов, которые это поле должны правильно настроить. А также дашборды, которые эти поля используют. Вы конечно, можете все это дело взять в свои руки, если хотите.

Я добавил в каждый фильтр

mutate {
   rename => ["host", "server"]
   convert => {"server" => "string"} 
}

То есть получилось http://pastebin.calculate-linux.ru/ru/show/128398
Ошибка пропала и индекс создался. Правильно ли это ?

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