日志记录
概述
日志文件是系统可观察性的一个非常重要的方面,就像监控一样。
RabbitMQ 在节点启动早期就开始记录日志。在节点启动期间或之后,将记录许多关于节点状态和配置的重要信息。
开发人员和运维人员在排查问题或评估系统状态时,应检查日志。
RabbitMQ 在日志记录方面支持多种功能。
本指南涵盖的主题包括:
- RabbitMQ 节点会记录什么,不会记录什么
- 支持的日志输出:文件和标准流(控制台)
- 日志文件位置
- 支持的日志级别
- 如何激活调试日志
- 如何在不访问日志文件的情况下跟踪运行中节点的日志
- 查看内部事件
- 连接生命周期事件记录
- JSON 格式日志
- 日志类别
- 高级日志格式
- 如何在基于 systemd 的 Linux 系统上检查服务日志
- 日志轮转
- 记录到 Syslog
- 记录到系统主题交换,
amq.rabbitmq.log
等等。
什么会被记录,什么不会被记录?
RabbitMQ 节点会记录各种各样的事件,实际上,数量之多无法一一列举。然而,根据设计,有几类事件不会被记录。在大多数情况下,这些事件与单个消息相关,其高吞吐量:每秒数十万甚至数百万条消息,对于流和超流更是如此。
- 消息路由
- 消息传递给消费者
- 消费者对消息的确认
- 无法路由的消息,包括被退回和丢弃的消息
- 消费者注册和取消
与这些事件相关的大多数错误,例如重复确认传递,都会被记录。
为了分析消息路由、入口(发布)和出口(传递给消费者)的速率、消费者事件和无法路由的消息,请使用指标、查看内部事件、采用相关的客户端库功能,并捕获并检查流量。
日志输出
RabbitMQ 节点可以输出到多个目的地。对于 RabbitMQ 安装,记录到文件是最常见的选项之一。
另一个流行的选项是记录到标准输出和错误流。Syslog 也是开箱即用的另一个支持的选项。
不同的输出可以有不同的日志级别。例如,控制台输出可以记录所有消息,包括调试信息,而文件输出只能记录错误及更高级别的消息。
默认日志输出和行为
如果未明确配置任何输出,节点默认会记录到文件。如果配置了某些输出,则会使用它们。
如果需要将日志记录到文件以及另一个输出,则必须在其他所需的日志输出旁边明确列出文件输出,例如标准流输出。
日志文件位置
配置日志文件位置有两种方法。一种是配置文件。推荐使用此选项。另一种是 RABBITMQ_LOGS 环境变量。这在开发环境中可能很有用。
RABBITMQ_LOGS 不能与配置文件设置结合使用。当设置了 RABBITMQ_LOGS 时,rabbitmq.conf 中与日志相关的设置将被有效忽略。
请参阅文件和目录位置指南,查找各平台默认日志文件位置。
日志文件位置可以在RabbitMQ 管理 UI 的节点页面上找到,也可以使用rabbitmq-diagnostics 找到。
- bash
- PowerShell
- cmd
rabbitmq-diagnostics -q log_location
rabbitmq-diagnostics.bat -q log_location
rabbitmq-diagnostics.bat -q log_location
RABBITMQ_LOGS 变量的值可以是文件路径,也可以是连字符 (-)。将值设置为连字符,如下所示:
# Instructs the node to log to standard streams.
# IMPORTANT: the environment variable takes precedence over the configuration file.
# When it is set, all logging-related rabbitmq.conf settings will be
# effectively ignored.
RABBITMQ_LOGS=-
节点会将所有日志消息发送到标准 I/O 流,即标准输出。
环境变量的优先级高于配置文件。当它被设置时,所有与日志相关的 rabbitmq.conf 设置将被有效忽略。
覆盖日志文件位置的推荐方法是通过 rabbitmq.conf。
日志如何配置
以下几个部分介绍了与日志记录相关的各种配置设置。它们都使用 rabbitmq.conf,即现代配置文件格式。
有关如何配置 RabbitMQ 的一般概述,请参阅配置指南。
记录到文件
记录到文件是 RabbitMQ 安装中最常见的选项之一。在现代版本中,RabbitMQ 节点仅在明确使用以下配置键进行配置时才记录到文件:
log.file:日志文件路径,或设置为false以禁用文件输出。默认值来自RABBITMQ_LOGS环境变量或配置文件。log.file.level:文件输出的日志级别。默认级别是info。log.file.formatter:控制日志条目格式,文本行或 JSON。log.file.rotation.date、log.file.rotation.size、log.file.rotation.count用于日志文件轮转设置。log.file.formatter.time_format:控制时间戳格式。
以下示例覆盖了日志文件名。
log.file = rabbit.log
以下示例覆盖了日志文件位置。
log.file = /opt/custom/var/log/rabbit.log
以下示例指示 RabbitMQ 以 debug 级别记录到文件。
log.file.level = debug
有关支持的日志级别列表,请参阅日志级别。
可以使用以下命令禁用文件日志记录:
log.file = false
以 JSON 格式记录到文件。
log.file.formatter = json
默认情况下,RabbitMQ 将使用 RFC 3339 时间戳格式。可以切换到基于 UNIX epoch 的格式。
log.file = true
log.file.level = info
# use microseconds since UNIX epoch for timestamp format
log.file.formatter.time_format = epoch_usecs
本指南的其余部分将描述更多选项,包括更高级的选项。
日志轮换
在记录到文件时,推荐的轮转选项是 logrotate。
RabbitMQ 节点始终会追加到日志文件中,因此会保留完整的日志历史记录。默认情况下不执行日志文件轮转。Debian 和RPM 软件包将在软件包安装后通过 logrotate 设置日志轮转。
log.file.rotation.date、log.file.rotation.size、log.file.rotation.count 设置控制文件输出的日志文件轮转。
使用 Logrotate 进行轮转
在 Linux、BSD 和其他类 UNIX 系统上,logrotate 是一个广泛使用的日志文件轮转工具。它非常成熟,并支持许多选项。
RabbitMQ 的Debian 和RPM 软件包将设置 logrotate 每周对位于默认 /var/log/rabbitmq 目录中的文件运行。轮转配置可以在 /etc/logrotate.d/rabbitmq-server 中找到。
内置的周期性轮转
log.file.rotation.date 不能与 log.file.rotation.size 结合使用,这两个选项是互斥的。
使用 log.file.rotation.date 设置最少的周期性轮转。
# rotate every night at midnight
log.file.rotation.date = $D0
# keep up to 5 archived log files in addition to the current one
log.file.rotation.count = 5
# archived log files will be compressed
log.file.rotation.compress = true
# rotate every day at 23:00 (11:00 p.m.)
log.file.rotation.date = $D23
内置的基于文件大小的轮转
log.file.rotation.size 不能与 log.file.rotation.date 结合使用,这两个选项是互斥的。
log.file.rotation.size 控制基于当前日志文件大小的轮转。
# rotate when the file reaches 10 MiB
log.file.rotation.size = 10485760
# keep up to 5 archived log files in addition to the current one
log.file.rotation.count = 5
# archived log files will be compressed
log.file.rotation.compress = true
记录到控制台(标准输出)
记录到标准流(控制台)是 RabbitMQ 安装的另一个流行选项,特别是在 RabbitMQ 节点部署在容器中的情况下。RabbitMQ 节点仅在明确配置为这样做时才记录到标准流。
以下是控制控制台(标准输出)日志记录的主要设置:
log.console(布尔值):设置为true以激活控制台输出。默认值为 `false`。log.console.level:控制台输出的日志级别。默认级别是info。log.console.formatter:控制日志条目格式,文本行或 JSON。log.console.formatter.time_format:控制时间戳格式。
要激活控制台日志记录,请使用以下配置片段:
log.console = true
以下示例禁用控制台日志记录:
log.console = false
以下示例指示 RabbitMQ 在记录到控制台时使用 debug 日志级别:
log.console.level = debug
有关支持的日志级别列表,请参阅日志级别。
以 JSON 格式记录到控制台。
log.console.formatter = json
当激活控制台输出时,文件输出默认也会被激活。要禁用文件输出,请将 log.file 设置为 false。
log.console = true
log.console.level = info
log.file = false
默认情况下,RabbitMQ 将使用 RFC 3339 时间戳格式。可以切换到基于 UNIX epoch 的格式。
log.console = true
log.console.level = info
log.file = false
# use microseconds since UNIX epoch for timestamp format
log.console.formatter.time_format = epoch_usecs
请注意,RABBITMQ_LOGS=- 将禁用文件输出,即使 log.file 已配置。
记录到 Syslog
RabbitMQ 日志可以通过 TCP 或 UDP 转发到 Syslog 服务器。默认使用 UDP,并且需要 Syslog 服务配置。也支持 TLS。
必须明确配置 Syslog 输出。
log.syslog = true
Syslog 端点配置
默认情况下,Syslog 记录器将使用RFC 3164 协议将日志消息发送到 UDP 端口 514。也可以使用RFC 5424 协议。
要使用 UDP,Syslog 服务必须配置 UDP 输入。
UDP 和 TCP 传输可以与 RFC 3164 和 RFC 5424 协议一起使用。TLS 支持需要 RFC 5424 协议。
以下示例使用 TCP 和 RFC 5424 协议。
log.syslog = true
log.syslog.transport = tcp
log.syslog.protocol = rfc5424
要使用 TLS,必须提供一套标准的TLS 选项。
log.syslog = true
log.syslog.transport = tls
log.syslog.protocol = rfc5424
log.syslog.ssl_options.cacertfile = /path/to/ca_certificate.pem
log.syslog.ssl_options.certfile = /path/to/client_certificate.pem
log.syslog.ssl_options.keyfile = /path/to/client_key.pem
Syslog 服务的 IP 地址和端口可以自定义。
log.syslog = true
log.syslog.ip = 10.10.10.10
log.syslog.port = 1514
如果使用主机名而不是 IP 地址。
log.syslog = true
log.syslog.host = my.syslog-server.local
log.syslog.port = 1514
Syslog 元数据标识和设施值也可以配置。默认情况下,标识将设置为节点名称的名称部分(例如,rabbitmq@hostname 中的 rabbitmq),设施将设置为 daemon。
要设置日志消息的标识和设施:
log.syslog = true
log.syslog.identity = my_rabbitmq
log.syslog.facility = user
以 JSON 格式记录到 Syslog。
log.syslog = true
log.syslog.formatter = json
不太常用的Syslog 客户端选项可以使用高级配置文件进行配置。
JSON 日志
RabbitMQ 节点可以将日志消息格式化为 JSON,这对于其他软件解析可能很方便。
以 JSON 格式记录到文件。
log.file.level = info
log.file.formatter = json
以 JSON 格式记录到控制台。
log.console = true
log.console.level = info
log.console.formatter = json
log.file = false
以 JSON 格式记录到 Syslog。
log.syslog = true
log.syslog.formatter = json
请注意,JSON 对象字段映射可以自定义,以匹配日志收集工具预期的特定基于 JSON 的日志格式。
日志消息类别
RabbitMQ 有几个消息类别,可以使用不同的级别记录,或者记录到不同的文件。这些类别是:
connection:AMQP 0-9-1、AMQP 1.0、MQTT 和 STOMP 的连接生命周期事件。channel:通道日志。主要是 AMQP 0-9-1 通道的错误和警告。queue:队列日志。主要是调试消息。federation:联邦插件日志。upgrade:详细的升级日志。这些日志量可能很大。default:所有其他日志条目。您无法为此类别覆盖文件位置。
可以使用 log.<category>.level 和 log.<category>.file 配置变量为每个消息类别配置不同的日志级别或文件位置。
默认情况下,每个类别都不会按级别过滤。如果已配置输出以记录 debug 消息,则所有类别的调试消息都将打印出来。配置类别的日志级别以覆盖。
例如,在文件输出中给定调试级别,以下命令将禁用连接事件的调试日志记录:
log.file.level = debug
log.connection.level = info
要将所有联邦日志重定向到 rabbit_federation.log 文件,请使用:
log.federation.file = rabbit_federation.log
要禁用日志类型,可以使用 none 日志级别。例如,要禁用升级日志:
log.upgrade.level = none
日志级别
日志级别是过滤和调整日志记录的另一种方式。日志级别有严格的顺序。每个日志消息都有一个严重性,从 debug(最低严重性)到 critical(最高严重性)。
日志的详细程度可以通过为类别和输出设置日志级别来控制。更详细的日志级别将包含更多的日志消息,从 debug(最详细)到 none(最不详细)。
RabbitMQ 使用以下日志级别:
| 日志级别 | 详细程度 | 严重性 |
|---|---|---|
debug | 最详细 | 最低严重性 |
info | ||
warning | ||
error | ||
critical | 最高严重性 | |
none | 最不详细 | 不适用 |
默认日志级别是 info。
如果一个日志消息的严重性低于类别级别,该消息将被丢弃,不会发送到任何输出。
如果未配置类别级别,其消息将始终发送到所有输出。
要使 default 类别仅记录错误或更高级别的消息,请使用:
log.default.level = error
none 级别表示不记录日志。
每个输出都可以使用自己的日志级别。如果消息的严重性低于输出级别,则该消息将不会被记录。
例如,如果未配置任何输出记录 debug 消息,即使类别级别设置为 debug,调试消息也不会被记录。
另一方面,如果一个输出被配置为记录 debug 消息,它将从所有类别获取这些消息,除非某个类别配置了不那么详细的级别。
更改日志级别
有两种方法可以更改有效的日志级别:
- 通过配置文件:这种方法更灵活,但需要节点在更改之间重新启动。
- 使用CLI 工具,
rabbitmqctl set_log_level <level>:更改是临时的(不会在节点重启后保留),但可以用于在运行时激活和停用,例如,一段时间的调试日志。
要在运行中的节点上将日志级别设置为 debug:
rabbitmqctl -n rabbit@target-host set_log_level debug
将级别设置为 info。
rabbitmqctl -n rabbit@target-host set_log_level info
使用 CLI 工具跟踪日志
现代版本支持使用CLI 工具跟踪节点的日志。当日志文件位置未知或不易访问但允许 CLI 工具连接时,这非常方便。
要跟踪节点 rabbitmq@target-host 的最后三百行,请使用 rabbitmq-diagnostics log_tail。
# This is semantically equivalent to using `tail -n 300 /path/to/rabbit@hostname.log`.
# Use -n to specify target node, -N is to specify the number of lines.
rabbitmq-diagnostics -n rabbit@target-host log_tail -N 300
这将加载并打印日志文件的最后几行。如果仅激活了控制台日志记录,此命令将失败并出现“文件未找到”(enoent)错误。
要像 tail -f 或控制台日志记录一样,连续检查追加到文件中的日志消息流,请使用 rabbitmq-diagnostics log_tail_stream。
# This is semantically equivalent to using `tail -f /path/to/rabbit@hostname.log`.
# Use Control-C to stop the stream.
rabbitmq-diagnostics -n rabbit@target-host log_tail_stream
这将连续跟踪并流式传输添加到日志文件的行。如果仅激活了控制台日志记录,此命令将失败并出现“文件未找到”(enoent)错误。
rabbitmq-diagnostics log_tail_stream 命令只能用于正在运行的 RabbitMQ 节点,如果节点未运行或其上的 RabbitMQ 应用程序已使用 rabbitmqctl stop_app 停止,该命令将失败。
激活调试日志
启用调试日志记录时,节点将记录大量对故障排除有用的信息。此日志严重性适用于故障排除,例如节点发现活动。
例如,将调试消息记录到文件:
log.file.level = debug
将日志消息打印到标准 I/O 流:
log.console = true
log.console.level = debug
在运行时切换到调试日志记录:
rabbitmqctl -n rabbit@target-host set_log_level debug
将级别设置回 info:
rabbitmqctl -n rabbit@target-host set_log_level info
可以为某些类别停用调试日志记录。
log.file.level = debug
log.connection.level = info
log.channel.level = info
高级日志格式
本节介绍与高级日志格式相关的特性。大多数环境不需要这些设置,但可用于将 RabbitMQ 日志记录调整为特定格式。
本节中的大多数示例都使用以下格式:
log.file.formatter.level_format = lc4
但是,键也可以是以下之一:
log.file.formatter.level_formatlog.console.formatter.level_formatlog.exchange.formatter.level_format
换句话说,本节中记录的许多设置并非特定于特定的日志输出,无论是 file、console 还是 exchange。
时间格式
时间戳格式可以设置为以下格式之一:
rfc3339_space:带有空格的 RFC 3339 格式,这是默认格式。rfc3339_T:同上,但带有制表符。epoch_usecs:时间戳(自 UNIX 纪元以来的时间)以微秒为单位。epoch_secs:时间戳(自 UNIX 纪元以来的时间)以秒为单位。
# this is the default format
log.file.formatter.time_format = rfc3339_space
例如,以下格式:
log.file.formatter.time_format = epoch_usecs
将产生如下所示的日志消息:
1728025620684139 [info] <0.872.0> started TCP listener on [::]:5672
1728025620687050 [info] <0.892.0> started TLS (SSL) listener on [::]:5671
日志级别格式
日志级别可以以不同的格式显示。
# full value, lower case is the default format
log.file.formatter.level_format = lc
# use the four character, upper case format
log.file.formatter.level_format = uc4
以下值是有效的:
lc:完整值,小写(默认),例如warning或info。uc:完整值,大写,例如WARNING或INFO。lc3:三个字符,小写,例如inf或dbg。uc3:三个字符,大写,例如INF或WRN。lc4:四个字符,小写,例如dbug或warn。uc4:四个字符,大写,例如DBUG或WARN。
日志消息格式
如果覆盖日志格式是日志收集工具的硬性要求,则应仅作为最后的手段使用此设置。
除了格式化单个日志消息组件(事件时间、日志级别、消息等)之外,还可以使用 `` 配置设置来更改整个日志行的格式。
该设置必须设置为一个使用以下 $variables 的消息模式:
$time$level- Erlang 进程
$pid - 日志
$msg
默认格式如下所示:
# '$time [$level] $pid $msg' is the default format
log.console.formatter.plaintext.format = $time [$level] $pid $msg
以下自定义格式:
# '$time [$level] $pid $msg' is the default format
log.console.formatter.plaintext.format = $level $time $msg
将产生如下所示的日志消息:
info 2024-10-04 03:23:52.968389-04:00 connection 127.0.0.1:57181 -> 127.0.0.1:5672: user 'guest' authenticated and granted access to vhost '/'
debug 2024-10-04 03:24:03.338466-04:00 Will reconcile virtual host processes on all cluster members...
debug 2024-10-04 03:24:03.338587-04:00 Will make sure that processes of 9 virtual hosts are running on all reachable cluster nodes
请注意,Erlang 进程 PID 已被排除。此信息对于根本原因分析(RCA)至关重要,因此强烈推荐默认格式。
JSON 字段映射
JSON 日志记录可以通过以下方式进行自定义:
- 可以通过使用
{standard key}:{renamed key}表达式来重命名单个键。 - 可以通过使用
{standard key:-}表达式来删除单个键。 - 可以通过使用
*:-表达式删除除明确列出的键之外的所有键。
然后,log.file.formatter.json.field_map 键必须设置为一个包含上述多个表达式的字符串值。
在演示示例之前,这是带有默认映射的消息:
{
"time":"2024-10-04 03:38:29.709578-04:00",
"level":"info",
"msg":"Time to start RabbitMQ: 2294 ms",
"line":427,
"pid":"<0.9.0>",
"file":"rabbit.erl",
"mfa":["rabbit","start_it",1]
}
{
"time":"2024-10-04 03:38:35.600956-04:00",
"level":"info",
"msg":"accepting AMQP connection 127.0.0.1:57604 -> 127.0.0.1:5672",
"pid":"<0.899.0>",
"domain":"rabbitmq.connection"
}
现在,一个使用 JSON 日志记录和自定义字段映射的示例:
# log as JSON
log.file.formatter = json
# Rename the 'time' field to 'ts', 'level' to 'lvl' and 'msg' to 'message',
# drop all other fields.
# Use an 'escaped string' just to make the value stand out
log.file.formatter.json.field_map = 'time:ts level:lvl msg:message *:-'
上面的示例将产生以下消息。请注意,与上面的默认示例相比,某些信息已被省略:
{
"ts":"2024-10-04 03:34:43.600462-04:00",
"lvl":"info",
"message":"Time to start RabbitMQ: 2577 ms"
}
{
"ts":"2024-10-04 03:34:49.142396-04:00",
"lvl":"info",
"message":"accepting AMQP connection 127.0.0.1:57507 -> 127.0.0.1:5672"
}
强制单行日志记录
此设置可能导致日志消息不完整,并且仅应作为最后的手段使用,当覆盖日志格式是日志收集工具的硬性要求时。
多行消息可以截断为单行。
# Accepted values are 'on' and 'off'.
# The default is 'off'.
log.console.formatter.single_line = on
此设置可能导致日志消息不完整,并且仅应作为最后的手段使用。
服务日志
在基于 systemd 的 Linux 发行版上,可以使用 journalctl --system 检查系统服务日志。
journalctl --system
这需要超级用户权限。其输出可以被过滤,以仅显示 RabbitMQ 特定的条目:
sudo journalctl --system | grep rabbitmq
服务日志将包括节点的标准输出和标准错误流。journalctl --system 的输出将类似如下:
Aug 26 11:03:04 localhost rabbitmq-server[968]: ## ##
Aug 26 11:03:04 localhost rabbitmq-server[968]: ## ## RabbitMQ 4.0.4. Copyright (c) 2005-2025 Broadcom. All Rights Reserved. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
Aug 26 11:03:04 localhost rabbitmq-server[968]: ########## Licensed under the MPL. See https://rabbitmq.org.cn/
Aug 26 11:03:04 localhost rabbitmq-server[968]: ###### ##
Aug 26 11:03:04 localhost rabbitmq-server[968]: ########## Logs: /var/log/rabbitmq/rabbit@localhost.log
Aug 26 11:03:04 localhost rabbitmq-server[968]: /var/log/rabbitmq/rabbit@localhost_upgrade.log
Aug 26 11:03:04 localhost rabbitmq-server[968]: Starting broker...
Aug 26 11:03:05 localhost rabbitmq-server[968]: systemd unit for activation check: "rabbitmq-server.service"
Aug 26 11:03:06 localhost rabbitmq-server[968]: completed with 6 plugins.
已记录事件
连接生命周期事件
发送至少 1 字节数据的成功 TCP 连接将被记录。不发送任何数据的连接,例如某些负载均衡器的运行状况检查,将不会被记录。
这是一个例子。
2018-11-22 10:44:33.654 [info] <0.620.0> accepting AMQP connection <0.620.0> (127.0.0.1:52771 -> 127.0.0.1:5672)
条目包括客户端 IP 地址和端口(127.0.0.1:52771)以及服务器的目标 IP 地址和端口(127.0.0.1:5672)。这些信息在排查客户端连接时可能很有用。
一旦连接成功进行身份验证并获得对虚拟主机的访问权限,这也会被记录。
2018-11-22 10:44:33.663 [info] <0.620.0> connection <0.620.0> (127.0.0.1:52771 -> 127.0.0.1:5672): user 'guest' authenticated and granted access to vhost '/'
上面的示例包括两个可以在各种场景中用作连接标识符的值:连接名称(127.0.0.1:57919 -> 127.0.0.1:5672)和连接的 Erlang 进程 ID(<0.620.0>)。后者由rabbitmqctl 使用,而前者由HTTP API 使用。
一个客户端连接可以干净地关闭,也可以异常关闭。前者是客户端使用专用库函数(方法)正常关闭 AMQP 0-9-1(或 1.0、STOMP、MQTT)连接。后者是客户端关闭 TCP 连接或 TCP 连接失败。RabbitMQ 会记录这两种情况。
下面是一个成功关闭连接的示例条目:
2018-06-17 06:23:29.855 [info] <0.634.0> closing AMQP connection <0.634.0> (127.0.0.1:58588 -> 127.0.0.1:5672, vhost: '/', user: 'guest')
异常关闭的连接将被记录为警告。
2018-06-17 06:28:40.868 [warning] <0.646.0> closing AMQP connection <0.646.0> (127.0.0.1:58667 -> 127.0.0.1:5672, vhost: '/', user: 'guest'):
client unexpectedly closed TCP connection
异常关闭的连接可能是无害的。例如,一个短生命周期的程序可能自然终止,而没有机会关闭其连接。它们也可能暗示着一个真正的问题,例如应用程序进程失败或代理关闭了它认为空闲的 TCP 连接。
查看内部事件
RabbitMQ 节点有一个内部机制。其中一些事件可能对监控、审计和故障排除很有价值。可以使用 rabbitmq-diagnostics 命令将它们作为 JSON 对象消耗。
# will emit JSON objects
rabbitmq-diagnostics consume_event_stream
当交互式使用时,结果可以管道传输到命令行 JSON 处理器,如jq。
rabbitmq-diagnostics consume_event_stream | jq
事件以空白体的消息形式发布。所有事件元数据都存储在消息注释(属性、头)中。
下面是已发布事件的列表。
核心代理
队列、交换和绑定事件
queue.deletedqueue.createdexchange.createdexchange.deletedbinding.createdbinding.deleted
connection.createdconnection.closedchannel.createdchannel.closed
消费者事件
consumer.createdconsumer.deleted
策略和参数事件
policy.setpolicy.clearedqueue.policy.updatedqueue.policy.clearedparameter.setparameter.cleared
虚拟主机事件
vhost.createdvhost.deletedvhost.limits.setvhost.limits.cleared
用户管理事件
user.authentication.successuser.authentication.failureuser.createduser.deleteduser.password.changeduser.password.cleareduser.tags.set
权限事件
permission.createdpermission.deletedtopic.permission.createdtopic.permission.deleted
警报事件
alarm.setalarm.cleared
Shovel 插件
Worker 事件
shovel.worker.statusshovel.worker.removed
Federation 插件
Link 事件
federation.link.statusfederation.link.removed
使用系统日志交换机消耗日志条目
RabbitMQ 可以将日志条目转发到系统交换机 amq.rabbitmq.log,该交换机将在默认虚拟主机中声明。
此功能默认禁用。要激活此日志记录,请将 log.exchange 配置键设置为 true。
# activate log forwarding to amq.rabbitmq.log, a topic exchange
log.exchange = true
log.exchange.level 可用于控制此日志目标将使用的日志级别。
log.exchange = true
log.exchange.level = warning
amq.rabbitmq.log 是一个常规的主题交换机,可以像这样使用。日志条目作为消息发布。消息体包含日志消息,路由键设置为日志级别。
希望消耗日志条目的应用程序需要声明一个队列并使用路由键将其绑定到交换机以过滤特定日志级别,或使用 # 以消耗所有允许通过配置日志级别的日志条目。