消息追踪插件
消息追踪插件记录消息路由过程的详细信息,用于调试和问题定位。
安装与启用
插件为 RabbitMQ 官方内置,无需额外下载。
Bash
# 启用追踪插件
rabbitmq-plugins enable rabbitmq_tracing
# 重启 RabbitMQ
systemctl restart rabbitmq-server
# 验证插件状态
rabbitmq-plugins list | grep tracing
插件启用后通过 Management UI 或命令行配置追踪规则。
创建追踪日志
追踪日志记录指定 VHost 的消息流转信息。
Bash
# 创建追踪日志(命令行方式)
rabbitmqctl trace_on -p /
# 创建追踪日志(指定日志名称)
rabbitmqctl trace_on -p / -n my_trace
# 关闭追踪
rabbitmqctl trace_off -p /
# 查看当前追踪状态
rabbitmqctl tracing_status
通过 Management UI 创建:
- 访问
http://localhost:15672 - 进入 Admin → Tracing
- 点击 "Add a trace"
- 设置 VHost、日志格式、输出方式
Java Client 配置追踪
追踪插件通过 Policy 或声明 Tracing Exchange 实现。
Java
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
// 方式1:通过 Policy 启用追踪
Map<String, Object> policyArgs = new HashMap<>();
policyArgs.put("trace", "true");
channel.exchangeDeclare("traced_exchange", "topic", true);
// 应用策略(需预先创建策略)
// rabbitmqctl set_policy -p / trace_all ".*" '{"trace":"true"}'
// 方式2:声明追踪交换机
Map<String, Object> exchangeArgs = new HashMap<>();
exchangeArgs.put("x-tracing-enabled", true);
channel.exchangeDeclare("traced_exchange", "topic", true, false, exchangeArgs);
追踪会影响性能,生产环境建议仅在排查问题时临时开启。
追踪日志格式
追踪日志记录消息的完整流转路径。
Bash
# 日志默认输出到 RabbitMQ 日志文件
# Linux: /var/log/rabbitmq/rabbit@*.log
# 查看追踪日志
tail -f /var/log/rabbitmq/rabbit@*.log | grep tracing
日志示例:
Bash
2026-05-22 10:30:15 [tracing] VHost: /
2026-05-22 10:30:15 [tracing] Exchange: my_exchange (topic)
2026-05-22 10:30:15 [tracing] Routing Key: order.created
2026-05-22 10:30:15 [tracing] Message: {"order_id": "12345"}
2026-05-22 10:30:15 [tracing] Delivered to Queue: order_queue
日志字段说明:
| 字段 | 说明 |
|---|---|
| VHost | 虚拟主机 |
| Exchange | 交换机名称和类型 |
| Routing Key | 消息路由键 |
| Message | 消息内容(默认截断) |
| Delivered to Queue | 目标队列名称 |
按规则追踪
通过 Policy 实现按规则过滤追踪。
Bash
# 仅追踪特定路由键的消息
rabbitmqctl set_policy -p / trace_order "order\..*" '{"trace":"true"}'
# 仅追踪特定交换机的消息
rabbitmqctl set_policy -p / trace_exchange "^order_exchange$" '{"trace":"true"}'
# 查看所有追踪策略
rabbitmqctl list_policies
Policy 匹配规则:
- 名称正则匹配交换机或路由键
- 仅匹配的消息会被记录,降低性能影响
日志输出到文件
默认追踪日志输出到 RabbitMQ 主日志,可配置独立文件。
text
# 编辑 rabbitmq.conf
# Linux: /etc/rabbitmq/rabbitmq.conf
# 配置追踪日志输出
log.tracing.file = /var/log/rabbitmq/tracing.log
log.tracing.file.count = 5
log.tracing.file.max_size = 10485760
配置说明:
| 配置项 | 说明 | 默认值 |
|---|---|---|
log.tracing.file | 日志文件路径 | 主日志文件 |
log.tracing.file.count | 日志轮转数量 | 5 |
log.tracing.file.max_size | 单文件最大大小(字节) | 10MB |
追踪日志文件需定期清理,避免磁盘占用过大。
注意事项
- 追踪会显著降低消息吞吐,生产环境仅在排查时开启
- 追踪日志包含消息内容,注意数据隐私和合规要求
- 日志文件会持续增长,需配置合理的轮转策略
- 追踪完成后务必关闭,避免持续影响性能
要点总结
rabbitmq_tracing插件记录消息在交换机和队列中的流转路径- 通过
rabbitmqctl trace_on开启追踪,trace_off关闭 - 日志包含 VHost、交换机、路由键、消息内容和目标队列信息
- 通过 Policy 实现按规则过滤追踪,降低性能影响
- 追踪严重影响性能,生产环境仅在排查问题时临时开启
📝 发现内容有误?点击此处直接编辑