Sensu導入と初期設定についての続きのエントリーになります。
pluginの書き方
http://sensuapp.org/docs/0.12/checks
http://sensuapp.org/docs/0.12/adding_a_check
上記ドキュメントを参考にして頂くとわかる通り
- status code が
0
であればOK
- status code が
1
であればWARNING
- status code が
2
であればCRITICAL
- status code が
3
であればUNKNOWN
という方法で監視を行います。
コミュニティプラグインを確認すると、そのほとんどが
require 'sensu-plugin/check/cli'
を呼び出していることがわかります。
https://github.com/sensu/sensu-plugin
check用のメソッド、metrics用のメソッドを
それぞれ利用することが可能になります。
まだ私はpluginを書いたことがないので、また書く機会があれば
その時に改めて詳細を書きたいと思います。
気を付けなければならないこと
導入以前は、Sensuはアラートとメトリクスのデータを
同じデータを利用して監視を行うことができると考えていたのですが
これは誤りで、
- checkはcheck用のプラグイン
- metricsはmetircs用のプラグイン
と分かれています。なかなかZABBIXのように万能にはいかないようです。
checks
|
- “check_cpu”, “check_cpu_nervous”
設定内容の名前です。
Sensuは設定内容のjsonがdeep_mergeされるので、ここはユニークな値にしてください。
よくあるミスとして、利用するプラグインは同じで
上記のように設定内容が微妙に違うという場合、元のファイルをコピーし
名前を変更するのを忘れて上書きされてしまい
設定ファイルを作成したのに上手く認識されない。ということがよくあります。
- “commnand”
実行するコマンドです。status codeとSTDOUT,STDERRのどちらかが返ってくれば、
Rubyでなくとも、シェルスクリプトやGo、pythonなど何を利用しても問題ありません。
nagios pluginと設定を合わせている為、nagiosのpluginを利用することが可能です。
- “interval”
コマンドを実行する間隔です。
- “occurrences”
監視通知の閾値です。例えばoccurrences
が3
に設定されていた場合
3回継続してアラートの条件を満たした場合にアラート通知する。
という条件になります。デフォルトは1
で、1回でも
アラートの条件を満たしたら通知が行われます。
- “subscribers”
ここでホストとアラートの紐付けを行います。
client側で設定されているsubscriptions
を見て
subscribers
と同じであれば、その監視を行う条件を満たし
監視コマンドが実行されるようになります。
- “handlers”
アラートの条件を満たしていた場合の通知先の設定です。
上記設定例でいうと、HipChatとmailを利用します。
通知先の設定内容はSensu server側にて行います。
- /etc/sensu/conf.d/handlers/hipchat.json
|
- /etc/sensu/conf.d/handlers/mailer.json
|
上記のような設定を行います。
metircs
checkとの違いは"type": "metric"
の有無の違いのみ。
"type": "metric"
が存在するとhandle_eventメソッドを実行します。
- /etc/sensu/conf.d/metrics/metrics-cpu.json
|
- “command”
基本的にmetircs系のプラグインはschemeの設定が可能になっている。
これは大変便利で、上記設定例でいうと
stats.hostname.cpu.cpu_pcnt.*
のように
スキーマを定義することが可能になります。
- /etc/sensu/conf.d/handlers/graphite.json
|
上記graphiteの設定は、pipe、tcpやudpなどを利用し
handlerへ渡すことが可能なので、それを利用した設定内容になります。
- “mutator”: “only_check_output”
only_check_output.rb
を見る限り、
check
の結果を0
で返す(checkを行わない)オプションのようです。
client
- /etc/sensu/conf.d/client.json
/etc/sensu/conf.d/ディレクトリ配下であれば
clientの設定のファイル名に決まりはありません。
|
- “name”
Sensu clientの名前です。
- “address”
Sensu clientのアドレスです。
IPアドレスでもDNS名でも何でも良いです。誤っていたからといって
Sensu serverと接続できなくなるということはありません。
- “subscriptions”
Sensu server側で行ったcheck、metricsに対する関連付けです。
関連付けされる対象はsubscribers
です。
五月雨式ではありますが
監視をする上での細かい設定内容の解説でした。
ドキュメントを読み進める上でのお役に立てれば幸いです。