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. 变量覆盖-高级篇(动态覆盖,extract综合)

    0x00 原理   变量覆盖漏洞可以让用户定义的变量值覆盖原有程序变量,可控制原程序逻辑. 0x01 代码 <?php highlight_file('index.php'); function ...

  2. Linux 实验楼

    网络上的免费在线 Linux 实验系统 Wu Zhangjin 创作于 2014/01/12 打赏 by falcon of TinyLab.org 2014/01/12 这里收集各类可以直接在线访问 ...

  3. 【转载】CentOS 7自动以root身份登录gnome桌面 操作系统开机后自动登录到桌面 跳过GDM

    CentOS 7自动以root身份登录gnome桌面 ################### #cd /etc/gdm ]# cat custom.conf# GDM configuration st ...

  4. ip_conntrack or nf_conntrack : table full, dropping packet

    nf_conntrack: table full, dropping packet ip_conntrack or nf_conntrack : table full, dropping packet ...

  5. Ubuntu 20.04 版本安装

    Ubuntu 20.04 版本安装 安装步骤 首先创建好Ubuntu 20.04虚拟机 等待系统检查完整性 选择语言 选择不更新,回车确定 键盘语言默认即可 网卡IP配置 设置代理服务器 设置源 自定 ...

  6. 本文介绍使用windows系统自带的远程桌面mstsc连接Centos 7.x远程桌面的基本方法。

    本文介绍使用windows系统自带的远程桌面mstsc连接Centos 7.x远程桌面的基本方法. 一.前言 我希望用windows远程访问centos图形界面.xmanager连接centos远程桌 ...

  7. 生成多个ssh密钥-(转自 破男孩)

    如果你已经有了一套名为 id_rsa 的公秘钥,将要生成另外一个公钥,比如 aysee ,你也可以使用任何你喜欢的名字. 步骤如下: 1.生成一个新的自定义名称的公钥: 1 ssh-keygen -t ...

  8. sizeof()用法汇总-(转自风雷)

    sizeof()功能:计算数据空间的字节数 1.与strlen()比较       strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素.     ...

  9. JavaScript正则表达式(深度)(Day_14)

    忘不掉的是回忆,继续的是生活,错过的,就当是路过. 简介 正则表达式是用于匹配字符串中字符组合的模式.在 JavaScript中,正则表达式也是对象. 这些模式被用于 RegExp 的 exec 和  ...

  10. 计划任务 at & crond tbc

    一次性任务 at 工具 由包 at 提供 依赖与atd服务,需要启动才能实现at任务 at队列存放在/var/spool/at目录中 执行任务时PATH变量的值和当前定义任务的用户身份一致 作业执行命 ...