通过正确配置 HAProxy 日志,您可以监视代理的活动、诊断问题和优化性能。在处理生产环境中的问题时,请务必谨慎行事,并对配置进行适当的测试。在修改配置时,请确保遵循最佳实践,以便在保护网络安全的同时,确保最佳性能。
一.配置HAProxy配置文件
在 HAProxy 配置文件中,日志部分主要用于指定 HAProxy 如何记录事件和错误信息
1.全局日志配置
在 global 部分定义日志参数,这些参数适用于整个 HAProxy 实例。
global log<address><facility><level>
address:指定日志守护进程的地址。对于 rsyslog,它是 /dev/log 或一个远程地址,如 192.168.1.1:514。对于 journald,它是 `/run/systemd/journal/syslog.socket。
facility:rsyslog设施代码,可以是 local0 到 local7 之间的任何一个值。这些设施用于对日志消息进行分类。
level:指定日志级别,可以是 emerg、alert、crit、err、warning、notice、info 或 debug。较低级别的日志包含较详细的信息,但可能导致性能下降。
示例:
global log /dev/log local3 info
2.代理日志配置
在 defaults 或 frontend/backend 部分定义日志参数,这些参数仅适用于特定代理。
defaults log global option httplog option dontlognull
log global:表示继承global部分定义的日志参数。option httplog:启用 HTTP 日志记录,包括请求和响应标头。option dontlognull:禁止记录空连接(即没有请求或响应内容的连接)。
示例:
defaults log global option httplog option dontlognull
3.访问日志配置
在 frontend 部分定义访问日志格式和路径。
frontend http_front ... capture request header Host len 30 capture request header X-Forwarded-For len 50 log-format "%ci:%cp [%t] %ft %b/%s %Tq/%Tw/%Tc/%Tr/%Tt %ST %B %CC %CS %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs %{+Q}r" access-log /var/log/haproxy/access.log
capture request header:捕获请求头中的特定值,以便在访问日志中使用。log-format:定义访问日志的格式。格式字符串中的占位符将替换为实际值。access-log:指定访问日志文件的路径。如果未设置,访问日志将不会记录。
示例:
frontend http_front ... capture request header Host len 30 capture request header X-Forwarded-For len 50 log-format "%ci:%cp [%t] %ft %b/%s %Tq/%Tw/%Tc/%Tr/%Tt %ST %B %CC %CS %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs %{+Q}r" access-log /var/log/haproxy/access.log
二.配置rsyslog配置文件
1.删除/etc/rsyslog.conf中”*.info;” 字段

*.info: 这部分表示所有设施(facility)的info级别及以上的日志都应该被捕获。在rsyslog中,设施是消息来源的类别,例如auth、authpriv、cron、daemon、kern、lpr、mail、news、syslog、user、uucp等。而*表示所有设施。日志级别从低到高有debug、info、notice、warning、err、crit、alert、emerg。因此,*.info表示所有设施的info、notice、warning、err、crit、alert、emerg级别的日志都应该被捕获。
删除字段”*.info;”,如果不删除,日志也会记录到/var/log/messages
2.开启/etc/rsyslog.conf的UDP
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
3./etc/rsyslog.conf添加HAProxy的设施

三.配置/etc/sysconfig/rsyslog
将/etc/sysconfig/rsyslog配置为
SYSLOGD_OPTIONS="-c 2 -r -m 0"
/etc/sysconfig/rsyslog 文件是 rsyslog 服务的配置文件,用于定义 rsyslog 守护进程的行为
以下是这三个选项的含义:
-
-r:此选项启用接收来自远程主机的日志消息。当启用此选项时,rsyslog 将监听所有网络接口上的 UDP 端口 514(默认的 syslog 端口)。 -
-m 0:此选项设置了 rsyslog 守护进程在启动时生成标记时间戳的间隔(以分钟为单位)。设置为0表示禁用时间戳标记功能。这意味着 rsyslog 将在每条日志消息的开头插入当前时间,而不是每隔特定分钟数插入时间戳。 -
-c 2:此选项指定 rsyslog 使用的配置文件版本。-c 2表示使用 rsyslog v2 语法。rsyslog 支持多个版本的配置文件语法,不同版本之间可能存在一些差异。通过指定版本,您可以确保 rsyslog 使用正确的语法解析配置文件。
总之,SYSLOGD_OPTIONS="-r -m 0 -c 2" 这一行配置了 rsyslog 守护进程以接收远程日志消息,禁用时间戳标记功能,并使用 rsyslog v2 语法解析配置文件。在处理生产环境中的问题时,请务必谨慎行事,并对配置进行适当的测试。在修改配置时,请确保遵循最佳实践,以便在保护网络安全的同时,确保最佳性能。
四.重启服务
systemctl restart haproxy rsyslog
五.查看日志
[root@localhost ~]# tail -f /var/log/haproxy.log
Jun 12 14:07:43 localhost haproxy[9229]: 192.168.116.1:61967 [12/Jun/2024:14:07:43.223] main web/web2 0/0/0/0/0 403 5168 - - ---- 1/1/0/0/0 0/0 "GET / HTTP/1.1"
Jun 12 14:07:43 localhost haproxy[9229]: 192.168.116.1:61967 [12/Jun/2024:14:07:43.224] main static/<NOSRV> 18/-1/-1/-1/18 503 212 - - SC-- 0/0/0/0/0 0/0 "GET /noindex/css/bootstrap.min.css HTTP/1.1"
Jun 12 14:07:43 localhost haproxy[9227]: 192.168.116.1:61969 [12/Jun/2024:14:07:43.231] main static/<NOSRV> 11/-1/-1/-1/11 503 212 - - SC-- 0/0/0/0/0 0/0 "GET /noindex/css/open-sans.css HTTP/1.1"
Jun 12 14:07:43 localhost haproxy[9227]: 192.168.116.1:61971 [12/Jun/2024:14:07:43.243] main static/<NOSRV> 0/-1/-1/-1/0 503 212 - - SC-- 1/1/1/0/0 0/0 "GET /images/apache_pb.gif HTTP/1.1"
Jun 12 14:07:43 localhost haproxy[9227]: 192.168.116.1:61970 [12/Jun/2024:14:07:43.243] main static/<NOSRV> 0/-1/-1/-1/0 503 212 - - SC-- 0/0/0/0/0 0/0 "GET /images/poweredby.png HTTP/1.1"




