RabbitMQ 日志的初学者指南

您所在的位置:网站首页 如何查看log日志 RabbitMQ 日志的初学者指南

RabbitMQ 日志的初学者指南

2023-03-10 02:00| 来源: 网络整理| 查看: 265

RabbitMQ 是目前最流行的开源消息代理之一。它能够被部署在各种配置和各种平台上,这使它成为一个广泛使用的工具;它还支持所有主要的消息传递协议,使它非常通用。

不过,用 RabbitMQ 这样的工具调试问题可能具有挑战性,特别是当它部署在一个大型集群上时。RabbitMQ 日志是一种方法,因为它们可以帮助您在调试时回溯到较早的点。

在本文中,我们将带您了解有关 RabbitMQ 日志的一些基本知识,包括如何配置 RabbitMQ 日志以将其存储在特定位置、如何更改日志格式以及如何旋转 RabbitMQ 日志文件。

什么是 RabbitMQ 日志?

RabbitMQ 日志是由 RabbitMQ 产生的调试、错误和关键消息,它们被写入文件或控制台,或被发送到 syslog。这些日志消息提供了有关 RabbitMQ 集群中发生的事件的大量信息。例如,每当队列中收到一条新消息时,当该消息被复制到另一个队列中时,如果一个节点宕机或上升,或者遇到任何错误,就会生成一条日志消息。

当您试图深入了解您的 RabbitMQ 集群的健康状况或调试问题时,这些日志消息可作为主要信息来源之一。您甚至可以使用它们来生成仪表盘,以更容易理解的方式呈现信息。

没有这些消息会使调试问题变得非常困难,因为它们可以帮助我们了解 RabbitMQ 在任何给定时间点上正在做什么。因此,启用 RabbitMQ 日志并在一定时期内存储这些日志消息对于快速排除故障和修复问题至关重要。

RabbitMQ 日志的位置

RabbitMQ 是一种平台无关的工具。正因为如此,根据您安装 RabbitMQ 的操作系统,日志位置会发生变化。但是 RabbitMQ 使用了一堆环境变量和配置参数,它们在不同平台上保持不变。您可以使用它来查找 RabbitMQ 的日志文件位置,并在需要时进行更改。

在查看默认的 RabbitMQ 日志位置之前,以下是涉及的环境变量:

RABBITMQ_BASE:仅适用于 Windows 的环境变量,它是 RabbitMQ 的数据库和日志文件存储在其中的基本目录。 RABBITMQ_LOG_BASE:这是存储 RabbitMQ 服务器日志的基本目录。 RABBITMQ_LOGS:这是 RabbitMQ 服务器的 Erlang 日志文件的存储路径;此配置在 Windows 上不能被改写。

还有其他各种环境变量可用于 RabbitMQ,但我们只对这些变量感兴趣,因为它们与日志和日志文件有关。

当您在服务器或群集上部署 RabbitMQ 实例时,其中一些变量将在部署期间设置为默认值,具体取决于操作系统。

nix 系统

这包括所有基于 Unix 和 Linux 的操作系统,如 Ubuntu、Debian、RedHat、Fedora、macOS 和 BSD 等。

在 *nix 系统上,RabbitMQ 使用一个名为${install_prefix} 的变量。当您使用 Homebrew 在 macOS 机器上部署 RabbitMQ 时,它使用 Homebrew Cellar 位置作为默认安装路径。${install_prefix} 默认被设置为/usr/local 。但对于 Debian 和 RPM 包,${install_prefix} 路径默认为空值。

有了这些信息,你可以查看这些操作系统的环境变量的默认值:

RABBITMQ_BASE:不使用,因为这只适用于Windows。 RABBITMQ_LOG_BASE:${install_prefix}/var/log/rabbitmq RABBITMQ_LOGS:$RABBITMQ_LOG_BASE/$RABBITMQ_NODENAME.log Windows

Windows操作系统有一个隐藏的文件夹,路径为C:\Users\\AppData 。这是变量%AppData% 在下面的配置中所指的默认路径。您可以使用它来存储自定义设置和各种应用程序正常运行所需的其他信息。RabbitMQ 还使用此路径作为基础来存储所有配置信息以及日志。

