Импорт файлов JSON в Logstash + Elasticsearch + Kibana
Итак, у меня есть веб-платформа, которая печатает файл JSON для каждого запроса, содержащий некоторые данные журнала об этом запросе. Я могу настроить несколько правил о том, когда он должен регистрировать материал, только на определенных уровнях и т.д.
Теперь я играл с стеком Logstash + Elasticsearch + Kibana3, и мне бы хотелось найти способ увидеть эти журналы в Kibana. Мой вопрос в том, есть ли способ заставить Logstash импортировать такие файлы, или мне нужно написать для него настраиваемый входной плагин? Я искал вокруг и для того, что видел, плагины написаны на Ruby, языке, с которым у меня нет опыта.
Ответы
Ответ 1
Logstash - это просто инструмент для преобразования различных типов файлов syslog в JSON и загрузки их в elasticsearch (или графит или...).
Так как ваши файлы уже находятся в JSON, вам не требуется logstash. Вы можете загрузить их прямо в elasticsearch с помощью curl.
См. Импорт/Индекс файла JSON в Elasticsearch
Однако, чтобы хорошо работать с Kibana, ваши файлы JSON должны быть как минимум.
Что я хотел бы предложить, так это просмотр выходов logstash в файлах JSON и просмотр, если вы можете массировать файлы JSON в соответствии с этой структурой. Вы можете сделать это на любом языке, который вы
как и поддержка JSON. Программа jq
очень удобна для фильтрации json из одного формата в другой.
Формат Logstash - https://gist.github.com/jordansissel/2996677
jq - http://stedolan.github.io/jq/
Ответ 2
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 }
}
}
Ответ 3
Logstash может импортировать различные форматы и источники, поскольку он предоставляет множество плагинов. Существуют также другие инструменты для сбора журналов и форвардеров, которые могут отправлять журналы в logstash, такие как nxlog, rsyslog, syslog-ng, flume, kafka, fluentd и т.д. Из того, что я слышал, большинство людей используют nxlog для Windows (хотя он работает на Linux одинаково хорошо) в сочетании с стеком ELK из-за низкого ресурса. (Отказ от ответственности: я связан с проектом)