HAProxy 的日志没有进 rsyslog,怎么排查?

HAProxy 无日志通常是三处断点:HAProxy 配置的 log 指令、rsyslog 未启用 UDP 514 监听、或 chroot 导致 /dev/log 不可达。本文给出完整排查链路与配置示例。

最佳实践
HAProxy 的日志没有进 rsyslog,怎么排查?封面

HAProxy 日志链路有三个环节:HAProxy 发往 syslog(log 指令)→ rsyslog 接收(UDP 514 或 /dev/log socket)→ 写入文件。逐段验证即可定位。

1. HAProxy 配置

global
    log /dev/log local0      # 本机 syslog socket
    # 或发 UDP:log 127.0.0.1:514 local0
defaults
    log global
    option httplog           # HTTP 详细日志

2. rsyslog 接收配置

# /etc/rsyslog.conf 取消 UDP 监听注释
module(load="imudp")
input(type="imudp" port="514")

# 把 local0 设施写入独立文件
local0.*    /var/log/haproxy.log

重启两边:systemctl restart rsyslog haproxy

3. chroot 陷阱(最常见)

HAProxy 配置里 chroot /var/lib/haproxy 时,进程看到的 /dev/log 是 chroot 内的——syslog socket 不存在,日志静默丢失。解法:

  • 让 rsyslog 在 chroot 里创建 socket:input(type="imuxsock" Socket="/var/lib/haproxy/dev/log")
  • 或干脆改用 UDP(log 127.0.0.1:514 local0)绕开 socket 问题。

验证

logger -p local0.info "test"       # 手动发一条 local0 日志
tail /var/log/haproxy.log

常见问题(FAQ)

Q:SELinux 环境还要注意什么? 需允许 haproxy 连 syslog 端口:setsebool -P haproxy_connect_any 1 或配对应策略。

Q:日志只在压测时才丢? UDP 丢包——换 TCP 或调大 rsyslog 队列。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台