Haproxy 没有记录请求?

Haproxy 没有记录请求?

因此,我配置了 Haproxy,以便日志记录将通过 rsyslog,并且现在全部转储到一个文件中。

这肯定是记录,因为我在启动时收到了那些“启动”消息,但根本没有记录 HTTP 请求。我的配置有什么问题?

haproxy配置文件

global
        log /dev/log local0 debug
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

frontend webfront
  option  forwardfor
  stats enable
  stats uri /haproxy?statis
  stats realm Haproxy\ Auth
  stats auth user:password
  bind *:80
  timeout client 86400000
  acl is_discourse  hdr_end(host) -i discourse.mydomain.com
  use_backend       discourse     if is_discourse
  use_backend       webserver     if !is_discourse

backend discourse
  balance source
  option forwardfor
  option httpclose
  server server1 127.0.0.1:3080 weight 1 maxconn 1024 check inter 10000

backend webserver
  balance source
  option forwardfor
  option httpclose
  server server2 127.0.0.1:4080 weight 1 maxconn 1024 check inter 10000

日志档案

root@kayak:/var/log/haproxy# tail haproxy.log
Nov 26 21:25:25 kayak haproxy[21646]: Proxy webfront started.
Nov 26 21:25:25 kayak haproxy[21646]: Proxy webfront started.
Nov 26 21:25:25 kayak haproxy[21646]: Proxy discourse started.
Nov 26 21:25:25 kayak haproxy[21646]: Proxy webserver started.
Nov 26 21:28:10 kayak haproxy[21868]: Proxy webfront started.
Nov 26 21:28:10 kayak haproxy[21868]: Proxy discourse started.
Nov 26 21:28:10 kayak haproxy[21868]: Proxy webserver started.
Nov 26 21:30:31 kayak haproxy[22045]: Proxy webfront started.
Nov 26 21:30:31 kayak haproxy[22045]: Proxy discourse started.
Nov 26 21:30:31 kayak haproxy[22045]: Proxy webserver started.

我在两次重启之间访问了一些 Web 服务器页面,并触发了几个 404 错误。为什么什么都没有显示出来?

编辑:rsyslog conf文件。

/etc/rsyslog.d/49-haproxy.conf:

local0.* -/var/log/haproxy_0.log
if ($programname == 'haproxy') then -/var/log/haproxy/haproxy.log
& ~

答案1

如果你真的想记录每个请求,你必须在前端指定日志。但通常这对服务器来说太过分了,你的磁盘很快就会被占满。

frontend webfront
  log /dev/log local0 debug

答案2

此链接完美地解释这一点。

如果你查看 /etc/haproxy/haproxy.cfg 的顶部,你会看到类似以下内容:

global
log 127.0.0.1 local2
[...]

这意味着 HAProxy 会将其消息发送到 127.0.0.1 上的 rsyslog。但默认情况下,rsyslog 不会监听任何地址,因此才会出现问题。

让我们编辑 /etc/rsyslog.conf 并取消注释以下行:
$ModLoad imudp
$UDPServerRun 514

这将使 rsyslog 监听所有 IP 地址的 UDP 端口 514。您也可以选择通过添加以下内容将端口限制为 127.0.0.1:
$UDPServerAddress 127.0.0.1

现在创建一个 /etc/rsyslog.d/haproxy.conf 文件,包含以下内容:

local2.* /log/haproxy.log

当然,您可以更加具体,并根据消息级别创建单独的日志文件:

local2.=info /log/haproxy-info.log
local2.notice /log/haproxy-allbutinfo.log

然后重新启动rsyslog,可以看到日志文件被创建了:
# service rsyslog restart

如果您手动创建日志文件/log/haproxy-allbutinfo.log/log/haproxy-info.log请不要忘记将所有者更改为syslog:adm

答案3

在我的 rhel 6.7 上,通过 unix 套接字日志进行记录对我来说不起作用。你可以尝试使用此配置。haproxy(在 81 上工作)将 http 请求转发到 httpd(在 80 上工作)

/etc/haproxy/haproxy.cfg

frontend web_front
    log         127.0.0.1    local6
    option httplog

    bind        *:81
    default_backend web_back

backend web_back
    server      web1 127.0.0.1:80

并且您必须启用 rsyslog udp 模块才能从 haproxy 接收 syslog,简单的配置如下:

/etc/rsyslog.d/haproxy.conf

$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514
local6.* /var/log/haproxy.log

向 81 发出一个 http 请求,你会得到一些这样的日志

# tail -n 1 /var/log/haproxy.log
May 18 13:51:07 localhost haproxy[31617]: 127.0.0.1:38074 [18/May/2016:13:51:06.999] web_front web_back/web1 0/0/0/2/2 404 466 - - ---- 1/1/0/1/0 0/0 "GET /how-are-you HTTP/1.1"

答案4

这可能是由于它在 chroot jail 中运行而导致的。您需要确保 rsyslog 也在 chroot jail 中创建 dgram 套接字(例如 /var/lib/haproxy/dev/log)。将您的日志指令指向 /dev/log 套接字,这样就没问题了。

我花了几个小时试图弄清楚这一点,因为除了记录失败之外,HAproxy 不会告诉你任何错误。

相关内容