如何设置Azure警报规则:过去30天内10天超阈值即触发
如何设置Azure警报规则,使其在过去30天中有10天超过阈值时触发?
解决方案
要实现该需求,核心是修改Kusto查询,直接返回过去30天内超过阈值的天数统计值,而非每天的明细行,让Azure警报能基于这个单一统计值设置触发条件。
步骤1:修改Kusto查询
将原查询调整为最终输出超阈值的总天数,示例如下:
KubeNodeInventory | where Computer startswith "aks-cpu" | where TimeGenerated >= startofday(ago(30d)) and TimeGenerated < startofday(now()) | summarize AmtAboveReserved = dcount(Computer) by Day = bin(TimeGenerated, 1d) | where AmtAboveReserved > 5 // 筛选出超过预留值的天数 | summarize TotalDaysAboveThreshold = count() // 统计超阈值的总天数
该查询最终会返回一个单独数值(如12),代表过去30天中超阈值的天数。
步骤2:配置Azure警报规则
- 在Azure门户创建基于日志的警报规则,选择上述修改后的查询。
- 测量设置:
- 聚合类型:选择
Sum或Count(因查询返回单个统计值,两者均可) - 聚合列:选择
TotalDaysAboveThreshold
- 聚合类型:选择
- 条件设置:
- 运算符:选择
Greater Than - 阈值:输入
10
- 运算符:选择
- 无需设置按维度拆分(需求为全局天数统计,不需要按维度拆分警报)。
之前尝试无效的原因
- 未设置维度拆分但无预览:原查询返回多行数据,Azure警报默认需要聚合后的数值,无法直接基于行数判断,需修改查询返回统计值。
- 按维度拆分要求数值列:维度拆分用于按不同维度(如PodType)生成警报,你的需求是全局统计,无需拆分。
- 使用
row_number()无效:row_number()为每行分配序号,Azure警报会逐行评估,而非取最后一行的序号,因此无法正确触发。
背景补充
我有一个用于检测节点池数量是否超过预留数量的Kusto查询,查询及结果均正常(查询存在冗余,仅用于测试)。原查询语句:
KubeNodeInventory | where Computer startswith "aks-cpu" | where TimeGenerated >= startofday(ago(30d)) and TimeGenerated < startofday(now()) | summarize AmtAboveReserved = dcount(Computer) by Day = bin(TimeGenerated, 1d) | extend MoreThanReserved = AmtAboveReserved > 5 | extend AmountReserved = 5 | extend PodType = "aks-cpu" | order by Day asc // until here build table to check results | where AmtAboveReserved > 5 // here filter again for the alert rule
查询结果截图:显示按天统计的节点池数量超过预留值的记录,包含日期、AmtAboveReserved、MoreThanReserved等列。
已尝试的操作
- 未设置“按维度拆分”,但“创建警报规则”界面无预览图表且警报不触发;
- 按截图设置“按维度拆分”,但要求指定数值列;
- 添加行计数器
| extend RowNumber = row_number(),基于该列触发警报,但数值显示为“2”而非10或30。
更新(Venkat评论后的设置截图)
截图显示警报规则设置界面,包含“测量”“条件”等配置项,当前设置为基于行数统计,阈值设置为大于10。
内容的提问来源于stack exchange,提问作者Tlatwork
相关产品推荐
相关产品推荐

