Kibana: как создать таблицу, показывающую количество top_hits для поля

У меня есть документы с полями account_id (первичный ключ для моей реляционной базы данных) и статусом. Всякий раз, когда происходит изменение статуса учетной записи, я отправляю событие в ElasticSearch.

Таким образом, в течение определенного периода времени будет несколько документов для учетной записи с разными статусами.

Мое требование состоит в том, чтобы получить последний документ для каждого account_id и сделать подсчет с точки зрения статуса.

Эквивалент SQL «выбрать статус, количество (*) из группы учетных записей по статусу;»

Пример: рассмотреть следующие журналы

account_id: 1, status:delete, @timestamp: November 4th 2017, 18:42:09.445
account_id: 1, status:save, @timestamp: November 3rd 2017, 18:42:09.445
account_id: 1, status:draft, @timestamp: November 2nd 2017, 19:42:09.445

account_id: 2, status:draft, @timestamp: November 3rd 2017, 19:42:09.445

account_id: 3, status:save, @timestamp: November 4th 2017, 18:42:09.445
account_id: 3, status:draft, @timestamp: November 3rd 2017, 19:42:09.445

Вывод должен быть:

**status** **count**
 delete   1
 save     1
 draft    1

Лось: 5,6


person JDev    schedule 05.11.2017    source источник


Ответы (2)


Эта функция была запрошена в Kibana как минимум с 2013 года. Мы не стали ждать и использовали графану, которая это умеет. Если вы можете следовать всем ссылкам на github, похоже, что у эластичного может быть способ сделать это сейчас< /а>.

person Alain Collins    schedule 06.11.2017

На данный момент в качестве обходного пути я обновил свой logstash.conf, чтобы отправить одно и то же сообщение журнала в два индекса. В первом индексе я всегда создаю новую запись, а во втором индексе я создаю/обновляю запись.

Фрагмент файла logstash.conf

output {
  if [index_name] == "Account" {
  elasticsearch {
  hosts => ["IP:PORT"]
  index => "account"
  }
}
stdout { codec => rubydebug }
}
output {
 if [index_name] == "Account" {
 elasticsearch {
 hosts => ["IP:PORT"]
 index => "account_latest"
 document_id => "%{field_id}"
 }
}
stdout { codec => rubydebug }
}
person JDev    schedule 07.11.2017