LoginSignup
14
13

More than 5 years have passed since last update.

sensuでログの監視する

Posted at

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が見つかったときのみイベントを発生させる.

/etc/sensu/conf.d/check_log.json
{
  "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.jsonsubscriptionsも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

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13