Haproxyはリクエストをログに記録しませんか?


11

そこで、ロギングがrsyslogを通過し、今のところすべてが1つのファイルにダンプされるように、Haproxyを構成しました。

起動時にこれらの「開始」メッセージが表示されるため、これは明確にログを記録しますが、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
この問題を解決したのですか
Terence Chow

回答:


11

すべてのリクエストをログに記録したい場合は、フロントエンドでログを指定する必要があります。しかし、通常、これはサーバーにとって過剰であり、ディスクはすぐにいっぱいになります。

frontend webfront
  log /dev/log local0 debug

ああ、ありがとう。私はこれをできるだけ早く試します。事は、私はDiscourseインスタンスへの接続の問題をトラブルシューティングする必要があるため、一時的なものに過ぎないからです。私が何をしようとしても私はそれを代理することができないようです。(serverfault.com/questions/645031/...
シルバーQuettier

2
これを追加しようとしましたが、余分なログは記録されません。おそらくrsyslog正しく構成されていませんか?伝える方法はありますか?
シルバークエッティエ2014年

私にとってはうまくいきました。
Dima Medvedev

ubuntu 14.0.4のrsyslogは構成されているようですが、/ var / log / haproxy.logには記録されません。デフォルトでは、インストールログは/ var / log / syslogに記録されます。
lee 2015年

2
なに/dev/log
ミランダ

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

そして、次のような単純なconfからhaproxyからsyslogを受信するには、rsyslog udpモジュールを有効にする必要があります。

/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 jail内にdgramソケットも作成していることを確認する必要があります(例:/ var / lib / haproxy / dev / 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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.