NagiosからのアラートをIRCにも通知してみた

Nagiosのアラート通知をメールだけじゃなくてIRCにも通知したいなぁと思ったのでやってみました。

IRC bot

今までだと Plagger 付属の plagger-ircbot を走らせて、適宜 POE の IKC で通知命令を送っていたんですが、ちょっと CPAN を探してみたら、

というのがありました。

karmaもつけられていいなーと思ってこれを使おうと思ったんですが、POE を使っているものの IKC で連携する機能がありません。

そこでこのモジュールを継承して、Bot::IKCBot::Pluggable というのを作りました。

BasicBotとの違いはこんなところです。

  • IKC を使った外部プロセスとの通信機能を実装。
  • privmsg に加えて notice な発言もできるようにした。
  • ボットのする返信発言は notice を使うようにした。

継承しているので、Bot::BasicBot::Pluggable::Module::*やStore::*はそのまま流用できます。

examples/ の下にサンプルスクリプトがあるので興味ある方は見てみてください。


あと、NagIRCBot というのを見つけたんですが、C++で書かれていてカスタマイズがめんどくさそうだったんで今回は使いませんでした。

Nagiosの設定

稼働中の Nagios に、こんな感じで設定を追加しました:

ボットに通知指示を送る command の定義
define command {
  command_name  notify-host-by-irc
  command_line  /usr/irori/bin/notify-alert-to-irc.pl '#taihendaaa' "$NOTIFICATIONTYPE$ Host: $HOSTNAME$ Address: $HOSTADDRESS$ State: $HOSTSTATE$" "Date/Time: $SHORTDATETIME$" "- Info: $HOSTOUTPUT$"
}
define command {
  command_name  notify-service-by-irc
  command_line  /usr/irori/bin/notify-alert-to-irc.pl '#taihendaaa' "$NOTIFICATIONTYPE$ Service: $SERVICEDESC$ Host: $HOSTALIAS$ Address: $HOSTADDRESS$ State: $SERVICESTATE$" "Date/Time: $SHORTDATETIME$" "- Additional Info: $SERVICEOUTPUT$"
}
その command を使った contact の定義
define contact {
  contact_name  irc
  use           generic-contact
  email         dummy@example.com
  service_notification_commands  notify-service-by-irc
  host_notification_commands     notify-host-by-irc
}
既存の contactgroup の members にその contact ("irc") を追加

※members に入っている sc-emerg とかいう contact はメールを送るための contact です。

define contactgroup {
  contactgroup_name  sc-emerg
  members            sc-emerg, irc
}
define contactgroup {
  contactgroup_name  sc-warn
  members            sc-warn, irc
}
define contactgroup {
  contactgroup_name  sc-info
  members            sc-info, irc
}

こんな感じに通知されます

でも、アラート通知は来ないにこしたことはないですね^^


あとは Web サーバの 500 エラーとか MySQL の slow ログをもりもり IRC に出すと、IRC厨にはたまりませんね。