用于 Windows 的环境变量列表如下:

RABBITMQ_BASE:%AppData%\RabbitMQ RABBITMQ_LOG_BASE:%RABBITMQ_BASE%\log RABBITMQ_LOGS:%RABBITMQ_LOG_BASE%\%RABBITMQ_NODENAME%.log 通用二进制构建

本节适用于你只是解压缩一个tar文件,而没有真正从软件包中安装它。这些又是默认的环境变量值,与通用的Unix tar文件一起运送。这里,$RABBITMQ_HOME 变量指的是你解压tar文件的目录或路径:

RABBITMQ_BASE:不使用,因为这只适用于Windows。 RABBITMQ_LOG_BASE:$RABBITMQ_HOME/var/log/rabbitmq RABBITMQ_LOGS:$RABBITMQ_LOG_BASE/$RABBITMQ_NODENAME.log

此配置类似于您在基于 nix 的操作系统上部署 RabbitMQ 时得到的配置。

Docker

另一种非常流行的部署 RabbitMQ 的方式是在 Docker 容器上。到目前为止,检查 RabbitMQ Docker 日志是最简单的。这是因为在默认情况下,所有 RabbitMQ 日志与常规Docker 日志一起都可在标准输出上获得。

因此,要检查日志,您只需运行docker logs 命令,就可以在那里看到 RabbitMQ 的日志:

docker logs rabbitmq_container_id 复制代码 如何更改日志文件夹

RabbitMQ 为您提供了两种方法来更改日志文件夹的位置:

使用配置文件来设置用于保存日志文件的自定义路径。 使用环境变量,该变量在安装期间被默认设置。 使用配置文件

第一种方法是使用rabbitmq.conf 文件。在基于 Debian 和 RPM 的系统上,您可以在/etc/rabbitmq/ 找到该配置文件,或者在 RabbitMQ 是通过解压缩 tar 文件安装的情况下,在$RABBITMQ_HOME/etc/rabbitmq/ 找到该文件。在 Windows 系统中,该文件位于%APPDATA%\RabbitMQ\ 路径中,而对于 macOS,您可以在${install_prefix}/etc/rabbitmq/ 找到它。在该文件中,您可以配置许多参数,不仅可以改变 RabbitMQ 的日志文件夹位置,还可以在很大程度上自定义日志。

例如,您可以取消对 log.dir 配置的注释,以便为保存日志文件设置一个自定义路径。默认情况下,该参数被注释,因为该环境变量是在安装或部署 RabbitMQ 时自动设置的。rabbitmq.conf 文件中的日志文件位置配置的默认值如下:

log.dir = /var/log/rabbitmq 复制代码

您必须取消对 log.dir 参数的注释,设置一个新值,并删除环境变量以使此配置生效。

使用环境变量

在这里,环境变量优先于配置文件中关于日志文件夹位置的参数。日志文件夹位置的默认值被保存在一个名为RABBITMQ_LOGS 的环境变量中。更改此环境变量将改变 RabbitMQ 日志文件夹。

RabbitMQ 日志级别

RabbitMQ 提供各种日志级别,每个级别都有一个不同的严重性编号。这个数字很重要,因为它与其他因素一起决定是否必须对消息进行记录。

支持的日志级别 日志级别严重程度debug128信息64警告16错误8关键4无0

"debug "日志级别的最高严重性编号为 128。除了 "无"(停止 RabbitMQ 的所有日志记录)之外,严重性编号越低,消息的严重性越高。默认情况下,RabbitMQ 被配置为记录所有 "信息 "级别的消息。这意味着在默认情况下,您将获得所有关键消息、错误和警告。

您应该仅在试图调试问题时才启用调试日志,因为 RabbitMQ 会产生大量调试消息,这些消息通常是不必要的,并且会导致高存储使用率。因此,在日常使用中避免使用调试日志级别。

更改日志级别

