Kibana Timelion: отбор или подзапрос для агрегирования суммы макс.

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

@timestamp; userId; currentPoints
August 7th 2017, 00:30:37.319; myUserName; 4
August 7th 2017, 00:43:22.121; myUserName; 10
August 7th 2017, 00:54:29.177; myUserName; 7
August 7th 2017, 01:10:29.352; myUserName; 4
August 7th 2017, 00:32:37.319; myOtherUserName; 12
August 7th 2017, 00:44:22.121; myOtherUserName; 17
August 7th 2017, 00:56:29.177; myOtherUserName; 8
August 7th 2017, 01:18:29.352; myOtherUserName; 11

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

August 7th 2017, 00; SumOfMaxCurrentPoints -> 27 (max from hour 00h from both users 10 + 17)
August 7th 2017, 00; SumOfMaxCurrentPoints -> 15 (max from hour 01h from both users 4 + 11)

Обычно это делается с помощью подзапроса, извлекающего max(currentPoints) для каждого часа, пользователя, а затем суммируют результаты и агрегируют за час.

Это возможно, например, с Kibana Timelion? Я не могу найти способ достичь этого, используя документацию.

Спасибо алекс

1 ответ

Работая над другим проектом, я наткнулся на ответ, чтобы сделать это в Kibana/Elasticsearch без использования Timelion.

Эта функция называется "Агрегация одноуровневых конвейеров", и в этом случае вы используете совокупность сумм. Вы можете использовать его с любой недавней визуализацией Kibana / Elastic (я использую версию 5.5).

Для набора данных, такого как:

@timestamp; userId; currentPoints
August 7th 2017, 00:30:37.319; myUserName; 4
August 7th 2017, 00:43:22.121; myUserName; 10
August 7th 2017, 00:54:29.177; myUserName; 7
August 7th 2017, 01:10:29.352; myUserName; 4
August 7th 2017, 00:32:37.319; myOtherUserName; 12
August 7th 2017, 00:44:22.121; myOtherUserName; 17
August 7th 2017, 00:56:29.177; myOtherUserName; 8
August 7th 2017, 01:18:29.352; myOtherUserName; 11

Где вам нужна почасовая сумма (currentPoints) всех MAX (currentPoints) для userId, в результате чего:

August 7th 2017, 00; SumOfMaxCurrentPoints -> 27 (max from hour 00h from both users 10 + 17)
August 7th 2017, 00; SumOfMaxCurrentPoints -> 15 (max from hour 01h from both users 4 + 11)

Ты можешь сделать:

метрический

  1. Агрегация: агрегация одноуровневых трубопроводов (суммарное ведро)
  2. Тип агрегации ковша: условия
  3. Поле Bucket: userId
  4. Размер корзины: удобное значение, превышающее количество пользователей, если вам нужна полная точность
  5. Метрическая агрегация: Макс
  6. Метрическое поле: currentPoints

ведро

  1. Тип ковшей: Разделенные ряды
  2. Агрегация ведра: гистограмма даты
  3. Поле гистограммы: @timestamp
  4. Интервал гистограммы: ежечасно
Другие вопросы по тегам