HAProxy - 如何提高状态代码高于 400 的响应的日志级别

HAProxy - 如何提高状态代码高于 400 的响应的日志级别

这是我的示例配置:

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严重性级别比infosyslog 中更高;这一点一开始让我感到困惑。

该条件if { status ge 400}是一个内联表达式作为示例,但您当然也可以使用 ACL 或其他条件。

本博客中有关 HAProxy 日志的相关基础知识:haproxy.com/blog:HAProxy 日志简介

相关内容