Sensuでアラートメールを飛ばす
公式ドキュメントのAdding a Sensu handlerのページの「A real world example」の項を見てその通りに行えばOK。
ハンドラーの準備
必要なファイルは以下の三つ。
- /etc/sensu/handlers/mailer.rb
- /etc/sensu/conf.d/mailer.json
- /etc/sensu/conf.d/handler_mailer.json
/etc/sensu/conf.d/handler_mailer.json は /etc/sensu/conf.d/handlers/mailer.json でも可。sensu-chefのsensu_handlerで作ると後者になる。
/etc/sensu/handlers/mailer.rb
Githubのsensu-community-pluginsの中にあるmailer.rbを使う。
/etc/sensu/conf.d/mailer.json
同じくGithubのsensu-community-pluginsからmailer.jsonを取ってきて、こちらはメールアドレス等を編集して使う。
smtp_address, smtp_portはローカルの25番ポートから送るなら不要。
/etc/sensu/conf.d/hander_mailer.json
公式ドキュメントの通りの内容で作成する。
{ "handlers": { "mailer": { "type": "pipe", "command": "/etc/sensu/handlers/mailer.rb" } } }
チェックにハンドラーを設定する
/etc/sensu/conf.d/checks/cron_check.json
crondの動作をチェックするサンプルのhandersにmailerを追加してみる。
{ "checks": { "cron_check": { "command": "check-procs.rb -p crond -C 1 ", "subscribers": ["all"], "handlers": ["default", "mailer"], "interval": 5 } } }
ここまでやってsensu-serverを再起動すればcrondを停止したり起動したりすることでアラートメールが飛ぶはず。
ハマりポイント
mailer.rbのパーミッション
実行可になっていないと動かない。
gem ‘mail’
mailと言うgemが入っていないと動かない。
以下のコマンドで確認。
gem list
あるいはembeddedのRubyを使っている場合は
/opt/sensu/embedded/bin/gem list
でチェック。なければインストールする。
smtp_enable_starttls_auto
mailer.rbはデフォルトでTLSを使おうとするので、不要の場合はfalseを指定する。
Chefで
適当にクックブックを作り、files/default/以下にGithubから取ってきたmailer.rbを設置。
レシピは次の通り。sensu-chefを使う前提。
sensu_gem "mail" mailer_rb_path = "#{node.sensu.directory}/handlers/mailer.rb" cookbook_file mailer_rb_path do source "mailer.rb" owner "sensu" group "sensu" mode "0750" end sensu_json_file "#{node.sensu.directory}/conf.d/mailer.json" do owner "sensu" group "sensu" mode "0640" content({ mailer: { mail_from: "sensu@example.com", mail_to: "member@example.com", smtp_enable_starttls_auto: "false" } }) end sensu_handler "mailer" do type "pipe" command mailer_rb_path end
Sensuの勝手がまだよく分からないので何をやるにも時間がかかってしまうなあ。
で、設定が完了する頃には多少マシになるんだろうけど、それからまたしばらく触らなくなって色々忘れてしまい、永遠に初心者のままというパターンになりそうです。