如果在使用RabbitMQ的过程中出现了异常情况,通过翻阅RabbitMQ的服务日志可以让你在处理异常的过程中事半功倍。RabbitMQ日志中会有明确的事件日期、事件内容以及事件等级等。RabbitMQ的日志默认存放在$RABBITMQ_HOME/var/log/rabbitmq目录下。本问主要从RabbitMQ服务开启、RabbitMQ服务关闭以及RabbitMQ集群搭建的角度来举例说明RabbitMQ的日志的一些查看思路。

各位读者实际使用的RabbitMQ版本各有差异,这里我们挑选一个偏旧版本(3.6.2)来统筹说明,以期不会有太大的偏差。所幸各个版本的日志大致相同,也会有略微变化。读者需要培养一种使用服务日志来解决问题的思路,本文只做抛砖引玉之用。


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

欢迎跳转到本文的原文链接:https://honeypps.com/mq/how-to-review-rabbitmq-log/

启动RabbitMQ服务

启动RabbitMQ服务可以使用rabbitmq-server -detached命令,这个命令会顺带启动Erlang虚拟机和RabbitMQ应用服务,而rabbitmqctl start_app用来启动RabbitMQ应用服务。注意RabbitMQ应用服务启动的前提是Erlang虚拟机是运转正常的。首先这里来看下在执行完rabbitmq-server -detached命令其相应的服务日志是什么。

Starting RabbitMQ 3.6.2 on Erlang 19.1
Copyright (C) 2007-2016 Pivotal Software, Inc.
Licensed under the MPL.  See http://www.rabbitmq.com/=INFO REPORT==== 3-Jul-2017::10:52:08 ===
node           : rabbit@node1
home dir       : /root
config file(s) : /opt/rabbitmq/etc/rabbitmq/rabbitmq.config (not found)
cookie hash    : VCwbL3S9/ydrGgVsrLjVkA==
log            : /opt/rabbitmq/var/log/rabbitmq/rabbit@node1.log
sasl log       : /opt/rabbitmq/var/log/rabbitmq/rabbit@node1-sasl.log
database dir   : /opt/rabbitmq/var/lib/rabbitmq/mnesia/rabbit@node1=INFO REPORT==== 3-Jul-2017::10:52:09 ===
Memory limit set to 3148MB of 7872MB total.=INFO REPORT==== 3-Jul-2017::10:52:09 ===
Disk free limit set to 50MB=INFO REPORT==== 3-Jul-2017::10:52:09 ===
Limiting to approx 924 file handles (829 sockets)=INFO REPORT==== 3-Jul-2017::10:52:09 ===
FHC read buffering:  OFF
FHC write buffering: ON=INFO REPORT==== 3-Jul-2017::10:52:09 ===
Database directory at /opt/rabbitmq/var/lib/rabbitmq/mnesia/rabbit@node1 is empty. Initialising from scratch...=INFO REPORT==== 3-Jul-2017::10:52:10 ===
Priority queues enabled, real BQ is rabbit_variable_queue=INFO REPORT==== 3-Jul-2017::10:52:10 ===
Adding vhost '/'=INFO REPORT==== 3-Jul-2017::10:52:10 ===
Creating user 'guest'=INFO REPORT==== 3-Jul-2017::10:52:10 ===
Setting user tags for user 'guest' to [administrator]=INFO REPORT==== 3-Jul-2017::10:52:10 ===
Setting permissions for 'guest' in '/' to '.*', '.*', '.*'=INFO REPORT==== 3-Jul-2017::10:52:10 ===
msg_store_transient: using rabbit_msg_store_ets_index to provide index=INFO REPORT==== 3-Jul-2017::10:52:10 ===
msg_store_persistent: using rabbit_msg_store_ets_index to provide index=WARNING REPORT==== 3-Jul-2017::10:52:10 ===
msg_store_persistent: rebuilding indices from scratch=INFO REPORT==== 3-Jul-2017::10:52:10 ===
started TCP Listener on [::]:5672=INFO REPORT==== 3-Jul-2017::10:52:10 ===
Server startup complete; 0 plugins started.

这段日志包含了RabbitMQ的版本号、Erlang的版本号、RabbitMQ服务节点名称、cookie的hash值、RabbitMQ配置文件地址、内存限制、磁盘限制、默认账户guest的创建以及权限配置等等。如果是安装了rabbitmq_management插件的话,在启动rabbitmq的时候会多打印一些日志:

=INFO REPORT==== 3-Jul-2017::10:57:05 ===
Server startup complete; 6 plugins started.* rabbitmq_management* rabbitmq_management_agent* rabbitmq_web_dispatch* webmachine* mochiweb* amqp_client

当然还包括一些统计值信息的初始化日志,类似如下日志。

=INFO REPORT==== 3-Jul-2017::10:57:05 ===
Statistics garbage collector started for table {aggr_queue_stats_fine_stats,5000}.

与aggr_queue_stats_fine_stats日志一起的还有aggr_queue_stats_deliver_get,aggr_queue_stats_queue_msg_counts,channel_stats,connection_stats等等几十种。对于这些统计值,不同的版本可能略有差异,一般情况下对此无需过多探究。

如果你是使用rabbitmqctl stop_app命令关闭的RabbitMQ应用服务,那么你在使用rabbitmqctl start_app命令开启RabbitMQ应用服务的时候的启动日志和rabbitmq-server的启动日志相同。

关闭RabbitMQ服务

如果使用rabbitmqctl stop命令,会将Erlang虚拟机一同关闭,而rabbitmqctl stop_app只关闭RabbitMQ应用服务,在关闭的时候要多加注意之间的区别。下面先看一下rabbitmqctl stop_app所对应的服务日志:

=INFO REPORT==== 3-Jul-2017::10:54:01 ===
Stopping RabbitMQ=INFO REPORT==== 3-Jul-2017::10:54:01 ===
stopped TCP Listener on [::]:5672=INFO REPORT==== 3-Jul-2017::10:54:01 ===
Stopped RabbitMQ application

如果采用rabbitmqctl stop来进行关闭操作,则会多出下面的日志信息,即关闭Erlang虚拟机。

=INFO REPORT==== 3-Jul-2017::10:54:01 ===
Halting Erlang VM

建立集群

建立集群也是一种常用的操作。这里举例将节点rabbit@node2与rabbit@node1组成一个集群,有关如何建立RabbitMQ集群的细节可以参考RabbitMQ的安装及集群搭建方法。
首先在节点rabbit@node2中执行rabbitmq-server -detached开启Erlang VM以及RabbitMQ应用服务,之后再执行rabbitmqctl stop_app来关闭RabbitMQ应用服务,具体的日志可以参考前面的内容。之后需要重置节点rabbit@node2中的数据rabbitmqctl reset,相应的在节点rabbit@node2上的日志如下:

=INFO REPORT==== 3-Jul-2017::11:25:01 ===
Resetting Rabbit

在rabbit@node2节点上执行rabbitmqctl join_clcuster rabbit@node1将其加入到rabbit@node1中以组成一个集群,相应的在rabbit@node2节点中会打印日志:

=INFO REPORT==== 3-Jul-2017::11:30:46 ===
Clustering with [rabbit@node1] as disc node

与此同时在rabbit@node1中会有日志:

=INFO REPORT==== 3-Jul-2017::11:30:56 ===
node rabbit@node2 up

最后重启rabbit@node2节点,至于rabbit@node2中此时的日志可以参考前面的rabbitmq-server -detached或者rabbitmqctl start_app的启动日志。而此时在rabbit@node1节点中会有日志如下:

=INFO REPORT==== 3-Jul-2017::11:45:14 ===
rabbit on node rabbit@node2 up

如果此时在rabbit@node2节点上执行rabbitmqctl stop_app的动作,那么在rabbit@node1节点中会有如下信息:

=INFO REPORT==== 3-Jul-2017::11:54:01 ===
rabbit on node rabbit@node2 down=INFO REPORT==== 3-Jul-2017::11:54:01 ===
Keep rabbit@node2 listeners: the node is already back

通过上面的日志你可以看出某个RabbitMQ节点在某个时段的关闭启动的动作。可以通过尝试各种的操作以收集相应的服务日志,之后组成一个知识集,这个知识集不单指一个日志列表,可以通过后期的强化训练掌握其规律,让这个知识集了然于心。在真正遇到异常故障的时候可以通过查看服务日志来迅速的定位问题的根本,之后再采取相应的措施以解决问题。

这里博主有个心得,仅供参考,在执行任何RabbitMQ操作之前,都会打开一个新的窗口运行tail -f $RABBITMQ_HOME/var/log/rabbitmq/rabbit@$HOSTNAME.log -n 200命令来实时查看相应操作所对应的服务日志是什么,久而久之即可在脑海中建立一个相对完备的“知识集”。

