Игорь, здравствуйте. Не могли бы вы на примере показать как это сделать? Я так понимаю, что наиболее быстрый метод из трёх, что вы описали - это второй.
У меня есть 3 типа логов:
[#|2021-04-12T20:29:06.126+0300|INFO|testserv|somesender|_ThreadID=110;_ThreadName=thread-20;Process Instance Id=172.10.11.11:-2c25bc5:178c697e3ac:-29de;Service Assembly Name=FileReaderCA;Activity Name=InitConfig;Some Process Name=fileReader;|Flow::MainFlow::Start::SessionId=172.10.11.11:-2c25bc5:178c697e3ac:-2a8f|#]
[#|2021-04-12T20:24:19.024+0300|INFO|testserv|somesender|_ThreadID=102;_ThreadName=thread-5;Process Instance Id=172.10.11.11:-2c25bc5:178c697e3ac:-2a8c;Service Assembly Name=OutboundAdaptersCA;Activity Name=createTask;Some Process Name=Adapter;|Invoke::Task::Start::SessionId=172.10.11.11:-2c25bc5:178c697e3ac:-2a8f::Some data::pid=17749551::request=<?xml version="1.0" encoding="UTF-8"?><CreateRequest xmlns="[http://someip.ru](http://someip.ru/)"><Bic xmlns="">044525974</Bic><TaskAccount xmlns="">47422810000000000088</TaskAccount><Destination xmlns="">SysReg</Destination></CreateRequest>|#]
[#|2021-04-12T20:24:19.038+0300|INFO|testserv|somesender|_ThreadID=102;_ThreadName=thread-5;Process Instance Id=172.10.11.11:-2c25bc5:178c697e3ac:-2a8c;Service Assembly Name=OutboundAdaptersCA;Activity Name=createTask;Some Process Name=Adapter;|Invoke::Task::End::SessionId=172.10.11.11:-2c25bc5:178c697e3ac:-2a8f::Some data::RegisteredId=12383987141;errorCode=;description=|#]
Данные логи это 3 различных типов запроса - жизненный цикл прохождения одной задачи на сервере. Успешность выполнения задачи - это последовательное прохождение процесса через 3 этапа. Если один из этапов отсутствует, то выполнение задачи считается неуспешным. Мне необходимо посчитать количество таких "успешных троек" и связать их по полю SessionId.
Не могли бы вы продемонстрировать как в Logstash воспользоваться фильтром aggregate для данной задачи? Все поля уже распарсены через Grok.
Какая логика будет у фильтра? Поиск всех одинаковых значений SessionId и добавление в новое поле документа или необходимо "склеивать тройки" в 1 документ/поле и считать склеенные части?