Sensuプラグインのcheck-log.rbを使ってログローテーションするログに対応する方法を単一ログの場合と比較して示す。
このプラグイン、監視対象となるログファイル群に圧縮ファイルが含まれている場合、設定ファイルで除外設定しても正常に動作しない。
圧縮されるということはすでに古くなって監視対象から外してもいいと割り切って、ここではプラグインを直接修正して圧縮ファイルを対象外とする。
まずプラグインを一部修正する。
/etc/sensu/plugins/check-log.rb
: 165 file_list.each do |log_file| 166 next if log_file =~ /\.gz$/ <--- 追加(対象ファイルから.gzファイルを除外) 167 begin 168 open_log log_file 169 rescue => e :
続いて設定ファイルの記述内容を示す。関連するオプション以外の説明については割愛する。
/etc/sensu/conf.d/checks/check_log_app.json
<単一のログの場合>
対象ログを-fで指定
{ "checks": { "check_log_app": { "command": "check-log.rb -f /var/log/app.log -c 1 -q '^E' -r", "handlers": [ "slack" ], "standalone": true, "interval": 300, "occurrences": 1, "refresh": 60 } } }
<ログローテーションするログの場合>
対象ログを-Fで指定し、ログローテション時のプレフィックスを-lで指定(正規表現可、ただしうまく動作しない表現あり)
{ "checks": { "check_log_app": { "command": "check-log.rb -F /var/log/app.log -l '-*' -c 1 -q '^E' -r", "handlers": [ "slack" ], "standalone": true, "interval": 300, "occurrences": 1, "refresh": 60 } } }
この指定により、以下のようにローテーションされるタイプのログであっても各ファイルの内容が正しく監視される。
また、プラグインを修正しているので圧縮ファイルは対象外になる。
/var/log/app.log /var/log/app.log-20171205.gz /var/log/app.log-20171206.gz /var/log/app.log-20171207.gz /var/log/app.log-20171208.gz /var/log/app.log-20171209
参考サイト
- Sensuで始めるクラウド時代のシステム監視 (@IT)
- Sensu技術情報 (Qiita)