DOCS
インテグレーションガイド / Nagios XI
本記事は米国PagerDuty社のサイトで公開されているインテグレーションガイドをそのまま日本語に翻訳したものです。 日本語環境での動作を保証するわけではありません。 原文はこちらを参照してください。
Nagios XIは、Nagios Coreソフトウェアの機能を拡張し、重要なITシステムの詳細なホストとサービスの監視を提供します。
以下のガイドでは、簡単にインストールできるエージェントを使用して、Nagios XIインストールとPagerDutyをインテグレートする方法について説明します。 インストールを完了するには、 root
としてログインする必要があります。 インテグレーションを完成するに問題がある場合、サポートチームまでお問い合わせください。
注意: CentOS 5でNagiosを実行している場合、 Nagios XIのPerlベースインテグレーションをご使用ください。
PagerDutyでの設定
-
ConfigurationメニューからServicesを選択します。
-
Servicesページで新しいサービスを作成する場合はServiceページで**+Add New Serviceをクリックします。既存のサービスに追加する場合は、サービスの名前をクリックします。その後Integrations** タブをクリックし、+New Integrationボタンをクリックします。
-
Integration Typeメニューから追加したいアプリケーションを選択し、Integration Nameを入力します。新たにサービスを作成する場合は、General Settingsで、サービスのNameを入力します。次に、Incident Settingsで、新しいサービスのEscalation Policy (エスカレーションポリシー)、Notification Urgency(通知の緊急度)、Incident Behavior<(インシデントの動作)を指定します。
-
Add ServiceまたはAdd Integrationボタンをクリックして、インテグレーションを保存します。するとサービスのIntegrationsページにリダイレクトされます。
-
新しいインテグレーションのIntegration Keyをコピーします。
Nagios XIサーバでの設定
- PagerDutyエージェントをインストールします。 エージェントはNagios XIからイベントを受信し、キューを使用してPagerDutyに送信して、問題のトラブルシューティングに役立つログを提供します。それから、接続に失敗した場合(Nagios XIサーバが一時的に接続を失った場合)にアラートを自動的に再試行します。 Note: エージェントはCentOS 5以降では動作しません。CentOS 5に含まれているバージョンよりも新しいバージョンのPythonが必要です。古いオペレーティングシステムのためには、Nagios XIのPerlベースインテグレーションを使用してください。
- Nagios XI Webインターフェイスに
nagiosadmin
としてログインし、 Configureメニューに移動してCore Config Managerを選択します。 左メニューのCommandsを クリックし、Add Newをクリックします。 - Command Name 、 Line 、 Typeを次のように設定し、 Saveをクリックします 。
- 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 SERVICEOUTPUT="$SERVICEOUTPUT$"
- Command Type:
misc command
- Command Name:
- Add Newをクリックして別のコマンドを追加します。
- Command Name 、 Line 、 Typeを次のように設定し、 Saveをクリックします。
- 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$"
- Command Type:
misc command
- Command Name:
- 左メニューの Contactsをクリックし、Add New をクリックします。
- Alert Settings タブに移動して、次のホストオプションを設定し、Manage Host Notification Commandsをクリックします。
- Host Notifications Enabled: オン
- Host Notifications Timeperiod: 24×7
- Host Notification options: d、r
notify-host-by-pagerduty
コマンドを選択して、Add Selectedをクリックしてください。notify-host-by-pagerduty
がAssigned列に移動していることを確認してから、Closeをクリックしま す 。- Alert Settingsタブに戻って、次のサービスオプションを設定し、Manage Service Notification Commandsをクリックします。
- Service Notification Commandsをクリックします。
- Service Notifications Enabled: オン
- Service Notifications Timeperiod: 24×7
- Service Notification options: w、u、c、r
notify-service-by-pagerduty
コマンドを選択し、Add Selectedをクリックしてください。notify-service-by-pagerduty
がAssigned列に移動していることを確認してから、Closeをクリックします 。- Misc Settings タブに移動し、 Manage Variable Definitions をクリックします。
- Variable nameを
pager
、 Variable valueをPagerDutyからコピーしたインテグレーションキーに設定し、Insertをクリックします。 変数が右の列に追加されていることを確認し、Close をクリックします 。 - Common Settingsタブに移動して、Contact Name (
pagerduty
、複数の PagerDutyサー ビスと統合する場合は、pagerduty_database
、pagerduty_network
などの pagerduty_database名前)を設定し、Manage Contact Groupsクリックします 。 Admins
グループ、またはホストとサービスにも関連付けられる連絡先のグループを選択して、Add Selectedをクリックします。admins
(または代替グループ名)がAssigned 列に移動していることを確認し、Closeをクリックします 。- Saveをクリックして新しい連絡先を保存します。
- 左側のメニューでHost Templatesをクリックし、PagerDuty通知に使用するテンプレートを選択します。 このガイドでは、
generic-host
を使用しています。これによって、通常、インテグレーションプロセスが完了するとすぐにすべてのホスト の通知を受け取ることができます。 - Alert Settings タブに移動して、次のオプションを設定し、Manage Contactgroupsをクリックします 。
- Notification period: 24×7
- Notification options: d、u、r
- Notification interval: 1分
- Notification enabled: オン
Admins
グループ(または手順15で選択した代替グループ)を選択し、Add Selected クリックします。 グループ名がAssigned 列に移動していることを確認し、Close をクリックします 。- Saveをクリックして、ホストテンプレートを保存します。
- Apply Configurationをクリックして、新しいコマンド、連絡先、およびホストテンプレートの変更を有効にします。
- 双方向のインテグレーションのために
pagerduty.cgi
をダウンロードしてください。wget https://raw.githubusercontent.com/mdcollins05/pd-nag-connector/master/pagerduty.cgi
pagerduty.cgi
ファイルを編集して、command_file
変数がNagiosコマンドファイルを指すようなります。 パスは、 nagios.cfg存在するディレクトリのgrep "^command_file" nagios.cfg
コマンド(Nagios Enterprisesが提供する仮想マシンイメージを使用している場合は/usr/local/nagios/etc
コマン)を実行すると見つかります。情報が返さない場合は、command_file
変数のコメントが解除されていることを確認します(#
始まらないこと)。pagerduty.cgi
をNagios Core cgi-bin(Nagios XI PHPユーザインタフェースディレクトリではありません)に移動してください。 pagerduty.cgi Enterprisesが提供する仮想マシンイメージの場合、これは `mv pagerduty.cgi /usr/local/nagios/sbin'pagerduty.cgi
を実行可能にしてください。Nagios Enterprisesが提供する仮想マシンイメージの場合:chmod +x /usr/local/nagios/sbin/pagerduty.cgi
- スクリプトが動作するために必要なPerlライブラリをインストールしてください。
yum install perl-CGI perl-JSON perl-libwww-perl
- PagerDutyで、Nagios XIサービスのIntegrationsタブに行き、 Add an extensionをクリックします。
- Extension TypeにGeneric Webhookを選択して、webhookのためのName(Nagios XI)を記入してください。 それから、URLに貼り付けてSaveをクリックします。URLは次のようになります:
http:// user : password @ ip-or-domain /nagios3/cgi-bin/pagerduty.cgi
Note: あなたがそれを無効にしていない限り、Nagios Core Webインターフェイスはユーザ名とパスワードを必要とします。Webhookでのみ使用されるNagiosコマンドを実行できるユーザを設定することを強くお勧めします。 ブラウザでこのURLにアクセスすると、400 Requests must be POSTsが表示されます。表示されない場合は、このURLをアクセスしたときに何が起きたか、その詳細を調べるため、Webサーバーのログを確認してください。 - これでやるべき設定は終わりました。テストためには、インシデントを生成するようなイシューをNagios内で発行する必要があります。インシデントが確認されると、インシデントが「Acknowledged by PagerDuty」というコメントが追加されるはずです。
よくある質問
インストールしたNagiosをインターネットからアクセスできない状態にしたままで、双方向のインテグレーションができますか?
双方向のインテグレーションでは、PagerDutyからWebhookコールを受信するために、インターネット経由でNagiosサーバにアクセスさせる必要があります。 あなたのNagios Webサーバーへのアクセスを特定のIPに制限したい場合は、PagerDutyのWebhook IPをナレッジベース
ホワイトリストとファイアウォールの目的でのPagerDutyのIPとは何ですか?(ホワイトリストやファイアウォールに指定できるPagerDutyのIPは何ですか?)
を見てください。あるいは、ngrokのようなサービスを使うと、Webhook用に使えるパブリックなURLを使用して、Nagiosサーバーへの安全なトンネルを作成することができます。
Nagios XIを複数のPagerDutyサービスと動作するように設定できますか?
PagerDutyのNagios XIサービスはNagiosの “contact”に直接マッピングされているため、現在のインテグレーションではこれは簡単です。複数のサービスを設定するには、Nagios XIの別の連絡先(例:
pagerduty_database
、pagerduty_network
など)を作成し、対応するインテグレーションキーをPagerDutyからコピーしてpager
変数定義フィールドに貼り付け、希望するサービスの通知を受け取る連絡先グループを作成してください。 連絡先を保存した後に変更内容を適用して有効にすることを忘れないでください。ネットワークがダウンしているときにNagiosイベントが発生したらどうなりますか?
何らかの理由でPagerDutyサーバにアクセスできない場合、イベントはディスク上のキューに保存されます。PagerDutyエージェントは、接続が復元されたときにイベントを再送信しようとします。
NagiosがPagerDutyに失敗の報告を送るためには外部インターネット接続が必要ですが、私のサイトが外部接続を失った場合、どうすれば通知を受け取れますか?
まず、 PagerDutyエージェントをインストールしていることと、PagerDutyエージェントをインストールしようとするときにパッケージマネージャからエラーがないことを確認してください。インテグレーションが動かない原因として、インストールできないディストリビューション(CentOS 5などのような互換性のないディストリビューション)を使っていることがよくあります。
インテグレーションが動いていないようです。なぜですか?
pagerduty
連絡先がsyslogにHOST
またはSERVICE NOTIFICATIONS
取得していることを確認してください。 syslogをgrepして、pagerduty
連絡先が通知されているかどうかを確認することができます。 ここに例があります:grep NOTIFICATION /var/log/messages May 28 18:20:57 ip-10-11-139-249 nagios3: SERVICE NOTIFICATION: pagerduty;localhost;Current Users;CRITICAL;notify-service-by-pagerduty;USERS CRITICAL - 3 users currently logged in
ご覧の通り、
pagerduty
連絡先にはこのSERVICE NOTIFICATION
通知が通知されました。pagerduty
連絡先が決して表示されない場合は、pagerduty
連絡先が問題のホスト/サービスの通知に関連付けられていないことを意味します。 デフォルトの設定を使用している場合は、 pagerduty連絡先がpagerduty
連絡先グループのメンバーであることを確認してpagerduty 。pagerduty
連絡先に通知がpagerdutyいる場合は、エージェントのログを/var/log/pdagent/pdagentd.log
で確認してください。その他のトラブルシューティングのヒントについては、Nagiosトラブルシューティングガイドを参照してください。
PagerDutyはどのようなNagiosメッセージを理解できますか?
PagerDutyは、
PROBLEM
、ACKNOWLEDGEMENT
、およびRECOVERY
メッセージを処理できます。FLAPPINGSTART
およびFLAPPINGSTO
Pを含む他のすべてのメッセージは無視されます。Nagiosアラートをカスタマイズするにはどうしたらいいですか?
NagiosからPagerDutyに送信された通知をカスタマイズするためのガイドが用意されています。