Goal
- sensuでアプリケーションレイヤーの異常を検知する
- ログのテキストを監視させて、パターンマッチしたらイベントを発生させる
Install Plugin
cd /etc/sensu/plugins
wget "https://raw.githubusercontent.com/sensu/sensu-community-plugins/master/plugins/logging/check-log.rb"
chown sensu:sensu check-log.rb
chmod +x check-log.rb
以下の例はブラックリスト.
500 status codeが見つかったときのみイベントを発生させる.
{
"checks": {
"access-log": {
"command": "/etc/sensu/plugins/check-log.rb -f /var/log/httpd/access.log --pattern ' 500 ' ",
"interval": 60,
"subscribers": [ "production" ],
"handlers": ["default"]
}
}
}
"subscribers": [ "production" ]
とした場合は、監視対象サーバのclient.json
のsubscriptions
もproductionである必要がある.
check-log.rb
コマンドに-f
で監視対象ログファイル名、-qまたは--pattern
で監視対象文言(パターン)を指定する.
その他check-log.rb
コマンドではパターン例外、warn、criticalなどのレベル設定などもできる(check-log.rb参照).
ホワイトリストで監視したい場合は、以下のようにする.
"command": "/etc/sensu/plugins/check-log.rb -f /var/log/httpd/access.log --pattern '.*' -E ' 200 '"
ログキャッシュ用ディレクトリを作成
check-log.rbでは、前回どこまでログを読んだか(何バイト目まで読んだか)をキャッシュする.
このキャッシュの保存場所は/var/cache/check-log以下になっているので、このディレクトリに書き込み権限がない場合は、permissionを変更しておく必要がある.
パーミッションがない場合以下のエラーが出る.
Check failed to run: Permission denied @ dir_s_mkdir - /var/cache/check-log, [\"/usr/local/ruby-2.1.1/lib/ruby/2.1.0/fileutils.rb:250:in `mkdir'\", \"/usr/local/ruby-2.1.1/lib/ruby/2.1.0/fileutils.rb:250:in `fu_mkdir'\", \"/usr/local/ruby-2.1.1/lib/ruby/2.1.0/fileutils.rb:224:in `block (2 levels) in mkdir_p'\", \"/usr/local/ruby-2.1.1/lib/ruby/2.1.0/fileutils.rb:222:in `reverse_each'\", \"/usr/local/ruby-2.1.1/lib/ruby/2.1.0/fileutils.rb:222:in `block in mkdir_p'\", \"/usr/local/ruby-2.1.1/lib/ruby/2.1.0/fileutils.rb:208:in `each'\", \"/usr/local/ruby-2.1.1/lib/ruby/2.1.0/fileutils.rb:208:in `mkdir_p'\", \"/etc/sensu/plugins/check-log.rb:207:in `search_log'\", \"/etc/sensu/plugins/check-log.rb:135:in `block in run'\", \"/etc/sensu/plugins/check-log.rb:129:in `each'\", \"/etc/sensu/plugins/check-log.rb:129:in `run'\", \"/usr/local/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/sensu-plugin-1.1.0/lib/sensu-plugin/cli.rb:56:in `block in <class:CLI>'\"]\n
mkdir /var/cache/check-log
chown sensu:sensu /var/cache/check-log
ログ監視の動作
"interval": 60
に設定した場合は、毎分ログの監視が実行される.
エラーパターンにマッチしたときはイベントが発生する.
前回読まれた箇所は次回スキップされるので、次の実行でエラーパターンにマッチしなければイベントは自然に消える.
イベント通知時にメール送信、slack通知などのhandlerを設定すれば期待通りのログ監視が実現できる.
slack連携
エラー検知したらslackに通知したい場合は以下を参考.
http://qiita.com/metheglin/items/4fb833d070191a547796