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数据。

.Net RabbitMQ实战指南——服务日志的更多相关文章

  1. 【RabbitMQ 实战指南】一 RabbitMQ 开发

    1.RabbitMQ 安装 RabbitMQ 的安装可以参考官方文档:https://www.rabbitmq.com/download.html 2.管理页面 rabbitmq-management ...

  2. 【RabbitMQ 实战指南】一 延迟队列

    1.什么是延迟队列 延迟队列中存储延迟消息,延迟消息是指当消息被发送到队列中不会立即消费,而是等待一段时间后再消费该消息. 延迟队列很多应用场景,一个典型的应用场景是订单未支付超时取消,用户下单之后3 ...

  3. 【RabbitMQ 实战指南】一 RabbitMQ入门

    1.消息中间件 1.1.什么是消息中间件 消息中间件(Message Queue Middleware,简称 MQ)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通道来进行分布式系 ...

  4. .Net RabbitMQ实战指南——客户端开发

    开发中关键的Class和Interface有Channel.Connection.ConnectionFactory.Consumer等,与RabbitMQ相关的开发工作,基本上是围绕Connecti ...

  5. .Net RabbitMQ实战指南——RabbitMQ相关概念介绍

    什么是消息中间件 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串.JSON等,也可以很复杂,比如内嵌对象. 消息队列中间件(Message Queue Middl ...

  6. .Net RabbitMQ实战指南——进阶(二)

    持久化 持久化可以提高RabbitMQ的可靠性,防止异常情况下的数据丢失.RabbitMQ的持久化分为三个部分:交换器的持久化.队列的持久化和消息的持久化. 交换器的持久化通过声明队列时将durabl ...

  7. 【RabbitMQ 实战指南】一 死信队列

    1.死信队列 DLX,全称为 Dead-Letter-Exchange,可以称之为死信交换器.当消息在一个队列中变成死信(dead message)之后,它能被发送到另一个交换器中,这个交换器就是DL ...

  8. 【RabbitMQ 实战指南】一 过期时间TTL

    RabbitMQ 可以对消息和队列设置过期时间(TTL) 1.设置消息的TTL 目前有两种方式可以设置消息的TTL 第一种方式是通过队列属性设置,队列中所有消息都有相同的过期时间 第二种方式是对消息本 ...

  9. .Net RabbitMQ实战指南——进阶(一)

    备份交换器 备份交换器,英文名称为Alternate Exchange,简称AE.通过在声明交换器(调用channel.ExchangeDeclare方法)时添加alternate-exchange参 ...

随机推荐

  1. MySQL8 配置远程连接

    引言 MySQL8 默认安装后只有本机能访问,如果需要远程连接 MySQL 将无法访问 查看 root 用户权限 进入 mysql 表 select user,host,plugin from use ...

  2. shell基础之后台运行脚本

    使shell脚本后台执行,基本的方法有两种,第一种为在脚本后面追加&符号,第二种为在脚本前面使用nohup命令,结尾再追加&符号 一.后台运行脚本1 1.执行脚本test.sh:./t ...

  3. fragment之间相互传数据、共享数据

    在 Fragment 之间共享数据 Activity 中的两个或更多 Fragment 需要相互通信是一种很常见的现象.想象一下拆分视图 (master-detail) Fragment 的常见情况, ...

  4. C# Asp.Net 实现PPT/PDF转成图片(不依赖office)

    最近公司有个需求,将PPT课件转成图片列表,然后在前端展示成轮播图,于是一开始通过Microsoft.Office.Interop.PowerPoint包实现了这个需求具体代码如下: /// < ...

  5. GO学习-(35) Go实现日志收集系统4

    Go实现日志收集系统4   到这一步,我的收集系统就已经完成很大一部分工作,我们重新看一下我们之前画的图: 我们已经完成前面的部分,剩下是要完成后半部分,将kafka中的数据扔到ElasticSear ...

  6. 记录: 解决 pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)

    - Mac 不知道怎么操作的 rm 了 usr/local/ 里面的某些文件, 导致一直出现 pycurl: libcurl link-time ssl backend (openssl) is di ...

  7. (最全)No dashboards are active for the current data set. 解决tensorboard无法启动和显示问题

    按照网上的教程,我无法正常启动tensorboard,全过程没有报错,但是打开tensorboard显示No dashboards are active for the current data se ...

  8. Mybatis基础使用方法

    1.首先在数据库中建立一张表 create table login( name varchar(20) not null, username varchar(20) not null, passwor ...

  9. SOLO: 按位置分割对象

    SOLO: 按位置分割对象 SOLO: Segmenting Objectsby Locations 论文链接: https://arxiv.org/pdf/1912.04488.pdf 代码链接: ...

  10. Python小白的数学建模课-06 固定费用问题

    Python 实例介绍固定费用问题的建模与求解. 学习 PuLP工具包中处理复杂问题的快捷使用方式. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛达人. 前文讲到几种典型 ...