温馨提示×

CentOS上RabbitMQ日志管理策略

小樊
37
2025-11-25 20:28:07
栏目: 智能运维

CentOS 上 RabbitMQ 日志管理策略

一 日志体系与默认路径

  • 日志默认写入目录:/var/log/rabbitmq/。常见文件包括:
    • rabbit@.log:节点运行日志
    • rabbit@-sasl.log:Erlang SASL 日志(启动失败、崩溃等更细节信息)
    • rabbitmq.log / rabbitmq-startup.log:通用与启动过程日志
  • 快速确认当前生效路径与文件:
    • 命令:rabbitmq-diagnostics -q log_location
    • 管理界面:Admin → Logs 页面可查看与下载各节点日志
  • 说明:SASL 日志用于记录 Erlang/OTP 层面的事件,有助于定位节点无法启动等问题。

二 日志级别与输出目标

  • 调整日志级别(示例仅调整连接类日志为 warning):
    • 编辑配置文件(新版 key=value 格式):/etc/rabbitmq/rabbitmq.conf
      [ {rabbit, [ {log_levels, [ {connection, warning} ]} ]} ].
      
    • 旧版 Erlang 格式:/etc/rabbitmq/rabbitmq.config
      [ {rabbit, [ {log_levels, [ {connection, warning} ]} ]} ].
      
    • 可用类别:channel、connection、federation、mirroring;级别:none、error、warning、info、debug
  • 输出目标与路径自定义:
    • 环境变量方式(可在 systemd 环境或 rabbitmq-env.conf 中设置):
      RABBITMQ_LOGS=/data/logs/rabbitmq.log
      RABBITMQ_SASL_LOGS=/data/logs/rabbitmq-sasl.log
      
    • 目录方式(在 rabbitmq-env.conf 中设置):
      LOG_BASE=/data/logs/rabbitmq
      
    • 修改后需重启节点生效:systemctl restart rabbitmq-server

三 日志轮转与保留实践(rsyslog 方案)

  • 建议采用系统级 rsyslog 做按大小/时间的日志轮转,避免日志无限增长。示例(/etc/rsyslog.d/rabbitmq.conf):
    # 以节点名区分文件(如 rabbit@node1)
    template(name="RabbitMQFile" type="string"
             string="/var/log/rabbitmq/%programname%.log")
    
    if $programname startswith "rabbit" then {
        action(type="omfile" dynaFile="RabbitMQFile"
               fileCreateMode="0644" dirCreateMode="0755"
               flushInterval="1" asyncWriting="off")
        # 按大小轮转:100MB,保留 7 份
        action(type="rotate" file="/var/log/rabbitmq/rabbit.log"
               size="100M" rotate="7"
               compress="on" missingok="on" copytruncate="on")
        stop
    }
    
  • 若系统使用 journald,可通过 ForwardToSyslog=yes 将服务日志送入 rsyslog 再按上述策略轮转。
  • 注意:避免同时使用外部日志代理(如 Filebeat)与 copytruncate,以免产生重复或锁竞争;选择其一即可。

四 审计与追踪日志

  • Firehose(内置追踪):将消息的 publish/deliver 事件以 amq.rabbitmq.trace(topic) 发出,routing key 形如 publish.deliver.。适合临时深度排查。
  • rabbitmq_tracing 插件:在管理界面或命令行启用后,可创建 trace,将匹配事件写入磁盘/队列,便于持久化审计。
  • 风险提示:开启追踪会显著影响性能,排查完成后务必关闭;生产环境建议优先用外部集中式日志采集而非长期开启 Firehose。

五 变更路径与容量规划

  • 将日志与数据迁移到独立磁盘(示例挂载到 /data):
    1. 创建目录并授权:
      mkdir -p /data/rabbitmq/{data,log}
      chown -R rabbitmq:rabbitmq /data/rabbitmq
      
    2. 配置路径(rabbitmq-env.conf):
      RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
      RABBITMQ_LOG_BASE=/data/rabbitmq/log
      
    3. 重启节点:systemctl restart rabbitmq-server
    4. 验证:rabbitmq-diagnostics -q log_location 应指向新目录。
  • 容量与告警:
    • 磁盘告警阈值默认至少 50MB,可按业务调整(如 disk_free_limit);当可用空间低于阈值会触发流控。
    • 内存水位默认 0.4(占用超过 40% 阻塞发布),可结合 vm_memory_high_watermark_paging_ratio 调整内存向磁盘换页的触发点。

0