.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表示不输出日志。
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的日志路径。
在kibana查看已经有filebeat对应索引生成。
正常情况下应该会有rabbitmq的日志数据。因为我RabbitMQ安装在WSL中,filebeat安装在本机Docker,不能正确设置var.paths的值,所以没有log数据。
转自:Stacking
链接:cnblogs.com/Stacking/p/net-core-rabbitmq-log.html
- EOF -
看完本文有收获?请转发分享给更多人
推荐关注「DotNet」,提升.Net技能
点赞和在看就是最大的支持❤️