欢迎跳转到本文的原文链接:https://honeypps.com/mq/how-to-review-rabbitmq-log/


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

学会查看 RabbitMQ日志相关推荐

  1. 9、学会查看GC日志

    要查看gc日志,那么首先得把gc日志进行输出,在JVM启动的时候添加参数: -XX:+PrintGCDetails 打印GC日志细节 -XX:+PrintGCTimeStamps 打印GC日志时间 - ...

  2. iis php日志查看工具,教你如何查看IIS日志

    网站的服务器会把访问信息.服务器的工作以及每一个文件的调用,记录在这个IIS日志里,所以学会查看IIS日志不仅可以相对准确的了解一些页面的访问,还可以得知搜索引擎蜘蛛的情况,目前虽然有很多的IIS日志 ...

  3. linux的错误日志在哪里,在linux中怎么查看错误日志

    cat或者 tail -f命令 日 志 文 件 说 明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与 ...

  4. #史上最详解# IIS服务器查看log日志

    windows IIS 目前有两个版本 IIS6.0,与IIS7.5,不同版本默认的日志位置与日志设置均有差别 https://blog.csdn.net/mystonelxj/article/det ...

  5. Docker部署SpringCloud ELK+RabbitMQ日志

    Docker部署SpringCloud ELK+RabbitMQ日志 Im_Coder 原文:https://www.jianshu.com/p/f773f23096a9 一.效果图 image.pn ...

  6. docker-compose logs 查看实时日志(日志最后的N行、某刻后日志) 实践笔记

    docker-compose logs 查看实时日志(日志最后的N行.某刻后日志) 实践笔记 1.参数说明 2.我以rabbitmq为例 2.1.全屏滚到底部结束 2.2.全屏滚到底部并继续持续输出日 ...

  7. mysql通过查看跟踪日志跟踪执行的sql语句

    在SQL SERVER下跟踪sql采用事件探查器,而在mysql下如何跟踪sql呢? 其实方法很简单,开启mysql的日志log功能,通过查看跟踪日志即可. 开启mysql的日志log方法: wind ...

  8. docker logs 查看实时日志

    docker logs -f -t --since="2017-05-31" --tail=10 edu_web_1 --since : 此参数指定了输出日志开始日期,即只输出指定 ...

  9. SQL Server查看错误日志存档编号及其详情

    --1.查看存档编号 EXEC xp_enumerrorlogs--2.查看错误日志 EXEC xp_readerrorlog 0,1,'Login','ds_user','',NULL,'DESC' ...

最新文章

  1. 三维重建 3D reconstruction 有哪些实用算法?
  2. C - 数据结构实验之查找三:树的种类统计(哈希树)
  3. 爸爸我爱您(之十二)
  4. python生成数据
  5. 使用OmniDB数据库管理工具,管理Oracle/MariaDB/PostgreSQL等关系型数据库
  6. ubuntu 设置 时区 更新时间
  7. java 去停用词_利用jieba分词并去除停用词
  8. JLINK 驱动安装和配置ADS使用,ADX调试
  9. 配置中文XeLaTex环境
  10. 【JavaWeb】网络留言板 可登录、注册、留言、修改留言、删除留言 附源码
  11. 杭州-千岛湖(入门篇骑行)
  12. MATLAB图片处理(上)
  13. win7计算机操作知识,WIN7系统电脑的常识操作
  14. JVM vs DVM
  15. selenium爬取亚马逊商品评论
  16. 机械键盘win键和Alt键颠倒,解决办法?
  17. 螺旋矩阵(Java)
  18. Highcharts使用小心得
  19. Codeforces 844A
  20. 线索二叉树(线索链表遍历,二叉树线索化)

热门文章

  1. MariaDB数据库日志
  2. 新手学习Linux——rsync+shell脚本完成自动化备份
  3. 即将到来的 Android N 将具备这些新特性
  4. php -- 取整数
  5. Jndroid——用应用开发的思路来开发 Web
  6. 本地计算机上的OracleOraDb11g_home2TNSListener服务启动又停止了。一些服务自动停止,如果他们没有什么可做的 ....
  7. virtual function的一些心得
  8. 技术、管理和技术管理
  9. 2021牛客多校2 - Stack(单调栈+拓扑)
  10. vsftp匿名访问目录_VSFTP本地用户目录跟匿名用户目录肿么修改?