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
    mode http
    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。

UDP input 只验证 UDP 路径;若 HAProxy 使用 /dev/log,需核对 imuxsock 或发行版 journald 转发。chroot 自定义 input 前确保 imuxsock 已加载,并创建相应父目录。

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"       # 测试系统默认本地 socket 路径
logger --udp --server 127.0.0.1 --port 514 -p local0.info "udp test"  # Linux util-linux logger
tail /var/log/haproxy.log

常见问题(FAQ)

Q:SELinux 环境还要注意什么? 检查 AVC 拒绝日志及 socket/端口标签,按实际传输配置最小授权策略;不要直接用允许任意连接的全局开关掩盖问题。

Q:日志只在压测时才丢? 检查 UDP 丢包、socket 缓冲、限速、队列与磁盘;不能仅凭压测丢日志断言 UDP,也不能不核对 HAProxy 版本/协议就直接换 TCP。HTTP 流量日志通常在事务结束时生成。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台