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

**URL:** <https://discuss.elastic.co/t/topic/56531>\
**Category:** Вопросы на русском языке\
**Created:** [July 27, 2016, 2:10pm UTC](https://discuss.elastic.co/t/topic/56531 "2016-07-27T14:10:38Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Cabbage](https://avatars.discourse-cdn.com/v4/letter/c/f07891/32.png) [@Cabbage](https://discuss.elastic.co/u/Cabbage)\
**Post date:** [July 27, 2016, 2:10pm UTC](https://discuss.elastic.co/t/topic/56531/1 "2016-07-27T14:10:38Z")

</div>

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

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

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [July 27, 2016, 3:05pm UTC](https://discuss.elastic.co/t/topic/56531/2 "2016-07-27T15:05:42Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Cabbage](https://avatars.discourse-cdn.com/v4/letter/c/f07891/32.png) [@Cabbage](https://discuss.elastic.co/u/Cabbage)\
**Post date:** [July 27, 2016, 3:36pm UTC](https://discuss.elastic.co/t/topic/56531/3 "2016-07-27T15:36:14Z")

</div>

Документ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 и, если да, в какую сторону копать.  
Спасибо за ответ.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [July 27, 2016, 3:50pm UTC](https://discuss.elastic.co/t/topic/56531/4 "2016-07-27T15:50:36Z")

</div>

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

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

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

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

---

<div class="post-metadata">

**Author:** ![Cabbage](https://avatars.discourse-cdn.com/v4/letter/c/f07891/32.png) [@Cabbage](https://discuss.elastic.co/u/Cabbage)\
**Post date:** [July 27, 2016, 3:59pm UTC](https://discuss.elastic.co/t/topic/56531/5 "2016-07-27T15:59:14Z")

</div>

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

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

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [July 27, 2016, 10:07pm UTC](https://discuss.elastic.co/t/topic/56531/6 "2016-07-27T22:07:40Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Cabbage](https://avatars.discourse-cdn.com/v4/letter/c/f07891/32.png) [@Cabbage](https://discuss.elastic.co/u/Cabbage)\
**Post date:** [July 28, 2016, 9:37am UTC](https://discuss.elastic.co/t/topic/56531/7 "2016-07-28T09:37:26Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:46pm UTC](https://discuss.elastic.co/t/topic/56531/8 "2017-07-06T13:46:50Z")

</div>


