如何配置Azure Service Bus队列超2小时未消费消息告警?
解决Azure Service Bus队列超时未消费消息的告警配置问题
一、先确认诊断日志的正确配置
要获取消息详情数据,必须确保诊断设置开启了正确的日志类别:
- 进入Service Bus命名空间的诊断设置,勾选以下两类日志:
OperationalLogs:记录消息发送、接收、死信等核心操作事件MessageLogs:包含消息生命周期的详细数据(这是获取消息详情的关键,未开启则无法查询)
- 确认日志目标存储为Log Analytics工作区,且等待15-30分钟让日志开始同步(Azure日志存在一定延迟)
二、自定义日志查询语句
在Log Analytics中使用以下Kusto查询,筛选超过2小时未被消费的消息:
AzureDiagnostics | where ResourceType == "SERVICEBUS" and Category == "MessageLogs" | where OperationName == "Send" | extend MessageId = tostring(Properties.MessageId) | extend EnqueueTime = todatetime(Properties.EnqueueTime) | extend TimeSinceEnqueue = now() - EnqueueTime | where TimeSinceEnqueue > time(2h) // 排除已被接收或死信的消息 | join kind=leftanti ( AzureDiagnostics | where ResourceType == "SERVICEBUS" and Category == "MessageLogs" | where OperationName in ("Receive", "Deadletter") | extend MessageId = tostring(Properties.MessageId) ) on MessageId | project MessageId, EnqueueTime, TimeSinceEnqueue, QueueName = tostring(Properties.EntityName)
逻辑说明:
- 从
MessageLogs中提取所有已发送的消息 - 通过
leftanti join排除已经被接收或标记为死信的消息 - 计算消息入队时间与当前时间的差值,筛选出超过2小时的记录
三、告警规则配置步骤
- 在自定义日志搜索信号页面,粘贴上述查询语句
- 设置测量参数:
- 聚合类型:
Count - 聚合粒度:
5分钟(可根据监控频率需求调整)
- 聚合类型:
- 配置阈值:设置为
大于0,表示存在超时未消费消息时触发告警 - 关联动作组:设置邮件、短信或webhook等通知方式
- 完成告警规则的创建与保存
常见问题排查
- 若仍无
MessageLogs数据:- 检查诊断设置是否确实勾选了
MessageLogs,且目标Log Analytics工作区正确 - 确认队列中有消息发送(无消息则无对应日志)
- 延长等待时间(部分场景下日志同步可能需要30分钟以上)
- 检查诊断设置是否确实勾选了
- 若查询结果不准确:
- 先运行
AzureDiagnostics | where Category == "MessageLogs" | distinct OperationName,确认环境中实际的操作名称取值 - 检查
EnqueueTime的格式,部分环境可能需要调整todatetime的解析参数
- 先运行
内容的提问来源于stack exchange,提问作者laxmi
相关产品推荐
相关产品推荐

