Импорт файлов JSON в Logstash + Elasticsearch + Kibana
Итак, у меня есть веб-платформа, которая печатает файл JSON на запрос, содержащий некоторые данные журнала об этом запросе. Я могу настроить несколько правил о том, когда он должен войти материал, только на определенных уровнях и т. д...
теперь, я играл со стеком Logstash + Elasticsearch + Kibana3, и я хотел бы найти способ увидеть эти журналы в Kibana. Мой вопрос в том, есть ли способ заставить Logstash импортировать такие файлы, или мне нужно написать пользовательский плагин ввода для него? Я искал вокруг и для того, что я видел, Плагины написаны на Ruby, языке, с которым у меня нет опыта.
3 ответов
Logstash-это просто инструмент для преобразования различных файлов системного журнала в JSON и загрузки их в elasticsearch (или graphite, или... ).
поскольку ваши файлы уже находятся в JSON, вам не нужна logstash. Вы можете загрузить их непосредственно в elasticsearch с помощью curl.
посмотреть импорт / индексирование файла JSON в Elasticsearch
однако, чтобы хорошо работать с Kibana, ваши файлы JSON должны быть в минимальный.
Flat-Kibana не содержит вложенных структур JSON. Вам нужен простой хэш пар ключ / значение.
иметь идентификационную метку.
то, что я бы предложил, - это поиск выходов logstash файлов JSON и посмотреть, можете ли вы массировать свои файлы JSON в соответствии с этой структурой. Вы можете сделать это на любом языке
как будто это поддерживает JSON. Программа jq
очень удобно для фильтрации JSON из одного формат другой.
формат Logstash -https://gist.github.com/jordansissel/2996677
Logstash-это очень хороший инструмент для обработки динамических файлов.
вот способ импортировать файл json в elasticsearch с помощью logstash:
конфигурационный файл:
input
{
file
{
path => ["/path/to/json/file"]
start_position => "beginning"
sincedb_path => "/dev/null"
exclude => "*.gz"
}
}
filter
{
mutate
{
replace => [ "message", "%{message}" ]
gsub => [ 'message','\n','']
}
if [message] =~ /^{.*}$/
{
json { source => message }
}
}
output
{
elasticsearch {
protocol => "http"
codec => json
host => "localhost"
index => "json"
embedded => true
}
stdout { codec => rubydebug }
}
пример файла json:
{"foo":"bar", "bar": "foo"}
{"hello":"world", "goodnight": "moon"}
обратите внимание, что json должен быть в одной строке. если вы хотите проанализировать многострочный файл json, замените соответствующие поля в файле конфигурации:
input
{
file
{
codec => multiline
{
pattern => '^\{'
negate => true
what => previous
}
path => ["/opt/mount/ELK/json/*.json"]
start_position => "beginning"
sincedb_path => "/dev/null"
exclude => "*.gz"
}
}
filter
{
mutate
{
replace => [ "message", "%{message}}" ]
gsub => [ 'message','\n','']
}
if [message] =~ /^{.*}$/
{
json { source => message }
}
}
Logstash может импортировать различные форматы и источники, поскольку он предоставляет множество плагинов. Существуют также другие инструменты сборщика и пересылки журналов, которые могут отправлять журналы в logstash, такие как nxlog, rsyslog, syslog-ng, flume, kafka, fluentd и т. д. Из того, что я слышал, большинство людей используют nxlog в windows (хотя он работает в linux одинаково хорошо) в сочетании со стеком ELK из-за его низкого объема ресурсов. (Отказ от ответственности: я связан с проектом)