全部产品
Search
文档中心

云消息队列 RabbitMQ 版:日志管理

更新时间:Jul 08, 2026

日志管理功能能够将云消息队列 RabbitMQ 版实例的消息操作日志自动推送至您的日志服务的LogStore。当消息发送、消费或确认过程中出现异常时,您可以在日志服务查询并分析消息的操作日志,进行异常诊断。

前提条件

  • 创建云消息队列 RabbitMQ 版实例。具体操作,请参见实例管理

  • 开通日志服务并创建Project和Logstore。具体操作,请参见存储资源层级关系说明

  • 根据控制台提示创建RabbitMQ服务关联角色AliyunServiceRoleForAmqpLogDelivery并授权,用于将日志推送到您的日志服务中。

重要

如果您删除Project、Logstore,或者将授予云消息队列 RabbitMQ 版的权限取消,日志将无法正常推送。

计费说明

  • 云消息队列 RabbitMQ 版

    使用日志管理功能时,云消息队列 RabbitMQ 版不收取费用。

  • 日志服务

    云消息队列 RabbitMQ 版日志被推送到日志服务后,日志服务会根据存储空间、流量、请求数等进行收费。更多信息,请参见按使用功能计费模式计费项

日志格式

日志格式说明

参数

描述

Action

操作对应的请求方法。取值和描述请参见Action请求方法

Code

状态码。 取值如下:

  • 200:请求成功。

  • 541:服务端内部错误。

  • 503:无效的命令。

  • 530:不允许的操作。

  • 404:资源不存在。

  • 406:预检查失败。

  • 403:权限错误。

Info

请求成功时不显示,显示时表示错误状态码信息。

InstanceId

云消息队列 RabbitMQ 版实例的ID。您可以在云消息队列 RabbitMQ 版控制台的实例详情页面或概览页面查看。

Queue

订阅或者消息对应的Queue。

  • Action为PushMessage、BasicGet和DeleteMessage时,为订阅的Queue。

  • Action为BasicReject时,为被拒绝的消息对应的Queue。

  • Action为BasicNack时,为Nack消息对应的Queue。

Property

消息的属性。取值和描述如下:

  • consumerTag:用于标识Queue的订阅者。

  • deliveryTag:服务端标识某个Channel上的唯一消息。

    说明

    Action为PushMessage、BasicGet、DeleteMessage或SendDlqMessage时,记录该字段。

RemoteAddress

发起该操作的客户端地址。

  • Action为SendMessage时,为Producer客户端地址。

  • Action为PushMessage时为Consumer客户端地址:

  • Action为BasicAck时,为Consumer客户端地址。

  • Action为DeleteMessage时,为Consumer客户端地址。

说明

Action为SendDlqMessage时,不记录该字段。

ReqUid

账号ID。

  • 如果您使用RAM用户收发消息,则为RAM用户ID。

  • 如果您使用阿里云账号(主账号)收发消息,则为阿里云账号ID。

说明

Action为SendDlqMessage时,不记录该字段。

ResourceName

资源名称。

  • messageId:使用SDK发送消息时设置的Message ID。

  • exchange:Exchange名称。您可以在云消息队列 RabbitMQ 版控制台的Exchange管理页面查看。

  • routingKey:您在使用SDK发送消息时设置的Routing Key。

说明

Action为ConnectionOpen、ConnectionClose、ChannelOpen或ChannelClose时,不记录该字段。

VHost

Vhost名称。您可以在云消息队列 RabbitMQ 版控制台的Vhost管理页面查看。

ConnectionId

服务端用于唯一标识Connection。

说明

Action为SendDlqMessage时,不记录该字段。

ChannelId

客户端生成的Channel ID,用于标识当前Connection下的唯一Channel。

说明

Action为ConnectionOpen和ConnectionClose时,为null。

microtime

请求发生时间,单位:微秒。

_source_

该参数为日志服务SLS(Log Service)的保留字段。如果您想了解该字段的含义,请参见保留字段

__tag__:__receive_time__

该参数为日志服务SLS的保留字段。如果您想了解该字段的含义,请参见保留字段

__topic__

该参数为日志服务SLS的保留字段。如果您想了解该字段的含义,请参见保留字段

Action请求方法

请求方法

说明

ConnectionOpen

开启连接。

ConnectionClose

关闭连接。

ChannelOpen

开启Channel。

ChannelClose

关闭Channel。

QueueDeclare

创建Queue。

QueueDelete

删除Queue。

ExchangeDeclare

创建Exchange。

ExchangeDelete

删除Exchange。

ExchangeBind

绑定路由到Exchange。

ExchangeUnBind

解除源Exchange到目标Exchange的绑定。

QueueBind

绑定路由到Queue。

QueueUnbind