RabbitMQ 提供了两种更改日志级别的方法:通过配置文件或使用 CLI 工具运行一条命令。

在配置文件中更改日志级别需要重新启动节点以使更改生效。但是这种改变是永久性的,因为它是直接在配置文件中进行的。用于改变日志级别的配置参数如下:

log.default.level = info 复制代码

你可以把这个值改成任何支持的日志级别,然后重新启动节点,这个改变就会反映出来。

第二种方法,使用CLI工具,是暂时性的。这种改变只在节点重新启动之前有效。重启后,日志级别将再次从配置文件中读取。当您想临时启用 RabbitMQ 调试日志级别以执行一些快速调试时,这种方法很方便:

rabbitmqctl -n rabbit@target-host set_log_level debug 复制代码

传递给此命令的最后一个选项是所需的日志级别。您可以传递任何支持的日志级别。以这种方式更改日志级别不需要重新启动节点,而且更改将立即生效。

日志信息类别

除日志级别外,RabbitMQ 还提供了日志类别,以更好地微调日志和调试。日志类别是各种消息的类别,可以可视化为来自 RabbitMQ 中各种模块的日志。

这是 RabbitMQ 中可用的日志类别的列表:

连接:用于某些消息传递协议的连接生命周期事件日志 通道:错误和警告日志,用于某些消息传递协议通道 队列:主要是来自消息队列的调试日志 镜像:与队列镜像有关的日志 联盟:联盟插件日志 升级:粗略的升级日志 默认的:通用的日志类别;没有能力覆盖这个类别的文件位置

你可以使用这些来覆盖在全局级别配置的默认日志级别。例如,假设你试图调试一个问题,并将全局日志级别配置为调试。但你想避免升级类别的调试日志信息,或升级类别的所有日志信息。

为此,将升级日志类别配置为不发送任何日志信息:

log..level = none 复制代码

同样,您可以使用以下配置,将某一类别的所有消息配置为记录到一个单独的文件:

log..file 复制代码

这样,RabbitMQ 就可以轻松地根据日志类别和日志级别来隔离日志消息。

如何旋转 RabbitMQ 日志

日志文件可以很快变得非常大。避免这种情况的一个简单方法是定期轮换日志文件。默认情况下,RabbitMQ 不会轮换日志文件,而是一直将日志追加到同一文件中。这样做是为了保存日志历史。但 RabbitMQ 确实提供了两种开箱即用的旋转日志文件的方式。

基于日期

您可以使用一个配置参数来根据日期或一天中的某个特定时间自动旋转日志文件:

log.file.rotation.date = $D0 复制代码

$D0选项将在午夜时分每24小时轮换一个日志文件。但如果你想改成每天晚上11点轮换日志文件,请使用以下配置:

log.file.rotation.date = $D23 复制代码 基于文件大小

RabbitMQ 还允许您根据日志文件的大小来旋转日志文件。因此,只要日志文件达到配置的文件大小,就会创建一个新文件:

log.file.rotation.size = 10485760 复制代码

上述配置在文件大小达到 10 MB 时旋转日志文件。

要保留的归档日志文件的数量

当日志文件轮换被启用时,确保你配置保留多少个日志文件也很重要。否则,所有旧的日志文件都将保留在磁盘上,消耗不必要的存储。RabbitMQ 对此也有一个内置配置,您可以使用以下配置控制要保留的文件数量:

log.file.rotation.count = 5 复制代码

在此示例中,五个日志文件将被保留在存储磁盘上。

使用 Logrotate 进行日志轮换

除了内置的日志旋转机制外,RabbitMQ 还支持 *nix 系统上的 logrotate 包。各种工具使用 logrotate 来有效地旋转日志文件。运行 RabbitMQ 的 Debian 和 RPM 系统都可以将 logrotate 设置为每周在默认日志位置上运行,以清理该目录。

如何格式化 RabbitMQ 日志

在大多数生产环境中,您希望使用第三方工具来分析您的所有日志。当日志以一种外部工具易于理解的方式进行格式化时,这就变得很容易了。在大多数情况下,这就是 JSON 格式。

