Nagios監視アラートをPagerDutyで通知する
監視アラートをPagerDutyで通知させる
以前に障害メールをPagerDutyから通知させる方法についてまとめましたが、監視システムでのアラートの場合にはメールを受信する方法以外に監視サーバから直接PagerDutyにメッセージを送信して、PagerDutyで通知することができます。
この方法を行うと、監視アラートが復旧した時にはPagerDuty側でアラート発生時に起票されたインシデントの中から、どのインシデントが復旧したのかを確認して、該当のインシデントを自動的に”Resolved”状態にしてくれるようになります。
これにより、メール受信でPagerDutyから通知の際に行ってた障害復旧時の”Resolved”状態への変更作業が省略することができ、またアラートの発生と復旧が1つのインシデントで紐づけられるので、インシデント管理が容易になります。
監視アラートを直接PagerDutyに通知されるには以下の作業が必要になります。
■ 監視サーバにPagerDutyエージェントをインストール
■ PagerDutyで監視サーバの通知設定を追加
■ 監視サーバの通知設定にPagerDutyを追加
今回は監視サーバを下記環境のNagiosサーバとした場合の設定方法についてまとめておこうと思います。
◇PagerDutyエージェントのインストール要件
・CentOS 6 以降
・Ubuntu 12.04、14.04、および16.04 以降
◇今回確認したNagios監視サーバの環境
・OS:Amazon Linux AMI 2018.03
・Nagios:3.5.1
Nagios監視サーバにPagerDutyエージェントをインストール
(1) Nagios監視サーバにPagerDutyリポジトリを追加する
# sh -c 'cat >/etc/yum.repos.d/pdagent.repo <<EOF
[pdagent]
name=PDAgent
baseurl=https://packages.pagerduty.com/pdagent/rpm
enabled=1
gpgcheck=1
gpgkey=https://packages.pagerduty.com/GPG-KEY-RPM-pagerduty
EOF'
(2) yumコマンドでパッケージをインストールする
# yum install pdagent pdagent-integrations
PagerDutyの通知設定にNagiosを追加
(1) Service新規登録画面の[Integration Settings]項目の[Integration Type]で「Nagios」を選択する
(2) 追加したServiceの[Integrations]画面で[Integration Key]を確認する
Nagios監視サーバの通知設定にPagerDutyを追加
(1) GitHubからpagerduty_nagios.cfgをダウンロードする
# wget https://raw.githubusercontent.com/PagerDuty/pdagent-integrations/master/pagerduty_nagios.cfg
(2) pagerduty_nagios.cfgを開き、contact設定の[pager]項目にPagerDutyで先ほど確認した[Integration Key]の値を入力する
# vi pagerduty_nagios.cfg
define contact {
contact_name pagerduty
alias PagerDuty Pseudo-Contact
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-pagerduty
host_notification_commands notify-host-by-pagerduty
pager YOUR-SERVICE-KEY-HERE ←←←←←←←ここに[Integration Key]の値を入力する
}
define command {
command_name notify-service-by-pagerduty
command_line /usr/share/pdagent-integrations/bin/pd-nagios -n service -k $CONTACTPAGER$ -t "$NOTIFICATIONTYPE$" -f SERVICEDESC="$SERVICEDESC$" -f SERVICESTATE="$SERVICESTATE$" -f HOSTNAME="$HOSTNAME$" -f HOSTDISPLAYNAME="$HOSTDISPLAYNAME$" -f SERVICEDISPLAYNAME="$SERVICEDISPLAYNAME$" -f SERVICEPROBLEMID="$SERVICEPROBLEMID$" -f SERVICEOUTPUT="$SERVICEOUTPUT$"
}
define command {
command_name notify-host-by-pagerduty
command_line /usr/share/pdagent-integrations/bin/pd-nagios -n host -k $CONTACTPAGER$ -t "$NOTIFICATIONTYPE$" -f HOSTNAME="$HOSTNAME$" -f HOSTSTATE="$HOSTSTATE$" -f HOSTDISPLAYNAME="$HOSTDISPLAYNAME$" -f HOSTPROBLEMID="$HOSTPROBLEMID$"
}
(3) pagerduty_nagios.cfgをNagiosの設定フォルダに移動する
# mv pagerduty_nagios.cfg /etc/nagios
(4) Nagiosの通知グループ設定の[members]にPagerDutyを追加する
define contactgroup {
contactgroup_name qg-contact
members qg-contact, pagerduty ←←←←ここに「Pagerduty」を追加
}
上記の作業でPagerDutyへアラート内容が通知されるようになるので、あとは実際にアラートを発生させて、PagerDutyでインシデントが登録されて、通知されてくるかを確認することになります。