这是我的示例配置:
frontend www-http
bind *:80
acl status_error status ge 400
http-response set-log-level err if status_error
default_backend www-backend
backend www-backend
server backend 127.0.0.1:8080
使用此配置,所有状态为 200 的响应都会被记录,但 400 及以下的响应不会被记录。如果我删除 acl 和 http-response 行,那么所有内容都会被记录。
我已将这些行添加到默认配置中,并且没有触及任何 rsyslog 配置。我在 HAProxy 1.5.8(Debian 8)和 1.6.3(Ubuntu 16.04)中对此进行了测试。
答案1
(虽然已经四年过去了,但或许仍然有意义。)
使用 HAProxy 2.2,这种方法对我有用,可以在一个前端进行条件和仅 HTTP 请求/连接日志记录:
global
# 'notice' level as global minimum (does not include http request logs)
log /dev/log local0 notice
[...]
defaults
log global
frontend myhttpsfrontend
bind [...]
mode http
# enables logging of all HTTP requests at info level
option httplog
# raise loglevel from info to notice with status code >= 400
http-response set-log-level notice if { status ge 400 }
我选择notice
全局级别,因为如果全局级别为,TCP 后端可能会非常嘈杂info
。请注意,notice
严重性级别比info
syslog 中更高;这一点一开始让我感到困惑。
该条件if { status ge 400}
是一个内联表达式作为示例,但您当然也可以使用 ACL 或其他条件。
本博客中有关 HAProxy 日志的相关基础知识:haproxy.com/blog:HAProxy 日志简介。