Импорт файлов 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 из-за его низкого объема ресурсов. (Отказ от ответственности: я связан с проектом)