解除源Exchange到目标Queue的x0005绑定。

SendMessage

生产者生产消息。

PushMessage

服务端推送消息。

BasicGet

客户端拉取消息。

BasicAck

ACK消息。

BasicConsume

订阅Queue。

BasicReject

Reject消息。

BasicRecover

Recover消息。

BasicNack

Nack消息。

BasicQos

设置Consumer的流控。

QueuePurge

清空Queue中所有消息。

DeleteMessage

客户端调用BasicAck,服务端确认消息被成功删除。

SendDlqMessage

发送死信消息。

操作步骤

云消息队列 RabbitMQ 版实例配置LoggingBucket,将日志推送到日志服务

  1. 登录云消息队列 RabbitMQ 版控制台,然后在左侧导航栏选择实例列表

  2. 实例列表页面的顶部菜单栏选择地域,然后在实例列表中,单击目标实例名称。

  3. 在左侧导航栏,单击日志管理

  4. 我的资源卡片,单击立即授权

    如果您已授予云消息队列 RabbitMQ 版访问日志服务权限,则无需操作。

  5. 日志管理页面,从Project 名称列表,选择已创建的Project,从Logstore 名称列表,选择已创建的Logstore,然后单击启用

  6. 登录日志服务控制台,开启日志索引并配置日志字段索引。具体操作请参见创建索引

  7. 在索引字段中手动添加__tag__:__receive_time__字段,并设置别名为timestamp。

实践教程

统计各队列消息收发次数以定位高额费用

当控制台无法直接提供队列维度的精确计费明细时,可以利用日志服务中的操作日志,按 Queue 字段聚合统计各队列在指定时间段内的消息收发次数,从而自主定位高消耗队列,无需依赖后台人工提取数据。

操作步骤

  1. 登录日志服务控制台,进入已配置云消息队列 RabbitMQ 版日志推送的 Logstore。

  2. 在查询分析栏输入以下语句,设置目标时间范围后单击查询/分析

    * | SELECT Queue,
          SUM(if(Action='SendMessage', 1, 0)) AS "发送次数",
          SUM(if(Action='PushMessage', 1, 0)) AS "推送次数",
          SUM(if(Action='BasicGet', 1, 0)) AS "拉取次数",
          COUNT(*) AS "总操作次数"
      WHERE Action IN ('SendMessage', 'PushMessage', 'BasicGet') AND Code=200
      GROUP BY Queue
      ORDER BY "总操作次数" DESC
      LIMIT 100
  3. 查询结果按总操作次数降序排列,即可定位消息收发量最高的队列。

说明

SendMessage 对应生产者发送消息,PushMessage 对应服务端推送消息,BasicGet 对应客户端拉取消息。上述查询仅统计状态码为 200(成功)的操作。如需调整统计范围(例如包含失败操作或增加其他 Action 类型),可修改 WHERE 子句中的筛选条件。

常见问题

为什么客户端日志打印时间与云消息队列 RabbitMQ 版服务端日志显示的投递成功时间存在差异?

建议按以下步骤排查:

  1. 确认服务端投递是否正常:在日志服务中查询服务端操作日志,筛选 Action=PushMessageAction=DeleteMessage 的记录,查看 Code 字段是否均为 200,确认服务端已正常完成投递且无异常延迟。

  2. 若服务端日志正常,排查客户端环境:客户端记录时间晚于服务端实际投递时间,通常由客户端自身环境因素导致。请重点排查以下情况:

    • 网络波动:客户端与服务端之间存在网络抖动或丢包,导致 ACK 响应延迟到达客户端。

    • CPU 高负载:客户端 CPU 占用率过高,消息处理线程因得不到及时调度而产生延迟。

    • 内存频繁 Full GC:JVM 发生 Full GC 时所有线程暂停(Stop-the-World),调用 convertAndSend 等方法后的处理耗时显著增加,导致客户端记录的完成时间晚于服务端实际投递时间。

收到云消息队列 RabbitMQ 版报警日志或告警通知后如何分析原因?

收到报警日志时,建议按以下步骤定位根因:

  1. 查看日志中的控制台链接:报警日志通常包含关联的控制台地址(例如 cis.console.alibabacloud.com 相关链接),单击该链接直接进入对应的任务详情页或集群监控页。

  2. 查看任务详情和指标数据:在任务详情页查看详细的报警上下文,结合集群监控指标(如连接数、消息堆积量、网络流量等),定位触发报警的根本原因。

  3. 关联操作日志深入分析:如需进一步排查,可在日志服务中,以报警发生时间为基准,查询对应队列或实例的操作日志,结合 Code 字段和 Action 字段分析异常原因。常见触发场景包括:消息大量堆积、消费者连接中断、频繁创建或删除资源等。