RabbitMQ消息追踪插件rabbitmq_tracing

RabbitMQ消息追踪

目的:

追踪mq的消息的来源和去向,并且查看消息的具体内容

方法:

rabbitmq官方提供了一个rabbitmq_tracing插件可以完成目标

部署:

一、开启rabbitmq的tracing插件

#rabbitmq-plugins enable rabbitmq_tracing

开启tracing插件mq的web页面可以看到admin标签页多了一个选项
RabbitMQ消息追踪插件rabbitmq_tracing_第1张图片

二、配置追踪

如下图指定vhost添加一个追踪(文件可以删除会自动产生)

RabbitMQ消息追踪插件rabbitmq_tracing_第2张图片

三、排错

在部署插件的时候遇到许多坑在这里记录下

1、开启插件后配置追踪时失败如下图

RabbitMQ消息追踪插件rabbitmq_tracing_第3张图片

此时日志报错

2019-06-12 11:03:07.108 [error] <0.18516.14> Supervisor {<0.18516.14>,rabbit_tracing_consumer_sup} had child consumer started with rabbit_tracing_consumer:start_link([{vhost,<<"/">>},{name,<<“test”>>},{format,<<“text”>>},{pattern,<<"#">>},{<<“format”>>,<<“text”>>},…]) at undefined exit with reason no match of right hand value {error,{auth_failure,“Refused”}} in rabbit_tracing_consumer:init/1 line 58 in context start_error
2019-06-12 11:03:07.108 [error] <0.18517.14> CRASH REPORT Process <0.18517.14> with 0 neighbours crashed with reason: no match of right hand value {error,{auth_failure,“Refused”}} in rabbit_tracing_consumer:init/1 line 58
2019-06-12 11:03:20.017 [info] <0.950.0> Disabling tracing for vhost ‘/’

这是因为 rabbitmq_tracing插件默认使用的是guest用户,一般在正式生产环境使用时都会删除此用户,所以开启插件时会报错。
解决:
(1)、RabbitMq 3.6.0之前,唯一可以远程通过虚拟主机创建跟踪文件的用户是guest所以3.6.0之前的用户只能手动重新建立起guest(密码也要是guest)用户解决;
(2)、3.6.0之后的版本可通过修改配置文件修改默认用户(当然也可以重建guest用户)
之前在网络上搜索了一堆资料建议将配置加在rabbitmq.conf中,但我多次尝试均失败(使用3.6的朋友可以尝试)。最后查看了mq的官方文档发现,3.7之后文档格式发生了变化虽然也支持erlang的格式,但是新格式sysctl更清晰更易于生成部署自动化工具(官方文档传送门:https://www.rabbitmq.com/configure.html )而且还有了一个补充配置文件advanced.config(某些配置设置不可用或难以使用sysctl格式进行配置可以使用Erlang术语格式的其他配置文件)它将与rabbitmq.conf中提供的配置合并生效。所以应该将配置更改写在advanced.config中
我的advanced.config文件
[root@centos7-002 rabbitmq]# cat advanced.config
[
{rabbitmq_tracing, [
{username, “mq”},
{password, “123456”}]},
{directory, “/data/log/mq”}
].
(如果没有advanced.config直接在rabbitmq.conf同目中创建即可)
修改好配置后重启mq生效,此时追踪可以正常运行
注:3.7版本的追踪插件已可在页面修改用户不要要以上操作

2、对于集群启用rabbitmq_tracing
如果是多台搭建的镜像集群,要追踪所有消息则要所有集群节点都开启插件
假如只开启单台只会纪录连接到这一台的消息收发,连接到其他节点的消息收发不会纪录

A机开启追踪B机未开启

A B
发送到A 消息有记录 消息无纪录
发送到B 消息无记录 消息无记录
从A消费 消息有记录 消息无记录
从B消费 消息无记录 消息无记录

A和B都开启追踪

A B
发送到A 消息有记录 消息有纪录
发送到B 消息有记录 消息有记录
从A消费 消息有记录 消息有记录
从B消费 消息有记录 消息有记录

3、理解pattern的格式
官网介绍:
The firehose publishes messages to the topic exchange amq.rabbitmq.trace with
routing key either “publish.exchangename”, for messages entering the broker, or “deliver.queuename”, for messages leaving the broker;
大概就是抓publish匹配exchange名字,抓消费匹配队列名字。具体如下

#匹配所有的消息,无论是发布还是消费的信息

publish.# 匹配所有发布的消息。

deliver.# 匹配所有被消费的消息。

#.test 如果test是队列,则匹配已经被消费了的test队列的消息。如果test是exchange,则匹配所有经过该exchange的消息。

你可能感兴趣的:(rabbitmq)