学会查看 RabbitMQ日志
如果在使用RabbitMQ的過程中出現了異常情況,通過翻閱RabbitMQ的服務日志可以讓你在處理異常的過程中事半功倍。RabbitMQ日志中會有明確的事件日期、事件內容以及事件等級等。RabbitMQ的日志默認存放在$RABBITMQ_HOME/var/log/rabbitmq目錄下。本問主要從RabbitMQ服務開啟、RabbitMQ服務關閉以及RabbitMQ集群搭建的角度來舉例說明RabbitMQ的日志的一些查看思路。
各位讀者實際使用的RabbitMQ版本各有差異,這里我們挑選一個偏舊版本(3.6.2)來統籌說明,以期不會有太大的偏差。所幸各個版本的日志大致相同,也會有略微變化。讀者需要培養(yǎng)一種使用服務日志來解決問題的思路,本文只做拋磚引玉之用。
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰(zhàn)指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
歡迎跳轉到本文的原文鏈接:https://honeypps.com/mq/how-to-review-rabbitmq-log/
啟動RabbitMQ服務
啟動RabbitMQ服務可以使用rabbitmq-server -detached命令,這個命令會順帶啟動Erlang虛擬機和RabbitMQ應用服務,而rabbitmqctl start_app用來啟動RabbitMQ應用服務。注意RabbitMQ應用服務啟動的前提是Erlang虛擬機是運轉正常的。首先這里來看下在執(zhí)行完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服務節(jié)點名稱、cookie的hash值、RabbitMQ配置文件地址、內存限制、磁盤限制、默認賬戶guest的創(chuàng)建以及權限配置等等。如果是安裝了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應用服務,在關閉的時候要多加注意之間的區(qū)別。下面先看一下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建立集群
建立集群也是一種常用的操作。這里舉例將節(jié)點rabbit@node2與rabbit@node1組成一個集群,有關如何建立RabbitMQ集群的細節(jié)可以參考RabbitMQ的安裝及集群搭建方法。
首先在節(jié)點rabbit@node2中執(zhí)行rabbitmq-server -detached開啟Erlang VM以及RabbitMQ應用服務,之后再執(zhí)行rabbitmqctl stop_app來關閉RabbitMQ應用服務,具體的日志可以參考前面的內容。之后需要重置節(jié)點rabbit@node2中的數據rabbitmqctl reset,相應的在節(jié)點rabbit@node2上的日志如下:
在rabbit@node2節(jié)點上執(zhí)行rabbitmqctl join_clcuster rabbit@node1將其加入到rabbit@node1中以組成一個集群,相應的在rabbit@node2節(jié)點中會打印日志:
=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節(jié)點,至于rabbit@node2中此時的日志可以參考前面的rabbitmq-server -detached或者rabbitmqctl start_app的啟動日志。而此時在rabbit@node1節(jié)點中會有日志如下:
=INFO REPORT==== 3-Jul-2017::11:45:14 === rabbit on node rabbit@node2 up如果此時在rabbit@node2節(jié)點上執(zhí)行rabbitmqctl stop_app的動作,那么在rabbit@node1節(jié)點中會有如下信息:
=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節(jié)點在某個時段的關閉啟動的動作。可以通過嘗試各種的操作以收集相應的服務日志,之后組成一個知識集,這個知識集不單指一個日志列表,可以通過后期的強化訓練掌握其規(guī)律,讓這個知識集了然于心。在真正遇到異常故障的時候可以通過查看服務日志來迅速的定位問題的根本,之后再采取相應的措施以解決問題。
這里博主有個心得,僅供參考,在執(zhí)行任何RabbitMQ操作之前,都會打開一個新的窗口運行tail -f $RABBITMQ_HOME/var/log/rabbitmq/rabbit@$HOSTNAME.log -n 200命令來實時查看相應操作所對應的服務日志是什么,久而久之即可在腦海中建立一個相對完備的“知識集”。
歡迎跳轉到本文的原文鏈接:https://honeypps.com/mq/how-to-review-rabbitmq-log/
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰(zhàn)指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
總結
以上是生活随笔為你收集整理的学会查看 RabbitMQ日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RabbitMQ Network Par
- 下一篇: 模拟RabbitMQ网络分区