QUICKGUARD ホームページ >

Nagios監視アラートをPagerDutyで通知する

2019.08.19

監視アラートを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でインシデントが登録されて、通知されてくるかを確認することになります。