如何在 JSON 中记录 RabbitMQ

RabbitMQ 提供了对将日志格式化为开箱即用的 JSON 消息的支持。您可以使用配置文件中的一个参数来将 RabbitMQ 日志消息的格式改为 JSON。无论您配置的日志级别或您正在记录的日志类别如何,这都会生效。

要将日志格式更改为 JSON,您只需在配置文件中添加或取消注释以下配置:

log.file.formatter = json 复制代码

这将把所有写入文件的日志信息转换为JSON格式。或者,分别使用下面的配置,将写到控制台或syslog的日志格式改为JSON:

log.console.formatter = json log.syslog.formatter = json 复制代码

如果您想恢复这些更改,也就是说,如果您不希望日志消息采用 JSON 格式,那么只需注释掉这些配置参数。

RabbitMQ 日志配置

RabbitMQ 为日志消息提供了三个目标选项:到文件、控制台或 syslog。默认情况下,RabbiMQ 将所有日志消息指向文件。您可以使用 RabbitMQ 配置文件来控制这一点。

将日志记录到文件

以下配置将启用或禁用 RabbitMQ 记录到文件:

log.file = true 复制代码

还有许多其他配置参数用于调整 RabbitMQ 日志到文件的情况。例如,您可以控制到文件的日志级别,为每个日志类别创建单独的文件,使用内置的日志轮换功能,甚至与第三方日志轮换包集成,如上所述。当你想停止以这种方式记录信息时,你所要做的就是把配置值改为false。

记录到控制台

向控制台记录日志与向文件记录日志类似。您在 RabbitMQ 配置文件中有一个配置,可以启用或禁用向控制台的日志记录。该配置如下:

log.console = true 复制代码

与向文件记录一样,您可以将该值改为 false 以停止记录。此外,还有许多选项用于格式化发送到控制台的日志消息。

记录到Syslog

与记录到文件或控制台相比,记录到syslog需要更多的配置。一旦你启用日志到syslog,你还必须提供其他相关的配置,如传输机制(TCP或UDP)、传输协议(RFC 3164或RFC 5424)、syslog服务的IP地址或主机名、端口、TLS配置(如有)等等。

要启用到 syslog 的日志记录,请使用以下配置:

log.syslog = true 复制代码

默认情况下,RabbitMQ 使用端口 514 的 UDP 传输机制和 RFC 3164 协议。要更改传输和协议,请使用以下两个配置:

log.syslog.transport = tcp log.syslog.protocol = rfc5424 复制代码

如果您想使用 TLS,请使用以下配置:

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.ip = 10.10.10.10 复制代码

log.syslog.host = my.syslog-server.local 复制代码

log.syslog.port = 1514 复制代码

除了这些,您还可以将日志消息的格式改为 JSON,正如我们之前讨论的那样。

使用 Sematext 进行 RabbitMQ 日志汇总和分析

Sematext Logs是一个日志管理解决方案,可帮助您利用 RabbitMQ 日志消息来深入了解 RabbitMQ 的性能和调试问题。Sematext代理可以解析RabbitMQ的日志,不需要用户增加任何努力。一旦解析了日志,就可以使用Sematext Cloud上的预定义仪表板来探索它们。

Sematext Logs是Sematext Cloud观察性平台的一部分,支持许多技术和服务,包括RabbitMQ监控。因此,除了聚合和分析RabbitMQ日志,你还可以监控所有关键的RabbitMQ指标,并为基于阈值的警报设置异常检测。这样,您就可以轻松地将日志与指标联系起来,以加快RabbitMQ的故障排除。

总结

RabbitMQ 提供了许多与日志相关的功能和选项。这些功能允许您自定义日志并以您想要的方式将其发送到正确的系统,让您轻松快速地分析性能和调试问题。

有两种方法来使用日志数据。一种是追溯性地查看发生了什么来调试问题,另一种是主动监测日志中关于系统健康状况的内容。Sematext Logs解析RabbitMQ日志的能力使其很容易做到这两点,让您在排除问题的同时,深入了解RabbitMQ的整体性能。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3