Математика и агрегация в конфиге Logstash

Здравствуйте! Столкнулся со следующей задачей.
Вкратце опишу.
В конфиге Logstash есть input jdbc, который выполняет select запрос в базу данных Oracle один раз в 30 минут.
На выходе я имею следующую информацию:

  1. case:Podgotovka perevoda po nomeru karty @version:1 tags:oracle_dwh sysdate:February 7th 2019, 13:00:00.000 status:1 @timestamp:February 7th 2019, 13:00:37.141 count(distinctm.order_number):67 _id:lI1mx2gBtOSIBx6g6k7R _type:doc _index:oracle_dwh-2019.02.07 _score: -

2)case:Podgotovka perevoda po nomeru karty @version:1 tags:oracle_dwh sysdate:February 7th 2019, 13:00:00.000 status:0 @timestamp:February 7th 2019, 13:00:37.126 count(distinctm.order_number):2 _id:mI1mx2gBtOSIBx6g6k7g _type:doc _index:oracle_dwh-2019.02.07 _score: -

Эти две строки приходят раз в полчаса (это результат выполнения select). Суть в следующем: у меня в запросе есть 80 case-ов, то есть за один запрос в одно и тоже время у меня записывается 160 строк в эластик (иногда меньше, так как некоторые кейсы могут быть пустые). Каждый кейс пишет две строки со status = 0 ( плохие операции) и status = 1 (хорошие операции).

Нужно сделать следующее:

1)Сложить параметр count(distinctm.order_number) со статусом 1 и 0 для каждого кейса.
2)Разделить count(distinctm.order_number) со статусом 0 (плохие операции) на сумму count(distinctm.order_number) полученную на предыдущем шаге для каждого кейса соответственно (результат: коэффициент успешных операций).

Подскажите, как решить подобную задачу, насколько я понимаю необходимо агрегировать
необходимые строки, а затем произвести вычисления. Буду рад любой помощи.

Привет!
Для твоей задачи нужно использовать фильтр ruby.
У него есть методы event.get и event.set для получения данных из массивов и вывода их в эластик. Все остальное это простое программирование на ruby.

Попробуй вот это https://www.rubyguides.com/ruby-tutorial/loops/
и https://www.elastic.co/guide/en/logstash/current/event-api.html

Привет.
Да, пересобрал SQL и математику сделал на ruby.
Спасибо!

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.