我目前正在 haproxy 中为 http 和 mqtt 服务添加速率限制。这些服务正在运行,但我还想在日志中显示被阻止的请求。在 http 前端,我返回 429,在 mqtt 上,我关闭被阻止请求的连接。
但是当我启用日志时,所有日志都会显示出来。
global
log 127.0.0. local notice
defaults
log global
option httplog
#sticky tables
backend st_http
stick-table type ipv6 size 100k expire 10s store http_req_rate(10s)
backend st_mqtt
stick-table type ipv6 size 100k expire 10s store conn_rate(10s)
frontend public-https
log stdout format short daemon warning
#rate limiting
http-request track-sc0 src table st_api_requests
http-request deny deny_status 429 if { sc_http_req_rate(0) gt 100 }
# ...
listen mqtt:
mode tcp
option tcplog
log stdout format short daemon warning
# rate limiting
tcp-request connection track-sc0 src table st_mqtt_connections
tcp-request connection reject if { sc_conn_rate(0) gt 2 }
# ...
我怎样才能仅显示错误的请求,即 http 上的所有 4xx 和 5xx 请求以及 mqtt 上所有被阻止的连接?
// 我当前的测试仅显示服务的所有日志输出,或者根据日志级别不显示任何日志输出。我如何才能使其更具选择性?
//edit2 添加了用于速率限制的 acl
答案1
查看dontlog 正常和记录分离错误。如果您需要的不仅仅是这些,我建议您查看一些日志记录基础设施。
HAProxy 不会记录被拒绝的 TCP 连接。您只能使用 mqtt 级别的速率限制,也许可以使用 HAProxy 来平衡集群负载。