Elastichsearch преобразовать формат документа - PullRequest
0 голосов
/ 07 ноября 2018

Я использую elk 6.4.2, и с помощью API Java я получаю все документы, хранящиеся в индексе metricbeat, каждые 5 минут.

Например:

"system": {
   "core": {
      "nice": {
         "pct": 0
       },
       "system": {
          "pct": 0.0121
       },

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

{
 "module": "system",
 "metric": "core",
 "value": 0,
},
{
 "module": "system",
 "metric": "system",
 "value": 0.0121,
 } 

или

{
 "module": "system",
 "kpis: [{
   "module": "system",
   "metric": "core",
   "value": 0,
  },
  {
   "module": "system",
   "metric": "system",
   "value": 0.0121,
  }]
} 

1 Ответ

0 голосов
/ 07 ноября 2018

Вам необходимо использовать Logstash , чтобы реструктурировать входящие данные, отображаемые как stdin (), для вывода через ElasticSearch как stdout (). Посмотрите на рисунок здесь , чтобы понять, как Logstash действует как туннель между вашими клиентами и кластером ES.

Logstash позволяет вам изменять поля, создавая новые поля в вашем дереве JSON или отфильтровывая ненужные части. Синтаксис выглядит очень некрасиво и трудно выучить, но при правильном соблюдении всех правил он должен преобразовать ваш ввод в желаемые результаты. Вы можете изменять, переименовывая, удаляя, объединяя, заменяя и т. Д. Объяснено здесь

Пример мутации:

if "Invoice_IID" in [msg] {
 mutate {
  add_field => { "Invoice_IID" => "%{msg}" }
}
}

filter {
  mutate {
     copy => { "source_field" => "dest_field" }
  }
}

filter {
  mutate {
    # Renames the 'HOSTORIP' field to 'client_ip'
    rename => { "HOSTORIP" => "client_ip" }
  }
}
...