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の勝手がまだよく分からないので何をやるにも時間がかかってしまうなあ。
で、設定が完了する頃には多少マシになるんだろうけど、それからまたしばらく触らなくなって色々忘れてしまい、永遠に初心者のままというパターンになりそうです。