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. Linux VMware Tools详解

    VMware Tools描述 VMware Tools 中包含一系列服务和模块,可在 VMware 产品中实现多种功能,从而使用户能够更好地管理客户机操作系统,以及与客户机系统进行无缝交互. 在Lin ...

  2. [刷题] PTA 03-树1 树的同构

    程序: 1 #include <stdio.h> 2 #define MaxTree 10 3 #define ElementType char 4 #define Tree int 5 ...

  3. XRDP freerdp

    服务器上 freerdp 桌面上有XRDP

  4. Docker——基本使用及常用命令

    Docker 是一个开源的应用容器引擎,而一个容器其实是一个虚拟化的独立的环境,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化. ...

  5. robot framework列表

    一.列表(list) python中创建列表:a=[1,2,3],b=[],c=[a,b,c,[1,2,3]],d=[a,b,c,1,2,3] robotframework中创建列表(list):通过 ...

  6. Hive 配置项详解

    hive.ddl.output.format: hive的ddl语句的输出格式, 默认是text,纯文本,还有json格式,这个是0.90以后才出的新配置: hive.exec.script.wrap ...

  7. Linux_控制作业(管理)

    一.作业控制 1.作业控制与回话 1️⃣:作业控制是shell的一种功能,它允许单个shell实例运行和管理多个命令 2️⃣:作业与在sehll提示符中输入的每个管道相关联.该管道中的所有进程均是作业 ...

  8. visual studio code 快捷键-(转自 浅笑千寻)

    Visual Studio Code之常备快捷键 官方快捷键大全:https://code.visualstudio.com/docs/customization/keybindings Visual ...

  9. gpcj-07.为什么是连锁零售类公司

    1.量化分析的真面目 本课的目的: ·理解零售类公司价值分析的逻辑·学会量化分析公司的思路和原理前言的前沿 和大部分投资者不同,我们的投资核心之一,就是从下而上的分析.宏观经济对我们公司分析影响极少. ...

  10. 使用 .NET 升级助手将.NET Framework应用迁移到.NET 5

    从.NET Framework 迁移到.NET 5 犹如搬家,我们都知道搬家是很痛苦的,我们请求搬家公司来减轻我们的压力,.NET 升级助手 的作用就类似我们聘请的搬家公司,帮助我们处理繁重乏味的迁移 ...