Импорт файлов JSON в Logstash + Elasticsearch + Kibana

Итак, у меня есть веб-платформа, которая печатает файл JSON на запрос, содержащий некоторые данные журнала об этом запросе. Я могу настроить несколько правил о том, когда он должен войти материал, только на определенных уровнях и т. д...

теперь, я играл со стеком Logstash + Elasticsearch + Kibana3, и я хотел бы найти способ увидеть эти журналы в Kibana. Мой вопрос в том, есть ли способ заставить Logstash импортировать такие файлы, или мне нужно написать пользовательский плагин ввода для него? Я искал вокруг и для того, что я видел, Плагины написаны на Ruby, языке, с которым у меня нет опыта.

3 ответов


Logstash-это просто инструмент для преобразования различных файлов системного журнала в JSON и загрузки их в elasticsearch (или graphite, или... ).

поскольку ваши файлы уже находятся в JSON, вам не нужна logstash. Вы можете загрузить их непосредственно в elasticsearch с помощью curl.

посмотреть импорт / индексирование файла JSON в Elasticsearch

однако, чтобы хорошо работать с Kibana, ваши файлы JSON должны быть в минимальный.

  1. Flat-Kibana не содержит вложенных структур JSON. Вам нужен простой хэш пар ключ / значение.

  2. иметь идентификационную метку.

то, что я бы предложил, - это поиск выходов logstash файлов JSON и посмотреть, можете ли вы массировать свои файлы JSON в соответствии с этой структурой. Вы можете сделать это на любом языке как будто это поддерживает JSON. Программа jq очень удобно для фильтрации JSON из одного формат другой.

формат Logstash -https://gist.github.com/jordansissel/2996677

jq -http://stedolan.github.io/jq/


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