Haproxy不记录请求吗?


11

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

当我在启动时收到那些“启动”消息时,它无疑是日志记录,但是根本没有HTTP请求记录日志。我的配置有什么问题?

haproxy.cfg

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
您最终解决了这个问题吗?
周俊杰

Answers:


11

如果您确实希望记录每个请求,则必须在前端指定日志。但是通常这对于服务器来说是过大的杀伤力,您的磁盘很快就会装满。

frontend webfront
  log /dev/log local0 debug

嗯谢谢 我会尽快尝试。问题是,我需要解决与Discourse实例的连接问题,因此它只是临时的。似乎无论如何尝试我都无法代理。(serverfault.com/questions/645031/...
银Quettier

2
我尝试添加它,但是它不会记录任何其他信息。也许rsyslog配置不正确?有办法说吗?
Silver Quettier 2014年

对我来说,它确实有效。
Dima Medvedev

ubuntu 14.0.4中的rsyslog似乎已配置,尽管它没有记录到/var/log/haproxy.log,默认情况下,我的安装日志是/ var / log / syslog。
李李2015年

2
什么是/dev/log
Miranda

7

在我的rhel 6.7上,无法通过unix套接字日志进行记录。您可以尝试使用此conf。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接收一个简单的conf这样的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"

5

这可能是因为它在chroot监狱中运行。您需要确保rsyslog还在chroot监狱内创建dgram套接字(例如/ var / lib / haproxy / dev / log)。将您的log指令指向/ dev / log套接字,您应该会很好。

我花了几个小时试图解决这个问题,因为HAproxy不会告诉您任何错误,除了无法记录日志。


3

该链接完美地说明了这一点。

如果查看/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在UDP端口514上侦听所有IP地址。(可选)您可以通过添加以下内容来限制为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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.