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


(Valentin) #1

Здравствуйте! Столкнулся со следующей задачей.
Вкратце опишу.
В конфиге 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) полученную на предыдущем шаге для каждого кейса соответственно (результат: коэффициент успешных операций).

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