日志记录
概述
日志文件是系统可观测性的一个非常重要的方面,就像监控一样。
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
:控制日志条目格式,文本行或 JSONlog.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 纪元格式
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
:控制日志条目格式,文本行或 JSONlog.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 纪元格式
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
请注意,即使配置了 log.file
,RABBITMQ_LOGS=-
也会停用文件输出。
记录到 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_format
log.console.formatter.level_format
log.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.
已记录的事件
连接生命周期事件
将记录成功的 TCP 连接,这些连接至少发送 1 字节的数据。不会记录未发送任何数据的连接,例如某些负载均衡器产品的运行状况检查。
这是一个例子
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
事件作为空消息体的消息发布。所有事件元数据都存储在消息注释(属性、标头)中。
以下是已发布事件的列表。
核心 Broker
队列、交换机和绑定事件
queue.deleted
queue.created
exchange.created
exchange.deleted
binding.created
binding.deleted
connection.created
connection.closed
channel.created
channel.closed
消费者事件
consumer.created
consumer.deleted
策略和参数事件
policy.set
policy.cleared
queue.policy.updated
queue.policy.cleared
parameter.set
parameter.cleared
虚拟主机事件
vhost.created
vhost.deleted
vhost.limits.set
vhost.limits.cleared
用户管理事件
user.authentication.success
user.authentication.failure
user.created
user.deleted
user.password.changed
user.password.cleared
user.tags.set
权限事件
permission.created
permission.deleted
topic.permission.created
topic.permission.deleted
警报事件
alarm.set
alarm.cleared
Shovel 插件
Worker 事件
shovel.worker.status
shovel.worker.removed
Federation 插件
链接事件
federation.link.status
federation.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
是一个常规主题交换机,可以像这样使用。日志条目作为消息发布。消息正文包含记录的消息,路由键设置为日志级别。
想要消费日志条目的应用程序需要声明一个队列并将其绑定到交换机,使用路由键来过滤特定的日志级别,或使用 #
来消费配置的日志级别允许的所有日志条目。