Обработка нескольких событий JSON с помощью logstash - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть следующая конфигурация: журналы из экземпляров приложения перенаправляются на эластичный поиск с использованием filebeat и logstash.

   Apps
+--------+
| +--------+
| | +--------+     +----------+    +----------+
| | |   +--- |     |          |    |          |
+ | |   |file| --> | logstash | -->| elastic  |
  + |   |beat|     |   (1)    |    | search   |
    +--------+     +----------+    +----------+
                         |               |
             (not avail) X               | (query)
                         V               |
                   +----------+          V
                   |          |      +------+
                   | logstash |<-----| Json |
                   |   (2)    |      | file |
                   +----------+      +------+

Я хочу проверить обработку журналов в logstash-2, но в настоящее время я не могу реализовать пересылку из logstash-1.Поэтому я попытался сделать следующее: сделать запрос и упростить поиск полей _source документов, и я получил несколько json-документов, таких как:

{
 "@timestamp": <timestamp>,
 "@version": "1",
 "requestMethod": "PUT",
 "requestUri": "/api/endopoint",
 "servername": "myserver" 
 ....  many other fields
}
{
 "@timestamp": <timestamp>,
 "@version": "1",

}
... many other json objects

Мой вопрос: как я могу обработать эти json-документы из запросаasticsearch с помощью logstash?

Я пытался обработать их, используя многострочный кодек, а затем фильтр json, но не могу заставить его работать: Вот попытка:

input {
  file {
    path => "events.json"
    sincedb_path => "/dev/null"
    start_position => beginning
    codec => multiline {
       pattern => "^\}"    #end of each json object
       what => "previous"
    }
  }
}

filter {
  json {
    source => "event"
  }
 }

 output {
  stdout{}
}

1 Ответ

0 голосов
/ 26 сентября 2018

После некоторых дополнительных исследований я понял, что конфигурация многострочного кодека была неправильной.Я исправил и теперь у меня есть все событие в поле сообщения.

input {
  file {
    path => "events.json"
    sincedb_path => "/dev/null"
    start_position => beginning
    codec => multiline {
        pattern => "^\}"    #end of each json object
        negate => true
        what => "next"
    }
  }
}

filter {
  json {
    source => "message"
  }

  mutate {
    remove_field => ["message"]
  } 
} 

output {
 stdout{}
}
...