oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

#fluentd やっつけのfluentd監視用Nagiosプラグインを書いた


まあ、そのまんまです。fluentdの死活監視を考えた時に

  • ポートチェック
  • プロセスチェック

等がありますが、せっかくなので監視ログが一定時間以内に流れてくるかどうか
という監視も入れてみようと考えました。


これはプロセスの正常性と合わせて、fluentd側が問題無いのにtailしているログの
問題で正常に動いていないケースもNagiosで検知する為です。


で、fluentdを稼働させるサーバはWebサーバなので、元々Nagiosが監視用のGETリクエストを
送出しているので、それをログで戻して貰って判定しようというのが大雑把な流れ。


こんな感じ。

  1. ホスト側fluentdは程よいレベルでNagiosへ監視用ログを飛ばす
  2. Nagios側fluentdで監視用ログを受信する
  3. 設定した時間毎にプラグインを実行する
  4. 最新のログをチェックしていって、該当文字列が閾値時間以内に出現したらOK
  5. 閾値超えていたらwarningやcriticalと判断

という感じ。


で、中身はNagios側でもfluentdを動かすのでrubyで書いてみた。
https://github.com/oranie/fluentd-tools/blob/master/fluentd-tools/check_fluentd.rb
rubyで書いたとか言ってますがLinuxコマンドも使っているので、まあ残念な感じです。


一個だけまだ迷っている処理があるんですが、
・最後までログを読んでも該当文字列が無い場合もcritical
という処理にしていますが、ログのスイッチとかが入ると監視ログが流れてくる前に
監視プラグインの実行が走り、誤判定されると思います。
ただ、これはNagios側の死活判定閾値とかラッパーしたシェルの方でリトライ入れるとか
受信するfluentdでログを頻繁にスイッチさせないとかで、まあ良いかなと。


凄まじくRuby力低いので、プークスクスした人は是非直して下さい><