RabbitMQ消息追踪之rabbitmq_tracing

RabbitMQ消息追踪之rabbitmq_tracing

rabbitmq_tracing插件相当于Firehose的GUI版本,它同样能跟踪RabbitMQ中消息的流入流出情况。rabbitmq_tracing插件同样会对流入流出的消息做封装,然后将封装后的消息日志存入相应的trace文件之中。

可以使用rabbitmq-plugins enable rabbitmq_tracing命令来启动rabbitmq_tracing插件。

[root@node3 opt]# rabbitmq-plugins enable rabbitmq_tracing
The following plugins have been enabled:
rabbitmq_tracing

Applying plugin configuration to rabbit@node3... started 1 plugin.

对应的关闭插件的命令是:rabbitmq-plugins disable rabbitmq_tracing。

在Web管理界面 “Admin”右侧原本只有”Users”、”Virtual Hosts”以及”Policies“这个三Tab项,在添加rabbitmq_tracing插件之后,会多出”Tracing”这一项内容:

可以在此Tab项中添加相应的trace:

在添加完trace之后,会根据匹配的规则将相应的消息日志输出到对应的trace文件之中,文件的默认路径为/var/tmp/rabbitmq-tracing。可以在页面中直接点击“Trace log files”下面的列表直接查看对应的日志文件。

如下图,我们添加了两个trace任务。

与其相对应的trace文件如下:

再添加完相应的trace任务之后,会发现多了两个队列:

就以第一个队列amq.gen-MoyvSKQau9udetl4lUdQZw而言,其所绑定的交换器就是amq.rabbitmq.log。

由此可以看出整个rabbitmq_tracing和Firehose在实现上如出一辙,只不过rabbitmq_tracing的方式比Firehose多了一层GUI的包装,更容易使用和管理。

再来补充说明上图中“Name”,“Format”,“Max payload bytes”,”Pattern”的具体含义。“Name”,顾名思义,就是为你所要即将创建的trace任务取个名称。

“Format”表示输出的消息日志格式,有Text和JSON两种,Text格式的日志方便人类阅读,JSON的方便程序解析。

Text格式的消息日志参考如下:


================================================================================
2017-10-24 9:37:04:412: Message published

Node: rabbit@node1
Connection: <rabbit@node1.3.3552.0>
Virtual host: /
User: root
Channel: 1
Exchange: exchange
Routing keys: [<<"rk">>]
Routed queues: [<<"queue">>]
Properties: [{<<"delivery_mode">>,signedint,1},{<<"headers">>,table,[]}]
Payload:
trace test payload.

JSON格式的消息日志参考如下:

{
"timestamp": "2017-10-24 9:37:04:412",
"type": "published",
"node": "rabbit@node1",
"connection": "<rabbit@node1.3.3552.0>",
"vhost": "/",
"user": "root",
"channel": 1,
"exchange": "exchange",
"queue": "none",
"routed_queues": [
"queue"
],
"routing_keys": [
"rk"
],
"properties": {
"delivery_mode": 1,
"headers": {}
},
"payload": "dHJhY2UgdGVzdCBwYXlsb2FkLg=="
}

JSON格式的payload(消息体)默认会采用Base64进行编码,如上面的“trace test payload.”会被编码成“dHJhY2UgdGVzdCBwYXlsb2FkLg==”。

“Max payload bytes”表示每条消息的最大限制,单位为B。比如设置了了此值为10,那么当有超过10B的消息经过RabbitMQ流转时,在记录到trace文件的时候会被截断。如上text日志格式中“trace test payload.”会被截断成“trace test”。

“Pattern”用来设置匹配的模式,和Firehose的类似。如“#”匹配所有消息流入流出的情况,即当有客户端生产消息或者消费消息的时候,会把相应的消息日志都记录下来;“publish.#”匹配所有消息流入的情况;“deliver.#”匹配所有消息流出的情况。


欢迎支持笔者的作品《深入理解Kafka: 核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客(ID: hiddenkafka)。
本文作者: 朱小厮

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×