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 }