Azure Application Insights 基于百分比的警报

Posted

技术标签:

【中文标题】Azure Application Insights 基于百分比的警报【英文标题】:Azure Application Insights Percentile Based Alerting 【发布时间】:2018-12-13 18:24:22 【问题描述】:

我正在尝试创建有关应用程序洞察的警报,如果超过 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 上实现它的替代策略,我将不胜感激。

谢谢。

【问题讨论】:

【参考方案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 以便在满足条件时得到一行,在满足条件时得到零行不是。

【讨论】:

以上是关于Azure Application Insights 基于百分比的警报的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在 Service Fabric Actor Reliable 服务中添加 Application Insight

创建第一个azure hadoop insight

在 Azure 中构建 App Insight 以监控 Linux 服务器中的 Inotify 服务

Application Insight 中的范围日志记录

Jmeter 中的 Application Insight Cookie 处理

在 Application Insight 和 Postman 中获取时间差异