目次
概要
こんにちは、テクニカルサポートの牛山です。
前回、実際の負荷分散から、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
は何も出力がでてこないものとなります。
まとめ
いかがでしたでしょうか、結構、奥深く、カスタマイズ性があり勉強になりました。
プロフィール
AWSの設計・構築をメインにおこなっています。
運用・保守をおこなう部署におりましたが、最近、アーキテクト課に異動しました。
日々精進しております。
LINK
クラウドベリージャム:プロフィールページ