Sensuに通知処理を追加する
通知としては、メールとhipchatを使おうと思う。
プラグインがこちらで 公開されているのでダウンロードし、 files/default/handlers 以下に プラグインを配置する。
プラグインには、#!/usr/bin/env ruby
と記述されているが、
sensuインストール時に一緒にインストールされるrubyで実行するため、
一行目の #!/usr/bin/env ruby
を
#!/opt/sensu/embedded/bin/ruby
に変更する。
次に、recipe/server.rbに
remote_directory "/etc/sensu/handlers/" do source "handlers" owner "sensu" group "sensu" mode "0755" files_mode "0755" end
を記述し、以後通知のプラグインを追加する際は、このディレクトリー以下に入れるようにする。
メールによる通知
attributes/server.rbにパラメータを追加する
default['mailer']['from'] = 'sensu@hoge.com' default['mailer']['to'] = 'hoge@hoge.com' default['mailer']['smtp_enable_starttls_auto'] = 'false' default['mailer']['smtp_address'] = 'smtp.hoge.com' default['mailer']['smtp_port'] = '25' default['mailer']['smtp_domain'] = 'hoge.com' default['mailer']['admin_gui'] = "http://xxxxxxxx.hoge.com"
TLSを使用しない場合は、smtp_enable_starttls_autoは falseでOK。 admin_guiは管理画面のURLを記述する。(メールの本文に表示される)
次にメール設定を行う処理をrecipes/server.rb
に以下を追記する。
gemも必要だったので、併せてインストールするようにした。
sensu_handler "mailer" do type "pipe" command "mailer.rb" end execute 'install gem mail' do command "/opt/sensu/embedded/bin/gem install mail -v 2.5.4" end mailer = node['mailer'] sensu_json_file "#{node.sensu.directory}/conf.d/mailer.json" do owner "sensu" group "sensu" mode "0640" content({ mailer: { mail_from: mailer['from'], mail_to: mailer['to'], smtp_enable_starttls_auto: mailer['smtp_enable_starttls_auto'], smtp_address: mailer['smtp_address'], smtp_port: mailer['smtp_port'], smtp_domain: mailer['smtp_domain'], admin_gui: mailer['admin_gui'] } }) end
hipchatによる通知
defaults/hipchat.rb
にAPIキーと通知するRoomを指定する。
default['monitor']['hipchat']['apikey'] = ENV['HIPCHAT_API_KEY'] default['monitor']['hipchat']['room'] = 'sensu room'
hipchatのAPIキーをgitで管理するのは微妙だと思ったので、 あらかじめ環境変数に設定し、そこから取得するようにした。
ただ、knifeを実行する際に、sudo のオプションをつけないと、
環境変数が引き継げないので、そこは注意する。
(ただこのやり方だと、オプションを付け忘れた場合にブランクで上書きされるので、
ちゃんとするなら、consulなどを使った方がよいのかも?)
次にメールと同様に、hipchatを行う処理をrecipes/server.rb
に以下を追記する。
execute 'install gem hipchat' do command "/opt/sensu/embedded/bin/gem install hipchat" end sensu_handler "hipchat" do type "pipe" command "hipchat.rb" severities ["ok", "critical"] end sensu_snippet 'hipchat' do content( :apikey => node['monitor']['hipchat']['apikey'], :room => node['monitor']['hipchat']['room'] ) end