rsyslogd を利用して /var/log/messages に特定のログが出力されないようにフィルタリングしてみた 【RHEL 版】
はじめに
テクニカルサポートの 片方 です。
Red Hat Enterprise Linux 9.x などには、無視してもよいエラーメッセージが /var/log/messages に出力されることあります。
※ 出力例
sh-5.1$ sudo grep "Cannot change IRQ" /var/log/messages
Mar 1 04:33:37 ip-10-0-27-162 irqbalance[663]: Cannot change IRQ 28 affinity: Input/output error
Mar 1 04:38:07 ip-10-0-27-162 irqbalance[663]: Cannot change IRQ 29 affinity: Input/output error
sh-5.1$
このエラーメッセージはシステムの動作に影響を与えない警告メッセージですが、ログの可読性向上のため抑制することができます。
そのため rsyslogd を利用して /var/log/messages に特定のログが出力されないようフィルタリングしてみました。
やってみた
お好みの方法で 対象 EC2 インスタンスへ SSH 接続してください。
- 設定ファイルを作成します。
$ sudo vi /etc/rsyslog.d/irq-filter.conf
- 作成した設定ファイルに記述
if $programname == "irqbalance" and $msg contains "Cannot change IRQ" and $msg contains "affinity" then stop
※ 記述後 :wq で保存してください
- rsyslogサービス再起動
$ sudo systemctl restart rsyslog
これで終了です。非常に簡単ですね。
検証として、複数回 irqbalanceサービスを再起動させて強制的にログを生成します。
$ sudo systemctl restart irqbalance
sh-5.1$ sudo grep "Cannot change IRQ" /var/log/messages
Mar 1 04:33:37 ip-10-0-27-162 irqbalance[663]: Cannot change IRQ 28 affinity: Input/output error
Mar 1 04:38:07 ip-10-0-27-162 irqbalance[663]: Cannot change IRQ 29 affinity: Input/output error
sh-5.1$
新しいメッセージのみがフィルタリングされ、既存のログファイル内の古いメッセージは残ったままとなります。
上記のように追加で出力されていなければ成功です。
まとめ
フィルタリング設定を行う際は、重要なメッセージを誤って除外しないよう十分にご検討ください。
本ブログが誰かの参考になれば幸いです。
参考資料
- In RHEL 9.3 or later, "irqbalance: Cannot change IRQ 76 affinity: Input/output error " - Red Hat Customer Portal
- rsyslog を使用してログをフィルタリングする方法 - Red Hat Customer Portal
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。