haproxyログトラブルシューティング

概要

こんにちは、テクニカルサポートの牛山です。

前回、実際の負荷分散から、haproxyをログ出力するところまで実施しました。

今回は、haproxy.logとmessagesのログに同じログ内容が出力される事象の解消とrsyslogによるログフィルターを用いて特定文言をhaproxy.logに出力へ吐き出させないようにします。

発生事象

前回の記事で構築したhaproxyサーバにアクセスし、tailコマンドで、messagesおよびhaproxy.logを確認し、haproxyのグローバルIPに対してWEBブラウザからアクセスすると同じログが二重にでていることを確認できます。

また、 Connect from から始まるログが大量に出力されログ肥大化するという事象を見たことがありますのでこちらにマッチするログはrsyslogの機能を使って破棄するようにします。

[root@haproxy ~]# tail -f /var/log/messages /var/log/haproxy.log

==> /var/log/messages <==
Jul 14 01:38:39 localhost haproxy[995]: Connect from ***.***.***.***:56146 to 10.0.0.56:80 (http_web/HTTP)

==> /var/log/haproxy.log <==
Jul 14 01:38:39 localhost haproxy[995]: Connect from ***.***.***.***:56146 to 10.0.0.56:80 (http_web/HTTP)

対処

cp -p /etc/rsyslog.conf /etc/rsyslog.conf_$(date +"%Y%m%d")
 ⇒rsyslogの設定ファイルを弄ることによって対処可能なのでまずは、設定ファイルのバックアップを実施します。

重複ログ破棄設定

rsyslog.confに下記のような、設定が記述されているかと存じます。

/var/log/messages 行にあります、 *.info;mail.none;authpriv.none;cron.none の箇所に続けて記載する形で、 local2.none をセミコロン区切りで設定します。

noneの部分は、「ログメッセージ出力しない設定」となり、 local2 を指定してログ出力している、 haproxy ログを /var/log/messages へ吐かないという意味になります。

[root@haproxy ~]# grep -E "\/var\/log\/messages|haproxy\.log" /etc/rsyslog.conf

*.info;mail.none;authpriv.none;cron.none                /var/log/messages
local2.*                                                /var/log/haproxy.log

特定文言破棄設定

rsyslogの設定ファイルに対して以下のように、local2を持つメッセージフィルターで、メッセージの内容に Connect from が含まれている場合、破棄する設定を追記します。

if $syslogfacility-text == 'local2' and $msg contains 'Connect from' then stop

※大文字と小文字を区別しない比較を行う場合は、"含む" の代わりに "contains_i" を使用します。

rsyslog 設定ファイルの diff 結果は以下の通りとなります。

[root@haproxy ~]# diff -u /etc/rsyslog.conf_$(date +"%Y%m%d") /etc/rsyslog.conf

--- /etc/rsyslog.conf_20220714  2022-07-08 21:38:16.743247875 +0900
+++ /etc/rsyslog.conf   2022-07-14 03:21:37.792580229 +0900
@@ -43,7 +43,7 @@

 # Log anything (except mail) of level info or higher.
 # Don't log private authentication messages!
-*.info;mail.none;authpriv.none;cron.none                /var/log/messages
+*.info;mail.none;authpriv.none;cron.none;local2.none                /var/log/messages

 # The authpriv file has restricted access.
 authpriv.*                                              /var/log/secure
@@ -64,6 +64,7 @@
 # Save boot messages also to boot.log
 local7.*                                                /var/log/boot.log

+if $syslogfacility-text == 'local2' and $msg contains 'Connect from' then stop
 local2.*                                                /var/log/haproxy.log

 # ### sample forwarding rule ###

[root@haproxy ~]# systemctl restart rsyslog
 →最後に rsyslog サービスを再起動し、設定を適用します。

[root@haproxy ~]# systemctl status rsyslog
 →サービスステータスでエラー等が出ていないことを確認します。

事後確認

http://{haproxyのグローバルIP}/ にアクセスし、 messages ログに重複ログが出力されないことを確認し、 haproxy.log Connect from から始まるログが出力されないことを確認できれば問題ありません。

※私の環境では、 Connect from から始まるログしか設定前より出力されてただけでしたので、今回の設定により、 haproxy.log は何も出力がでてこないものとなります。

まとめ

いかがでしたでしょうか、結構、奥深く、カスタマイズ性があり勉強になりました。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA