この記事 のヒントを使用して、rsyslogdを介してhaproxyロギングを設定しましたが、すべて正常に動作しているようです。ログファイルはログメッセージを取得します。
ただし、haproxyからのすべてのログメッセージは/var/log/syslog
にも表示されます。つまり、サーバーが稼働すると、syslogはhaproxyログメッセージで実行されるため、まったく役に立たなくなります。
これらのメッセージを/var/log/syslog
から除外したいと思います。 rsyslogdのドキュメントを確認した後、ファイル/etc/rsyslog.d/50-default.conf
を次のように変更しようとしました。
*.*;auth,authpriv.none;haproxy.none -/var/log/syslog
;haproxy.none
partを追加しただけです。 rsyslogdを再起動すると、変更を元に戻すまで完全に機能しなくなりました。
何が悪いのですか?
次のようにして、他のログに記録されないようにすることもできます。
local0.* -/var/log/haproxy.log
& ~
& ~
は、上記の行で一致したものを残りのルールに配置しないことを意味します。
& ~
の使用はrsyslogdのv7で廃止されました。代わりに& stop
を使用することをお勧めします。詳細は v7互換性ページ のこのセクションを参照してください。
omrulesetおよびdiscard(〜)アクションは廃止予定
どちらも引き続き機能しますが、より優れた代替手段に置き換えられています。
破棄アクション(チルド文字)は、「stop」RainerScriptディレクティブに置き換えられました。より直感的であると見なされ、パフォーマンスがわずかに向上します。
Omrulesetモジュールは、「call」RainerScriptディレクティブに置き換えられました。呼び出しは、サブルーチンのようにルールセットを実行することを許可し、omrulesetよりもはるかに高いパフォーマンスで実行します。 omrulesetは非同期キューから実行できることに注意してください。これは望ましい効果ではなく、callステートメントではサポートされていません。その効果が必要な場合は、呼び出されたルールセットアクションを非同期で実行するだけでシミュレートできます(これを処理する正しい方法は何ですか)。
非推奨のモジュールを使用すると、警告メッセージが表示されることに注意してください。それらは、構成が非推奨であり、どのステートメントが置換として使用されるかを伝えます。これは操作には影響しません。両方のモジュールは引き続き完全に機能しており、v7のタイムフレームでは削除されません。
したがって、HAProxyの場合は、次のようになります。
$ more /etc/rsyslog.d/haproxy.conf
local2.* /var/log/haproxy.log
& stop
それがどのように機能するかについては、& stop
はrsyslogdに、この時点までに以前に一致したルールに一致した追加のメッセージを破棄するように指示します。このルールが早期に適用されることを保証するために、ファイルの名前を/etc/rsyslog.d/haproxy.conf
から/etc/rsyslog.d/00-haproxy.conf
に変更できます。
わかりました。これは、私の/etc/rsyslog.d/20-haproxy.conf
の外観です。
$ModLoad imudp
$UDPServerRun 514
local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log
50-default.conf
の行を次のように変更しました:
*.*;auth,authpriv,local0,local1.none -/var/log/syslog
そして今、それは私がしたいことをしているようです。
Haproxyロギングのより良い解決策があります。
/dev/log
公式マニュアルによると、ネットワークソケットをリッスンするようにrsyslogを構成する必要があります。
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
ただし、そのために使用できるのはrsyslogソケットのみです。
rsyslog.d/haproxy.conf:
# HAproxy local socket
$AddUnixListenSocket /var/lib/haproxy/dev/log
:programname, contains, "haproxy" /var/log/haproxy.log
& stop
haproxy.cfg:
global
log /dev/log daemon
chroot /var/lib/haproxy
.......
ファイルの順序をいじらないようにしたいので、代わりに。行エントリにlocal0.noneを追加します。構成は次のようになります。
*.info;mail.none;authpriv.none;cron.none;local2.none /var/log/messages
local2.* /var/log/haproxy.log
(CentOS 7でテスト済み)
お役に立てば幸いです。