#azure-log-analytics #azure-data-explorer
#azure-log-analytics #azure-data-explorer
Вопрос:
Исходные данные:
Хост | Предупреждение | Время события | EventStatus |
---|---|---|---|
host1 | WAN PING | 05:40 | ПРЕДУПРЕЖДЕНИЕ |
host1 | WAN PING | 05:58 | КРИТИЧЕСКИЙ |
host1 | WAN PING | 06:30 | ОК |
host1 | WAN PING | 06:40 | ПРЕДУПРЕЖДЕНИЕ |
host1 | WAN PING | 07:30 | ОК |
host2 | WAN PING | 05:42 | ПРЕДУПРЕЖДЕНИЕ |
host2 | WAN PING | 05:46 | ОК |
host2 | WAN PING | 06:40 | ПРЕДУПРЕЖДЕНИЕ |
host2 | WAN PING | 06:58 | КРИТИЧЕСКИЙ |
host2 | WAN PING | 07:30 | ОК |
host3 | WAN PING | 06:30 | ПРЕДУПРЕЖДЕНИЕ |
host3 | WAN PING | 07:30 | ОК |
Мне нужно вернуть продолжительность каждого события оповещения.
хост | eventStart | Завершение события | eventDuration |
---|---|---|---|
host1 | 05:40 | 06:30 | 00:50 |
host1 | 06:40 | 07:30 | 00:50 |
host2 | 05:42 | 05:46 | 00:04 |
host2 | 06:40 | 07:30 | 00:50 |
host3 | 06:30 | 07:30 | 01:00 |
Я боюсь, что нет уникального идентификатора события для группировки данных и запуска join
Мои попытки работают для хостов только с одним «событием»
T
| where Host == 'host3'
| summarize min(eventTime), max(eventTime) by Host
Который возвращает желаемый результат, но если я выполняю это против host1
min=05:40 max=07:30
Есть ли способ сгруппировать эти события по EventStatus?
Ответ №1:
вы могли бы использовать row_window_session()
: https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/row-window-session-function
datatable(Host:string, Alert:string, EventTime:datetime, EventStatus:string)
[
'host1', 'WAN PING', datetime(2020-12-16 05:40), 'WARNING',
'host1', 'WAN PING', datetime(2020-12-16 05:58), 'CRITICAL',
'host1', 'WAN PING', datetime(2020-12-16 06:30), 'OK',
'host1', 'WAN PING', datetime(2020-12-16 06:40), 'WARNING',
'host1', 'WAN PING', datetime(2020-12-16 07:30), 'OK',
'host2', 'WAN PING', datetime(2020-12-16 05:42), 'WARNING',
'host2', 'WAN PING', datetime(2020-12-16 05:46), 'OK',
'host2', 'WAN PING', datetime(2020-12-16 06:40), 'WARNING',
'host2', 'WAN PING', datetime(2020-12-16 06:58), 'CRITICAL',
'host2', 'WAN PING', datetime(2020-12-16 07:30), 'OK',
'host3', 'WAN PING', datetime(2020-12-16 06:30), 'WARNING',
'host3', 'WAN PING', datetime(2020-12-16 07:30), 'OK',
]
| order by Host asc, EventTime asc
| extend session_start = row_window_session(EventTime, 1d, 1d, Host != prev(Host) or prev(EventStatus) == "OK")
| summarize eventStart = min(EventTime), eventEnd = max(EventTime) by session_start, Host
| project Host, eventStart, eventEnd, duration = eventEnd - eventStart
| order by Host asc, eventStart asc
Комментарии:
1. Удивительно — именно то, что мне было нужно, спасибо