.Net RabbitMQ實戰指南——服務日志


RabbitMQ的日出輸入方式有很多種:file、console 、syslog 、exchange。

在RabbitMQ中,日志級別有none(0)、critical(4)、error(8)、warning(16)、info(64)、debug(128)這5種,如果消息的級別高於日志的級別則不會被發送,比如warning級別的日志包含warning和error級別的日志,none表示不輸出日志。

日志文件

RabbitMQ的日志文件默認存放在/var/log/rabbitmq文件夾內。

通過cat命令查看日志文件內容

amq.rabbitmq.log

RabbitMQ默認會創建一些交換器,如amq.rabbitmq.log(topic類型)用來收集RabbitMQ日志,所有的服務日志都會發往這個交換器中。

在我安裝的3.8.2版本中並沒有默認創建log這個交換器,查找官方文檔在https://www.rabbitmq.com/event-exchange.html有提到,我們通過命令開啟插件:

rabbitmq-plugins enable rabbitmq_event_exchange  。

開啟插件會創建一個類似amq.rabbitmq.log交換器的amq.rabbitmq.event交換器,通過amq.rabbitmq.event交換器可以像應用程序公開交換器、隊列等創建和刪除事件。由此猜想出amq.rabbitmq.log還是支持的只不過需要我們通過一些設置開啟。https://www.rabbitmq.com/logging.html文檔中有提到log的一些設置,但是卻沒有log.exchange相關的介紹,但是在rabbitmq.conf文件中發現有log.exchange對應的配置。

通過當前節點的詳情查看,Config file 對應的部分為空

說明缺少配置文件不存在(/etc/rabbitmq/rabbitmq.conf),需要手動創建rabbitmq.config。文件內容復制:https://github.com/rabbitmq/rabbitmq-server/blob/v3.8.x/deps/rabbit/docs/rabbitmq.conf.example

取消注釋,重啟rabbitmq(service rabbitmq-server restart)

通過web管理插件看到amq.rabbitmq.log交換器已經成功顯示

創建3個日志隊列queue.info、queue.warning和queue.error,分別用info、warning和error這3個路由鍵來綁定amq.rabbitmq.log。如果要使用一個隊列來收集所有級別的日志,可以使用“#”這個路由鍵。

  

對RabbitMQ進行一系列操作,看到隊列中已經接收到日志數據

代碼消費info消息:

#region   日志

                using (var channel = connection.CreateModel())
                {
                    var consumer = new RabbitMQConsumer(channel);
                    consumer.Received += (ch, ea) =>
                    {
                        var body = ea.Body.ToArray();
                        Console.WriteLine($"Received:{Encoding.UTF8.GetString(body)}");
                        channel.BasicAck(ea.DeliveryTag, false);
                    };
                    var consumerTag = channel.BasicConsume("queue.info", false,"Info", consumer);
                    Console.WriteLine(consumerTag);
                    Console.ReadKey();
                }
                        
                #endregion

運行效果:

EFK(Elasticsearch+Filebeat+Kibana)收集日志

安裝

通過Docker安裝Elasticsearch+Filebeat+Kibana,拉取慢的可以通過配置國內的鏡像加速器

docker pull elasticsearch:7.13.2
docker pull store/elastic/filebeat:7.13.2
docker pull kibana:7.13.2

啟動 

運行如下命令啟動es,以單節點的方式啟動,指定堆內存為512m

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e ES_JAVA_POTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" elasticsearch:7.13.2

瀏覽器打開網址http://localhost:9200/,瀏覽器返回如下內容說明安裝並啟動成功

啟動kibana,--link 選項,將es和kibana兩個容器關聯共享一個網絡。

docker run -d --link elasticsearch -p 5601:5601 --name kibana kibana:7.13.2

瀏覽器打開網址http://localhost:5601/,成功打開說明安裝並啟動成功。

啟動filebeat。 

docker run -d --link elasticsearch --link kibana  --name filebeat a0f498c7aa02 setup -E setup.kibana.host=http://localhost:5601 \ -E output.elasticsearch.hosts=["localhost:9200"]

 

docker啟動kibana和filebeat是通過--link 指定容器之間網絡互聯,已經不推薦,應該使用 network。

創建專用網絡:docker network create logging

啟動命令加上網絡配置:--net logging

配置

通過如下命令root用戶進入docker

docker exec -it --user root filebeat /bin/bash

修改filebeat.yml文件:

並通過如下命令開啟rabbitmq 相關模塊

./filebeat modules enable rabbitmq

修改modules.d/rabbitmq.yml 文件,取消var.paths的注釋,修改路徑為rabbitmq的日志路徑。

 docker客戶端進入cli會因為權限問題無法修改filebeat.yml(只讀)文件,所以改名命令方式進入docker的cli下修改文件

在kibana查看已經有filebeat對應索引生成。

正常情況下應該會有rabbitmq的日志數據。因為我RabbitMQ安裝在WSL中,filebeat安裝在本機Docker,不能正確設置var.paths的值,所以沒有log數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM