--- title: "8. 日志记录" linkTitle: "8. 日志记录" weight: 320 description: "Syslog 集成、启动日志、运行时日志及日志故障排查" icon: fa-solid fa-file-lines module: [HAPROXY] categories: [任务] aliases: - /haproxy/management/logging/ - /docs/haproxy/management/logging/ - /haproxy/management-logging/ upstream_link: "https://docs.haproxy.org/3.4/management.html" upstream_name: "HAProxy 3.4 Management Guide" upstream_ref: "v3.4.4, chapter 8" --- 对于日志记录,HAProxy 始终依赖 syslog 服务器,因为它不执行任何文件系统访问。标准用法是通过 UDP 将日志发送至日志服务器(默认端口为 514)。通常情况下,该配置会指向 127.0.0.1,即本地 syslog 守护进程运行的位置,但也常通过网络将日志发送至集中式服务器。在主动-主动场景中,集中式服务器尤其具有优势,可确保日志按到达顺序合并。HAProxy 也可使用 Unix 套接字将日志发送至本地 syslog 守护进程,但强烈不建议使用,因为当 syslog 服务器重启而 haproxy 仍在运行时,套接字将被替换,新日志将丢失。由于 HAProxy 将被隔离在 chroot 环境中,它将无法重新连接至新的套接字。现场观察表明,Unix 套接字使用的日志缓冲区非常小,即使在极轻负载下也可能导致消息丢失。不过,这在测试环境中可以接受。 建议将以下指令添加至 "global" 段,以使 HAProxy 使用 "local0" 设施将日志输出至本地守护进程: ```text log 127.0.0.1:514 local0 ``` 然后在每个“defaults”段或每个前端和后端段中添加以下配置: ```text log global ``` 通过这种方式,所有日志将通过全局定义日志服务器位置的方式实现集中化。 某些 syslog 守护进程默认不监听 UDP 流量,因此具体启用方式取决于所使用的守护进程: - 在 sysklogd 上,需在守护进程的命令行中传递参数 "-r",使其监听用于接收“远程”日志的 UDP 套接字;请注意,无法将其限制为仅接收来自 127.0.0.1 的日志,因此也会接收来自远程系统的日志; - 在 rsyslogd 中,必须将以下行添加到配置文件中: ```shell $ModLoad imudp $UDPServerAddress * $UDPServerRun 514 ``` - 在 syslog-ng 上,可通过以下方式创建新的源,随后需将其添加至某个 "log" 指令的有效源列表中: ```text source s_udp { udp(ip(127.0.0.1) port(514)); }; ``` 请参阅系统日志守护进程手册以获取更多信息。如果系统日志文件中未见日志,请考虑执行以下测试: - 重启 HAProxy。每个前端和后端都会记录一行日志,表明其正在启动。如果收到这些日志,说明日志功能正常。 - 执行命令 `strace -tt -s100 -etrace=sendmsg -p \`,并执行你期望产生日志的活动。你应该能在 `sendmsg()` 调用处看到日志消息的发送。若未出现,请使用 `strace` 重新启动 HAProxy。若仍无日志输出,说明配置中肯定存在错误。 - 使用 tcpdump 监听端口 514,例如在环回接口上监听本地发送的流量:"tcpdump -As0 -ni lo port 514"。如果在此处看到数据包,说明数据已发送,此时应排查 syslogd 守护进程。 流量日志由前端(接收传入连接的位置)发送, 后端也必须能够发送日志,以便在健康检查后报告服务器状态变更。 有关所有可能的日志设置的更多信息,请参阅 HAProxy 配置手册。 选择一个未被其他守护进程使用的 facility 会更加方便。HAProxy 的示例通常建议将流量日志使用 "local0",管理日志使用 "local1",因为它们在实际环境中几乎不会出现。使用单一 facility 也同样足够。分别记录日志便于日志分析,但同样需要注意,日志有时可能包含机密信息,因此必须避免与其他日志混合,以防意外泄露给未经授权的人员。 对于在生产环境中进行故障排查且对服务器容量影响较小的情况,建议使用 HAProxy 自带的 "halog" 工具。该工具类似于 grep,专为以极高的数据速率处理 HAProxy 日志文件而设计。典型处理速度可达每秒 1 至 2 GB 日志。它能够仅提取特定日志(例如:搜索某类 HTTP 状态码、连接终止状态、按响应时间范围搜索、仅查找错误等),统计行数,限制输出行数,还可执行一些更高级的统计分析,如按响应时间或错误计数对服务器排序、按时间或访问次数对 URL 排序、按访问次数对客户端地址排序等。该工具可快速发现异常情况,例如机器人在网站上循环访问,便于及时阻断。