如何配置Azure Event Hubs/Functions未收到指定数据的告警规则
Azure Event Hubs/Functions 特定数据缺失告警配置方法
你之前配置的总计数、异常类告警用的是平台自带的聚合指标,这类指标不包含单条消息的内容字段,要实现指定内容的缺失检测,按以下步骤操作即可,你的7天消息保留期完全覆盖查询窗口要求,不需要调整保留策略。
前置准备
要查询消息里的studentId字段,你需要先把对应日志投递到Log Analytics工作区,二选一即可:
- 给Event Hubs开启诊断设置,将「接收事件」类别的日志投递到你现有告警使用的Log Analytics工作区,开启后日志会包含消息属性与可解析的消息体
- 如果你已经用Azure Functions消费Event Hubs消息,直接用Functions自带的日志即可,不需要额外开Event Hubs诊断:只需要在Functions处理消息的代码里,加一条打印
studentId的日志即可,成本更低
核心查询语句
在Log Analytics里用Kusto查询语句统计指定时间窗口内,目标studentId的消息数量,数量为0就代表未收到对应数据。
场景1:过去6小时未收到studentId=1的消息(Event Hubs侧查询)
let targetStudentId = "1"; let checkTimeRange = 6h; EHReceivedEvents | where TimeGenerated >= ago(checkTimeRange) | extend messagePayload = parse_json(Body) | where tostring(messagePayload.studentId) == targetStudentId | summarize msgCount = count()
场景2:过去6小时未收到studentId=1的消息(Azure Functions侧查询)
let targetStudentId = "1"; let checkTimeRange = 6h; FunctionAppLogs | where TimeGenerated >= ago(checkTimeRange) | where LogLevel == "Information" | where Message has strcat("studentId=", targetStudentId) | summarize msgCount = count()
场景3:当日未收到studentId=1的消息
把上面查询里的checkTimeRange替换为now() - startofday(now())即可,统计范围自动覆盖当日0点到当前时间。
告警规则配置
- 新建Log Analytics告警规则,条件选择自定义日志搜索,粘贴上面对应场景的查询语句
- 告警逻辑设置为:度量值
msgCount小于1 - 评估周期和查询窗口保持一致(比如6小时窗口就设评估周期为6小时,检查频率设为30分钟/1小时即可,避免不必要的资源消耗)
- 配置你需要的告警通知渠道即可
注意:如果用Event Hubs诊断日志查询消息体,会产生少量的日志存储费用,消息量级不大的话成本几乎可以忽略;如果对成本敏感,优先用Azure Functions侧的日志做校验,不需要额外解析Event Hubs消息体。
内容的提问来源于stack exchange,提问作者sreddy
相关产品推荐
相关产品推荐

