Корелляция событий


(Cabbage) #1

Добрый день! Я только начал знакомиться с функционалом.
Если задача: 2 документа - документ1 содержит список событий с временными метками, документ2 содержит некий список сочетаний событий.
Возможно ли как-то сравнить эти два документа, так что бы если в некий промежуток времени в документе1 появляются два или больше события, которые есть в документе2, приходит алерт или отражаются любым другим способом?

Например:
В документе2 указано "server start" и "server stop" = alert
И когда в документе1 оба события появляются с разницей в 5 минут, приходит алерт.


(Igor Motov) #2

Я не совсем понимаю структуру ваших документов. Хотелось бы также понять в каком порядке они индексируются, как часто обновляются, и в какой момент должен происходить алерт. Сложно что-то конкретное порекомендовать на основе предоставленной информации.


(Cabbage) #3

Документ1 это обыкновеный лог в формате CEF приблизительно такого содержания

> CEF:0|SI|Audit|1.2|SECA0023|Report Started|3|rt=Jul 25 2016 11:20:28 msg=Report RSRZLLG0 Started duser=SYS shost= cs2=000 cs2Label=client destinationServiceName= dproc=RSRZLLG0 cat=AUW
> CEF:0|SI|Audit|1.2|SECA0023|Report Started|3|rt=Jul 25 2016 11:24:35 msg=Report RSRZLLG0_ACTUAL Started duser=SYS shost= cs2=000 cs2Label=client destinationServiceName= dproc=RSRZLLG0_ACTUAL cat=AUW

Документ2 может быть любым, содержащим примерно такую информацию
Report Start, Report => Alert
Server stop, User change => Critical

И при повялении в течении некоторого времени в документе1 обоих событий из одной строчки документа2, происходит алерт.
Документ1 может обновляться раз в несколько минут или чаще, документ2 может не обновляться месяцами.
Частота алерта устроит как и в реальном времени, так и проверки через промежутки времени.
Собственно неизменным остается только формат данных документа1 - остальное может быть изменене для удобства решения задачи.
Конкретно сейчас меня интересует реализуемо ли это средствами ELK и, если да, в какую сторону копать.
Спасибо за ответ.


(Igor Motov) #4

То есть Документ1 это лог, который индексируется как одна записей на строку в elasticsearch с помощью logstash по мере возрастания. И вам надо отреагировать, если один документ содержащий определенную строку находиться близко по времени от другого документа, который содержит другую строку, я правильно понял?

Должна ли эта система игнорировать вот такую ситуацию?

server start
server start
... прошло 10 минут ...
server stop
server stop

Другими словами между "server start" и "server stop" больше 5 минут, но есть два "server start" близко к друг другу.


(Cabbage) #5

Да, Документ1 это лог и он индексируется по мере возрастания при помощи Logstash. Каждая строка документа1 это отедльне событие. Одно событие из документа1 должно находится близко по времени к другому событию из этого же документа1.
Документ2 не содержит ничего кроме вариантов сочетаний событий и их критичности.

И да, по прошествии времени реакции уже быть не должно.


(Igor Motov) #6

Я думаю, самый простой способ это создать поиск по всем событиям в Документ2. Каждое событие завернуть в should в одном большом запросе с типомbool, и еще добавить фильтр, чтобы запрос возвращал только документы созданные с момента прошлого запроса - 5 минут и отсортировать по дате. После исполнения запроса в вашем приложении проверить на сколько близки события.


(Cabbage) #7

Спасибо, обязательно попробую рреализовать


(system) #8