#json #elasticsearch #logstash #logstash-configuration
#json #elasticsearch #logstash #logstash-конфигурация
Вопрос:
У меня есть результаты тестов, которые хранятся в файлах json. Затем у меня есть logstash, который находит файл и пытается отправить все строки в elasticsearch. Отправляется только около половины строк, и я не могу понять, почему некоторые строки опущены. Например, будет 34 строки, но отправлено только 14.
input {
file {
path => "/data/*.json"
start_position => "beginning"
}
}
# ----------------------------------------------------------------------
filter {
# Parse fields out of JSON message, then remove the raw JSON.
json {
source => "message"
}
}
# ----------------------------------------------------------------------
output {
elasticsearch {
hosts => ["host:9200", "localhost:9200"]
index => "ct-%{ YYYY.MM.dd}"
}
stdout { codec => rubydebug }
Я не уверен, есть ли что-то в самом json, что заставляет logstash просто пропускать его, или что-то не так с моим файлом logstash.conf, который я опубликовал выше.
Комментарии:
1. Вот что, я думаю, происходит. Я подумал, что, имея два узла elasticsearch, я мог бы отправлять журналы json обоим. Похоже, что он разделяет результаты json и отправляет некоторые на один хост, а остальные на другой хост. Так ли это работает? Есть ли способ обойти и отправить все в оба местоположения или мне нужно изменить вывод, чтобы иметь только одно местоположение?
2. Все события будут отправлены на все выходные данные, так что это не причина.
3. Вы видели кодек json, который вы могли бы использовать на входе? Это должно сохранить фильтр. elastic.co/guide/en/logstash/current/plugins-codecs-json.html
4. @Patrick пожалуйста, поделитесь содержимым вашего файла JSON.
5. @AlainCollins Согласно документу , это не так:
If given an array it will load balance requests across the hosts specified in the hosts parameter.
Ответ №1:
Logstash вычисляет файлы разных типов, чтобы отправить их в elasticsearch в формате Json. В вашем случае агента Filebeat с выводом elasticsearch будет достаточно, чтобы отправить файл json в ES и проиндексировать его.
Это будет выглядеть так, используя Filebeat 6.x :
#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
# Paths to the logs
paths:
- "/your/path/to/your/logs/file.json"
# tags to identify the logs source, .gz files excluded from the prospector
tags: ["beats","yourtag"]
exclude_files: ['.gz
]
#================================ Outputs =====================================
#----------------------------- Elasticsearch output --------------------------------
output.elasticsearch:
# The ES host amp; index name
hosts: ["yourEShost:9200"]
index: "ct-%{ YYYY.MM.dd}"