You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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)

逻辑说明:

  1. 从MessageLogs中提取所有已发送的消息
  2. 通过leftanti join排除已经被接收或标记为死信的消息
  3. 计算消息入队时间与当前时间的差值,筛选出超过2小时的记录

三、告警规则配置步骤

  1. 在自定义日志搜索信号页面,粘贴上述查询语句
  2. 设置测量参数:
    • 聚合类型:Count
    • 聚合粒度:5分钟(可根据监控频率需求调整)
  3. 配置阈值:设置为大于0,表示存在超时未消费消息时触发告警
  4. 关联动作组:设置邮件、短信或webhook等通知方式
  5. 完成告警规则的创建与保存

常见问题排查

  • 若仍无MessageLogs数据:
    • 检查诊断设置是否确实勾选了MessageLogs,且目标Log Analytics工作区正确
    • 确认队列中有消息发送(无消息则无对应日志)
    • 延长等待时间(部分场景下日志同步可能需要30分钟以上)
  • 若查询结果不准确:
    • 先运行AzureDiagnostics | where Category == "MessageLogs" | distinct OperationName,确认环境中实际的操作名称取值
    • 检查EnqueueTime的格式,部分环境可能需要调整todatetime的解析参数

内容的提问来源于stack exchange,提问作者laxmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:12:16