HAProxy:创建仅 HTTP 请求的日志文件

HAProxy:创建仅 HTTP 请求的日志文件

我正在尝试拆分我的 HAProxy (v1.6.12) 日志,以便一个文件仅包含 HTTP 请求日志,而另一个文件仅包含启动/停止/等日志。我的配置中有以下内容:

 global
   log 127.0.0.1 local2 notice
   log 127.0.0.1 local3 info info

正如你所见,我试图local3限制仅有的信息日志,而local2通知级别及以上则获取日志。

local2正确地只接收通知级别及以上的日志。但是,local3仍然会获取所有以通知级别记录的启动/停止日志。所以这告诉我,我可能错误地使用了最小日志级别?还是有错误?

谢谢!

答案1

我花了一段时间才自己弄明白,但看起来答案是通过修改日志格式和 rsyslog 设置,因为 haproxy 不提供任何“访问日志”级别。

下面是我所做操作的一个例子:

global
    log 127.0.0.1:514 len 65535 local0 info

    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

defaults
    log     global
    mode    http

frontend http-in
    bind *:443  ssl crt /usr/local/ssl/haproxy.pem
    default_backend response-ok

    option http-buffer-request
    declare capture request len 2000000000
    http-request capture req.body id 0
    log-format "[http-request]: %ci,%[capture.req.hdr(0)]"

backend response-ok
    errorfile 503 /etc/haproxy/errors/200.http

现在下一步是将 rsyslog 更改为将所有以“[http-request]”开头的日志写入不同的文件,因此我像这样编辑了 /etc/rsyslog.d/49-haproxy.conf:

# Collect log with UDP
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514

# We add :2: to remove leading whitespace
$template access_logs_form, "%msg:2:$:%\n"

# Send HAProxy access logs
:msg, contains, "[http-request]:" {
    /var/log/haproxy/haproxy-traffic.log;access_logs_form
    stop
}

# Send HAProxy messages to a dedicated logfile
:programname, startswith, "haproxy" {
    /var/log/haproxy/haproxy.log
    stop
}

相关内容