Rabbitmq Trace 日志的使用

1.Trace

Trace是Rabbitmq用于记录每一次发送的消息,方便使用Rabbitmq的开发者调试、排错。可通过插件形式提供可视化界面。

我这里主要是使用trace拿到消息内容,使用python脚本联调模拟server发送消息。

python发送MQ消息

2.Trace实现概况

2.1 Trace启动后会自动创建系统Exchange:amq.rabbitmq.trace
2.2 每个队列会自动绑定该Exchange,绑定后发送到队列的消息都会记录到Trace日志

3.使用Trace

3.1 先了解Rabbitmq的使用及Web监控工具的使用:

https://blog.csdn.net/MissOfSpring/article/details/115870483
https://blog.csdn.net/MissOfSpring/article/details/115918424
https://blog.csdn.net/MissOfSpring/article/details/115918889

3.2 启动Trace插件
     a) 列出本机已安装的插件:rabbitmq-plugins list(请先定位到Rabbitmq服务安装目录)

     b) 启动Trace插件:rabbitmqctl trace_on   (关闭Trace:rabbitmqctl trace_off)
3.3 查看捕获到的Trace信息
  • Management插件–>Admin–>Trace
  • 新增Trace,格式分别是Text(方便人类阅读)、Json(方便机器识别)
  • 发送消息,查看Trace拦截的信息
  • 查看日志信息 (单击日志文件打开,这里是MyTrace.log)

4.Rabbitmq启用日志功能记录消息队列收发情况

4.1启用日志插件命令

当发现admin没有trace的时候:
Rabbitmq Trace 日志的使用_第1张图片

执行如下命令:

rabbitmq-plugins enable rabbitmq_tracing

执行后:
Rabbitmq Trace 日志的使用_第2张图片

4.2 管理界面添加tracing

点击“Admin”菜单,右边会多出一个“Tracing”的菜单,填写Name、Format、Max payload bytes、Pattern 然后点击“添加Add trace”即可添加一个日志

4.3 填写说明
  • Name:自定义,建议标准点容易区分

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

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

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

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

4.4 pattern模式

最重要的是理解pattern的格式。一般来跟踪消息时会涉及到两个部分:有没有收到,有没有发出去。
Rabbitmq Trace 日志的使用_第3张图片

  • add_ne3 #deliver.MSGQUEUE_OTN_ADD_EDIT_NE_QUEUE MSGQUEUE_OTN_ADD_EDIT_NE_QUEUE 是队列名
  • add_ne1 #publish.AppMsgCenterDurable AppMsgCenterDurable是交换机名称
  • add_ne2 #.MSGQUEUE_OTN_ADD_EDIT_NE_QUEUE MSGQUEUE_OTN_ADD_EDIT_NE_QUEUE 是队列名
    发现只有add_ne2生成了日志(与下边官网说的**publish.{exchangename}或者deliver.{queuename}**对应不上,因为这两种方式没有抓到trace包),并且打开add_ne2.log日志之后。

Rabbitmq Trace 日志的使用_第4张图片
抓取的消费者包内容。见附录5。

官网的说法:
也就是抓publish跟着exchangename走,抓消费跟着queuename走。

but与我上边测试的结果不一样。 有知道的麻烦告知一下。
Rabbitmq Trace 日志的使用_第5张图片

5.附录之消费者包

================================================================================
2021-07-21 3:26:36:077: Message received
Node: rabbit@localhost
Connection: 172.16.1.230:48704 -> 172.16.1.230:5672
Virtual host: /
User: admin
Channel: 1
Exchange: AppMsgCenterDurable
Routing keys: [<<“app.ne.operation”>>]
Queue: MSGQUEUE_OTN_ADD_EDIT_NE_QUEUE
Properties: [{<<“headers”>>,table,[]}]
Payload:
{“topic”:“resource”,“operation”:“add”,“source”:“res”,“type”:“ne”,“isSouthAdd”:true,“datas”:[{“subnet”:“topo”,“symbol_id”:100000010,“main_view_id”:1,“ne_id”:100007,“symbol_style”:“1”,“create_user”:“administrator”,“res_type_name”:“NE”,“map_parent_id”:“0”,“tree_parent_id”:“0”,“symbol_name1”:“666”,“symbol_name2”:"",“symbol_name3”:"",“x”:“934”,“y”:“426”,“status_is_ping_ok”:1,“is_visible”:1,“res_id”:100007,“topo_type_id”:“11_OPCOM100-MMU12-RP”,“real_res_type_name”:“NE”,“real_res_id”:100007,“geo_lng”:123,“geo_lat”:22,“protocolController”:“5”,“userlabel”:“666”,“ip”:"",“subsystemid”:“22”,“type_userlabel”:“OPCOM100-MMU12-RP”,“ne_typename”:“OPCOM100-MMU12-RP”,“macaddress”:"",“islocal”:“0”,“ssh_port”:“22”,“telnet_port”:“23”,“longitude”:“123”,“latitude”:“22”,“location”:“瑗垮畨璞柉鍛稿伔”,“serial_no”:“SN023341edd”,“vendor”:“Raisecom2HuaWei”,“tenant”:"",“tenantName”:"",“restypename”:“NE”,“uplink_ne”:“100001”,“uplink_port_nename”:“OEO-212”,“uplink_port”:"/ne=100001/shelf=1/slot=7/card=1.1/port=1#portType=262",“uplink_port_name”:“7-PRI”,“uplink_channel”:"/ne=100001/shelf=1/slot=7/card=1.1/port=12#portType=263;/ne=100001/shelf=1/slot=7/card=1.1/port=11#portType=263;/ne=100001/shelf=1/slot=7/card=1.1/port=10#portType=263",“uplink_channel_name”:“7-C/1374.5;7-C/1367.5;7-C/1354.5”,“port”:“161”,“timeout”:“5”,“retries”:“1”,“version”:“2”,“community_read”:“public”,“community_write”:“private”,“v3contextName”:"",“v3securityName”:"",“v3securityLevel”:“noauthnopriv”,“v3authProtocol”:“MD5”,“v3authKey”:"",“v3privProtocol”:“DES”,“v3privKey”:"",“netPort”:“83”,“netTimeout”:“3”,“netRetries”:“3”,“user”:“admin”,“password”:“admin”,“poll_enabled”:0,“selfId”:0,“neid”:100007}]}

你可能感兴趣的:(RabbitMQ)