如何为Azure告警规则添加AzureDiagnostics相关自定义属性
实现Azure告警规则自定义属性填充特定诊断字段的最佳方案
1. 重构告警规则的日志查询语句
告警规则的自定义属性只能引用查询结果集中的字段,因此需要先调整日志查询,确保它既满足触发条件(任务完成事件数>0),又返回你需要的所有字段(含计算字段)。
替换原告警查询为以下Kusto语句:
AzureDiagnostics | where OperationName == "TaskCompleteEvent" and id_s == "analyse" | extend ElapsedTime = datetime_diff('second', executionInfo_endTime_t, executionInfo_startTime_t) | extend ElapsedTime_in_Hours_Minutes_Seconds = ElapsedTime * 1s | project jobId_s, id_s, ElapsedTime, ElapsedTime_in_Hours_Minutes_Seconds, TimeGenerated, SubscriptionId, ResourceGroup, ResourceType
- 用
extend生成你需要的计算字段 - 用
project指定最终要返回的字段(包含基础属性和自定义计算字段) - 告警触发条件设置为结果数大于0,确保有符合条件的事件时触发告警
如果需要聚合同批次的多个任务事件(一次告警展示所有相关事件),可以使用聚合查询:
AzureDiagnostics | where OperationName == "TaskCompleteEvent" and id_s == "analyse" | extend ElapsedTime = datetime_diff('second', executionInfo_endTime_t, executionInfo_startTime_t) | extend ElapsedTime_in_Hours_Minutes_Seconds = ElapsedTime * 1s | summarize JobIds = make_list(jobId_s), ElapsedTimes_Seconds = make_list(ElapsedTime), ElapsedTimes_HMS = make_list(ElapsedTime_in_Hours_Minutes_Seconds), EventTimes = make_list(TimeGenerated) by SubscriptionId, ResourceGroup, ResourceType | where array_length(JobIds) > 0
2. 配置告警规则的自定义属性
在告警规则的编辑页面,找到「自定义属性」区域,添加键值对映射查询结果中的字段:
- 键:
JobId,值:{jobId_s} - 键:
TaskId,值:{id_s} - 键:
耗时(秒),值:{ElapsedTime} - 键:
耗时(时分秒),值:{ElapsedTime_in_Hours_Minutes_Seconds} - 键:
事件生成时间,值:{TimeGenerated} - 键:
订阅ID,值:{SubscriptionId} - 键:
资源组,值:{ResourceGroup} - 键:
资源类型,值:{ResourceType}
如果用了聚合查询,就对应修改值为聚合字段,比如{JobIds}、{ElapsedTimes_HMS}。
3. 验证配置效果
手动触发一个符合条件的TaskCompleteEvent,待告警触发后,查看告警通知(邮件、Teams等),确认自定义属性已正确填充所需字段内容。
注意事项
- 确保
executionInfo_endTime_t和executionInfo_startTime_t字段存在于AzureDiagnostics表且类型为datetime,否则datetime_diff会报错,需根据实际表结构调整字段名 - 自定义属性的键名可根据业务需求自定义,便于后续告警解析
- 字段名区分大小写,必须与
project或summarize中定义的完全一致
内容的提问来源于stack exchange,提问作者gbolahr
相关产品推荐
相关产品推荐

