そのため、ロギングが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.
私はこれらの再起動の間にウェブサーバーのページのいくつかを訪れ、いくつかの404エラーを引き起こしました。何も表示されないのはなぜですか?
/ etc/rsyslog.d/49-haproxy.conf:
local0.* -/var/log/haproxy_0.log
if ($programname == 'haproxy') then -/var/log/haproxy/haproxy.log
& ~
すべてのリクエストをログに記録したい場合は、フロントエンドでログを指定する必要があります。しかし、通常これはサーバーにとって過剰であり、ディスクはすぐにいっぱいになります。
frontend webfront
log /dev/log local0 debug
私の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"
これは、chroot刑務所で実行することで発生する可能性があります。 rsyslogがchroot jail内にdgramソケットも作成していることを確認する必要があります(/ var/lib/haproxy/dev/logなど)。ログディレクティブが/ dev/logソケットを指すようにすれば、問題ありません。
これを理解しようと数時間を費やしました。HAproxyは、ログが機能しないこと以外に何も問題がないことを通知しないからです。
このリンク は完全に説明しています。
/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
に変更することを忘れないでください。