NagiosからのアラートをSlackチャンネルに通知する方法、自分用まとめ。
・前提
Slackへの登録は済ませておく。下記サイトを参照。
【登録編入門】slack使い方【世界一丁寧な解説初心者用】
1.SlackのNagiosサービスを有効にする
https://<グループID>.slack.com/services/new/nagios を開く。
ページ下部の [Add Nagios integration] をクリック。

「New integration added!」 と表示されればOK。
設定のためのチュートリアルが表示されるので、基本的にそのまま従う。
下のほうに Token があるのでメモしておく。

Slack に nagios チャンネルを作成しておく。
2.Slack通知スクリプトを用意する
Perlモジュールをインストール:
# yum install perl-libwww-perl perl-Crypt-SSLeay
公式スクリプトを取得&設置:
# wget https://raw.github.com/tinyspeck/services-examples/master/nagios.pl --no-check-certificate
# cp nagios.pl /usr/local/bin/slack_nagios.pl
# chmod 755 /usr/local/bin/slack_nagios.pl
slack_nagios.pl を編集して、グループIDとトークンを設定:
# vi /usr/local/bin/slack_nagios.pl
---
my $opt_domain = "<グループID>.slack.com"; # Your team's domain
my $opt_token = "<トークン>"; # The token from your Nagios services page
---
ここまで出来たらテスト投稿をしてみる。
# /usr/local/bin/slack_nagios.pl \
-field slack_channel=#nagios \
-field HOSTALIAS="HOSTNAME" \
-field SERVICEDESC="SERVICEDESC" \
-field SERVICESTATE="SERVICESTATE" \
-field SERVICEOUTPUT="SERVICEOUTPUT" \
-field NOTIFICATIONTYPE="NOTIFICATIONTYPE"
Slack 側に通知が飛べばOK。

3.Nagiosの設定ファイルを編集する
通知先のメンバーに slack を追加。
/usr/local/nagios/etc/services.cfg:
# vi /usr/local/nagios/etc/services.cfg
---
define contact {
contact_name slack
alias Slack
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,r
service_notification_commands notify-service-by-slack
host_notification_commands notify-host-by-slack
}
define contactgroup {
contactgroup_name admins
alias Nagios Administrators
members root, slack
}
---
通知コマンドを追加。slack_channel=<チャンネル名> を便宜設定する。
/usr/local/nagios/etc/commands.cfg:
# vi /usr/local/nagios/etc/commands.cfg
---
define command {
command_name notify-service-by-slack
command_line /usr/local/bin/slack_nagios.pl -field slack_channel=#nagios -field HOSTALIAS="$HOSTNAME$" -field SERVICEDESC="$SERVICEDESC$" -field SERVICESTATE="$SERVICESTATE$" -field SERVICEOUTPUT="$SERVICEOUTPUT$" -field NOTIFICATIONTYPE="$NOTIFICATIONTYPE$"
}
define command {
command_name notify-host-by-slack
command_line /usr/local/bin/slack_nagios.pl -field slack_channel=#nagios -field HOSTALIAS="$HOSTNAME$" -field HOSTSTATE="$HOSTSTATE$" -field HOSTOUTPUT="$HOSTOUTPUT$" -field NOTIFICATIONTYPE="$NOTIFICATIONTYPE$"
}
---
Nagiosの設定チェック:
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
問題なければNagiosをreload:
# /etc/init.d/nagios reload
これで、NagiosのアラートがSlackチャンネルに通知されるようになる。
