Всем привет.
В индексе есть несколько типов документов. Одни документы - Input, другие - Output.
В каждом документе есть поле session_ID, которое отвечает за уникальность передачи сесии.
Вопросы:
Как связать/сопоставить/посчитать документы с одинаковыми session_ID?
Потом в идеале вывести полученный результат в Grafana...
Делать сопоставление на стороне эластика или на стороне графаны?
Так как гарантии того, что output придет после input нет, то и то и другое надо добавлять через doc_as_upsert. Сопоставление становиться тривиальным, так как все части находятся в одном документе.
Если через logstash, то есть три метода. 1) можно вытащить документ через elasticsearch filter обновить его и проиндексировать опять. Но это вариант медленный и не надежный. 2) можно воспользоваться фильтром aggregate и формировать полный документ в logstash. Это самый быстрый вариант, но если logstash перегружается то можно потерять пары, и вы ограничены одним воркером в logstash. 3) можно индексировать как обычно, используя флаг doc_as_upsert это будет медленнее чем во втором случае и будет создавать больше нагрузки на elasticsearch, но можно при этом обрабатывать входной поток на нескольких воркерах logstash и меньше вероятности потерять события при перезагрузки logstash, особенно если использовать persistent queues.
Странно. А вы на мои ссылки нажимали? В первом пункте документации очень подробный пример, почти совпадающий с тем, что вам нужно. В 2-ом пункте 5 конкретных и очень подробных примеров покрывающие все аспекты этой проблемы. В 3-м варианте нет примеров - но это просто флаг.
Игорь, здравствуйте. Не могли бы вы на примере показать как это сделать? Я так понимаю, что наиболее быстрый метод из трёх, что вы описали - это второй.
Данные логи это 3 различных типов запроса - жизненный цикл прохождения одной задачи на сервере. Успешность выполнения задачи - это последовательное прохождение процесса через 3 этапа. Если один из этапов отсутствует, то выполнение задачи считается неуспешным. Мне необходимо посчитать количество таких "успешных троек" и связать их по полю SessionId.
Не могли бы вы продемонстрировать как в Logstash воспользоваться фильтром aggregate для данной задачи? Все поля уже распарсены через Grok.
Какая логика будет у фильтра? Поиск всех одинаковых значений SessionId и добавление в новое поле документа или необходимо "склеивать тройки" в 1 документ/поле и считать склеенные части?
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.