Я пытаюсь создать диаграмму в Azure App Insights для всех 500 ERROR, которые мы получаем для каждого Cloud_RoleName с уникальным типом. Что я хотел сделать, так это показать тренд неделя за неделей, а также месяц за месяцем, если мы получаем новые ТИПЫ 500 ошибок по сравнению с данными предыдущей недели. В основном недельный анализ тенденций на предмет 500 ошибок. Я пробовал следующий запрос: -
requests
| where resultCode = = "500" and timestamp > ago(1d)
| join (exceptions) on operation_Id
| summarize by type, cloud_RoleName
Насколько я понимаю, будут возвращены данные только за 1 предыдущий день, суммированные по типу ошибки 500. К сожалению, я не могу сформировать запрос, чтобы получить данные тренда за неделю за неделю. Любая помощь по этому KQL?
<> после ответа Йони я нашел блог, в котором были сгенерированы диаграммы тенденций для событий безопасности, поэтому я воспользовался запросом в блоге и создал его здесь.. но все еще не уверен, что получаю то, что хочу.. возможно, кто-то может изменить этот запрос ... поскольку все, что я хочу, это из таблицы исключений и запросов тенденция новых 500 типов ошибок неделя за неделей для каждого cloud_roleName https://microsoftonlineguide.blogspot.com/2018/05/detect-malicious-activity-using-azure.html?showComment=1561507971564#c5650649192825890878
let T=requests
| where resultCode = = "500" and timestamp > ago(30d)
| join (exceptions) on operation_Id
| summarize by type, cloud_RoleName, Date = startofday(timestamp);
T
| evaluate activity_counts_metrics(type,Date, startofday(ago(30d)), startofday(now()), 1d, type, cloud_RoleName)
| extend WeekDate = startofweek(Date)
| project WeekDate, Date, type, PotentialAnomalyCount = new_dcount, cloud_RoleName
| join kind= inner
(
T
| evaluate activity_engagement(type, Date, startofday(ago(30d)), startofday(now()),1d, 7d)
| extend WeekDate = startofweek(Date)
| project WeekDate, Date, Distribution1day = dcount_activities_inner, Distribution7days = dcount_activities_outer, Ratio = activity_ratio*100
)
on WeekDate, Date
| where PotentialAnomalyCount == 1 and Ratio < 100
| project WeekDate, Date, type, cloud_RoleName, PotentialAnomalyCount, Distribution1day, Distribution7days, Ratio
| render barchart kind=stacked
немного сложно ответить, не имея представления о ваших данных и о том, как они структурированы.
тем не менее, вот попытка ответить на основе словесного описания в вашем вопросе, используя встроенный плагин activity_counts_metrics
(ссылка на документ):
datatable(day:datetime, result_code:int)
[
datetime(2019-05-01), 500,
datetime(2019-05-10), 500,
datetime(2019-05-20), 500,
datetime(2019-06-01), 500,
datetime(2019-06-02), 500,
datetime(2019-06-03), 501,
datetime(2019-06-04), 500,
datetime(2019-06-05), 500,
datetime(2019-06-06), 500,
datetime(2019-06-07), 500,
datetime(2019-06-08), 500,
datetime(2019-06-09), 500,
datetime(2019-06-10), 500,
datetime(2019-06-11), 500,
datetime(2019-06-12), 500,
datetime(2019-06-13), 502,
datetime(2019-06-14), 500,
]
| evaluate activity_counts_metrics(result_code, day, ago(60d), now(), 'week')
// try using 'month' too, instead of 'week'
это возвращает:
| day | count | dcount | new_dcount | aggregated_dcount |
|-----------------------------|-------|--------|------------|-------------------|
| 2019-04-28 00:00:00.0000000 | 1 | 1 | 1 | 1 |
| 2019-05-05 00:00:00.0000000 | 1 | 1 | 1 | 1 |
| 2019-05-19 00:00:00.0000000 | 1 | 1 | 1 | 1 |
| 2019-05-26 00:00:00.0000000 | 1 | 1 | 1 | 1 |
| 2019-06-02 00:00:00.0000000 | 7 | 2 | 2 | 2 |
| 2019-06-09 00:00:00.0000000 | 6 | 2 | 2 | 2 |
куда:
TimelineColumn: The time window [week/month/etc.] start time.
count: The total records count in the time window.
dcount: The distinct ID values count in the time window.
new_dcount: The distinct ID values in the time window and compared to all previous time windows.
aggregated_dcount: The total aggregated distinct ID values from the 1st time window to the current (inclusive).
Если вам интересно увидеть фактические отдельные коды (за неделю/месяц), что-то вроде следующих строк может дать вам направление:
datatable(day:datetime, result_code:int)
[
datetime(2019-05-01), 500,
datetime(2019-05-10), 500,
datetime(2019-05-20), 500,
datetime(2019-06-01), 500,
datetime(2019-06-02), 500,
datetime(2019-06-03), 501,
datetime(2019-06-04), 500,
datetime(2019-06-05), 500,
datetime(2019-06-06), 500,
datetime(2019-06-07), 500,
datetime(2019-06-08), 500,
datetime(2019-06-09), 500,
datetime(2019-06-10), 500,
datetime(2019-06-11), 500,
datetime(2019-06-12), 500,
datetime(2019-06-13), 502,
datetime(2019-06-14), 500,
]
| summarize distinct_codes = make_set(result_code) by startofweek(day)
| extend distinct_codes_count = array_length(distinct_codes)
это возвращает:
| start_of_week | distinct_codes | distinct_codes_count |
|-----------------------------|----------------|----------------------|
| 2019-04-28 00:00:00.0000000 | 500 | 1 |
| 2019-05-05 00:00:00.0000000 | 500 | 1 |
| 2019-05-19 00:00:00.0000000 | 500 | 1 |
| 2019-05-26 00:00:00.0000000 | 500 | 1 |
| 2019-06-02 00:00:00.0000000 | 500, 501 | 2 |
| 2019-06-09 00:00:00.0000000 | 500, 502 | 2 |
я добавил еще один пример в свой ответ - это может дать вам направление
Спасибо, Йони, это помогает!
также мне нравится приведенный выше запрос, который вы дали из статьи, но в выводе есть способ также включить код результата?