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プラグインcheck-log.rbをログローテーション対応にする設定