Оповещения на основе процентилей Azure Application Insights

Я пытаюсь создать оповещения по анализу приложений, которые будут предупреждать меня, если более 5% моих запросов превышают определенный порог. Я написал запрос в разделе предупреждений Application Insights и обозначил его как измерение метрики, чтобы предупреждать о превышении желаемого порога.

requests 
| where timestamp >= ago(15m) 
| where (tostring(customDimensions['ProviderName']) == 'ProviderX') 
| where (tostring(customDimensions['operationMethod']) == 'operationX') 
| extend responseTime = tolong(customDimensions['totalMilliseconds']) 
| summarize AggregatedValue = (percentile(responseTime, 95)) by bin(timestamp, 15m)

Хотя это предупреждение работает и уведомляет меня правильно, есть одна проблема, заключающаяся в большом количестве ложных срабатываний из-за того, что в определенных 15-минутных окнах существует очень небольшое количество запросов (менее 3). Таким образом, я хочу только предупреждать, когда значение порога превышено, И количество соответствующих запросов за период времени превышает определенный порог, скажем, 10.

Я попытался сделать это с помощью «Предупреждения о количестве результатов» в разделе предупреждений аналитики приложения.

requests
| where timestamp  >= ago(15m)
| where (tostring(customDimensions['ProviderName']) == 'ProviderX')
| where (tostring(customDimensions['operationMethod']) == 'OpeartionX')
| extend responseTime = tolong(customDimensions['totalMilliseconds'])
| summarize hasFailed = ((percentile(responseTime, 95) > 1000) and count() > 135)
| project iff(hasFailed, 1, 0)

Я пытался добиться, чтобы предупреждение возвращало 1, если тест не прошел, а затем предупреждал об этом значении. Однако «Количество результатов», кажется, предупреждает только о количестве возвращенных результатов, поэтому этот подход тоже не работает.

Если бы кто-то мог пролить свет на подходящий запрос или альтернативную стратегию реализации этого в Azure, я был бы очень признателен.

Спасибо.


person Brian Delaney    schedule 05.07.2018    source источник


Ответы (1)


Если вы хотите использовать пороговое оповещение, я могу заменить свой первый запрос следующим:

requests 
| where timestamp >= ago(15m) 
| where (tostring(customDimensions['ProviderName']) == 'ProviderX') 
| where (tostring(customDimensions['operationMethod']) == 'operationX') 
| extend responseTime = tolong(customDimensions['totalMilliseconds']) 
| summarize AggregatedValue = iff(count() > 135, percentile(responseTime, 95), 0) by bin(timestamp, 15m)

Если вы предпочитаете подход «Количество предупреждений о результатах», я думаю, что вы можете заменить последнюю строку вашего второго запроса на | where hasFailed == true, чтобы в итоге вы получили одну строку, когда условие выполнено, и ноль строк, когда это не так.

person joaqo    schedule 23.08.2018