DOCS
インテグレーションガイド / Nagios 2-way

Nagios 2-way

本記事は米国PagerDuty社のサイトで公開されているインテグレーションガイドをそのまま日本語に翻訳したものです。日本語環境での動作を保証するわけではありません。原文はこちらを参照してください。

Nagiosは、エンタープライズ規模に対応した、オープンソースのITインフラ監視ツールです。Nagiosは世界中の何十万人ものユーザーに使われており、ITインフラ全体を監視し、問題が発生する前に発見し、セキュリティ違反を検出し、ITアップグレードの計画や予算を立てるために利用できます。

既存のNagios監視ソリューションにPagerDutyを統合することで、PagerDutyでスケジュールしたオンコール担当者にNagiosのアラートを送ることができます。双方向の統合の利点は、ユーザーがPagerDutyのインシデントを認識し、AckをNagiosの関連するサービスまたはホストに渡せることです。つまり、両方のシステムに最新の問題のステータスが反映されます。

以下のガイドでは、インストールが簡単な当社製のエージェントを使って、Nagios 2、3、4をPagerDutyとインテグレーションする方法について説明します。インストールを完了するには、rootとしてログインする必要があります。Linuxディストリビューションのバージョン、Nagiosの設定、Nagiosのバージョンに応じて、これらの手順を少し変更する必要があります。

注意:CentOS 5でNagiosを実行している場合は、このガイドに従うのではなく、PerlベースのNagiosインテグレーション(https://www.pagerduty.com/docs/guides/nagios-perl-integration-guide/)(訳注:英文に飛びます)を参照してください。

PagerDutyでの設定

  1. ConfigurationメニューからServicesを選択します。

  2. Serviceページで:インテグレーションのために新しいサービスを作成する場合は、 +Add New Service をクリックします。 既存のサービスにインテグレーションを追加する場合は、統合を追加するサービスの名前をクリックします。 その後、Integrations タブをクリックし、 + New Integration ボタンをクリックします。 RS-Add-New-Service-13

  3. Integration Typeメニューから追加したいアプリケーションを選択し、Integration Nameを入力します。新たにサービスを作成する場合は、General Settingsで、サービスのNameを入力します。次に、Incident Settingsで、新しいサービスのEscalation Policy (エスカレーションポリシー)、Notification Urgency(通知の緊急度)、Incident Behavior<(インシデントの動作)を指定します。

  4. Add ServiceまたはAdd Integrationボタンをクリックして、インテグレーションを保存します。するとサービスのIntegrationsページにリダイレクトされます。 RS-Integration-Settings-11

  5. 新しいインテグレーションのIntegration Keyをコピーします。 RS_Updates__API_Services-1024x146-5

Nagiosサーバ上での設定

  1. このガイドには、Debianベースの(すなわちUbuntu)とRHELベースの(すなわちCentOS、Fedora)Linuxディストリビューションでの手順が書かれています。 このガイドのすべてのコマンドを実行する必要はなく、お使いのシステムの種類に合ったコマンドだけを実行する必要があります。下記に示したすべてのコマンドは、rootユーザーとして実行されることを前提としています。

  2. PagerDutyエージェントをインストールします。 このエージェントはNagiosからイベントを受信し、キューを使ってPagerDutyに送信し、問題のトラブルシューティングに役立つログを提供し、接続に失敗した場合(例えばNagiosサーバーが時的に接続を失った場合)にはアラートを自動的に再試行します。 注:このエージェントはCentOS 5もしくはそれより古いバージョンでは動作しません。CentOS 5に含まれているものよりも新しいバージョンのPythonが必要です。CentOS 5以前のシステムについては、PerlベースのNagiosについてのインテグレーションガイドを参照してください。 GitHubからpagerduty_nagios.cfgをダウンロードしてください: Screen-Shot-2018-01-17-at-1.37.08-PM

  3. テキストエディタでpagerduty_nagios.cfgを開きます。

  4. Nagiosサービスに対応する統合キーをpagerフィールドに入力します。 キーは、サービスの詳細ページ(上記のPagerDutyセクションの手順5)にある32文字の文字列です。

  5. Nagios設定ファイルを所定の場所に移動します。 Debianベースのシステムの場合、通常は/etc/nagios3/conf.dです。 Screen-Shot-2018-01-17-at-1.38.46-PM RHELベースのシステムの場合、これは通常/etc/nagiosです。

  6. Debianベースのディストリビューションを使っている場合は、この手順をスキップしてください。RHELベースのディストリビューションを使っている場合は、Nagiosの設定を編集してPagerDutyの設定をロードする必要があります。これを行うには、/etc/nagios/nagios.cfgを開いて次の行をファイルに追加します。 Screen-Shot-2018-01-17-at-1.40.49-PM

  7. ”pagerduty”という連絡先をあなたのNagiosの設定のメインコンタクトグループに追加してください。デフォルトの設定を使用している場合は、/etc/nagios3/conf.d/contacts_nagios2.cfg(Debianベースのシステムの場合)、または/etc/nagios/objects/contacts.cfg(RHELベースのシステムの場合)を開き、 “admins”の連絡先グループを探してください。それから”pagerduty”の連絡先を追加するだけでOKです。 Screen-Shot-2018-01-17-at-1.41.42-PM

  8. 設定の変更を有効にするために、Nagiosをリロードするか、リスタートします。

    • Debianベースのシステムの場合: Screen-Shot-2018-01-18-at-9.21.48-AM
    • RHELベースのシステムの場合: Screen-Shot-2018-01-18-at-9.17.47-AM
  9. 双方向を実現するために、pagerduty.cgiをダウンロードします。 Screen-Shot-2018-01-17-at-1.44.10-PM

  10. pagerduty.cgiファイルを編集して、command_file変数がNagiosコマンドを指すようにします。Nagiosへのパスは、

grep “^ command_file” /etc/nagios3/nagios.cfg(Debianベースのシステム)

あるいは、

grep “^ command_file” /etc/nagios/nagios.cfg(RHELベースのシステム)

のコマンドを実行すると見つかります。情報が表示されない場合は、command_file変数のコメントアウトが解除されていることを確認します(#で始まらないようにします)。 11. pagerduty.cgiをNagiosのcgi-binに移動します。 Debianベースのシステムの場合、これは通常/usr/lib/cgi-bin/nagios3/です。 Screen-Shot-2018-01-17-at-1.45.17-PMRHELベースのシステムでは、通常は/usr/lib64/nagios/cgi/となります。 Screen-Shot-2018-01-17-at-1.45.57-PM

  1. pagerduty.cgiを実行可能にします。 Debianベースのシステムの場合: Screen-Shot-2018-01-17-at-1.46.44-PMRHELベースのシステムの場合: Screen-Shot-2018-01-17-at-1.47.31-PM
  2. スクリプトを動かするために必要なPerlライブラリをインストールしてください。 Debianベースのシステムの場合: Screen-Shot-2018-01-17-at-1.48.23-PMUbuntu 16.04システムでは、libcgi-pm-perlもインストールする必要があります: Screen-Shot-2018-01-17-at-1.49.07-PMRHELベースのシステムの場合: Screen-Shot-2018-01-17-at-1.49.45-PM
  3. RHELベースのディストリビューションを使っている場合は、この手順をスキップしてください。 Debianベースのディストリビューションを使っている場合、Nagiosで外部コマンドが有効になっていることを確認する必要があります。それには、/etc/nagios3/nagios.cfgの変数check_external_commandsが1で、変数command_check_intervalが環境に合った適切な値に設定されていることを確認します。 command_check_interval変数は、Nagiosが実行する外部コマンドのチェック頻度を決定します。
  4. RHELベースのディストリビューションを 使っている場合は、この手順をスキップしてください。Debianベースのディストリビューションを使用している場合は、Webサーバユーザー(通常はwww-data)がNagiosコマンドファイルに書き込むことができるようにする必要があります。 次のコマンドは、デフォルトのコマンドファイルの場所に対してこれを有効にします。 Screen-Shot-2018-01-17-at-1.50.39-PM
  5. PagerDutyでNagiosサービスに行き、Integrationsタブをクリックし、Add and extensionをクリックします。
  6. Extension TypeGeneric Webhookを選択し、Webhook(Nagios)のNameにURLを入力してSaveをクリックします。URLは次のようになります。

http://user:password@ip-or-domain/nagios3/cgi-bin/pagerduty.cgi

注:あなたが無効にしていない限り、Nagios Webインターフェイスはユーザー名とパスワードを必要とします。 Webhookでのみ使用されるNagiosコマンドを実行できるユーザーを設定することを強く推奨します。

ブラウザでこのURLにアクセスすると、「400 Requests must be POSTs」と表示されるはずです。 これが表示されない場合は、このURLを呼び出そうとしたときに発生したことの詳細を、Webサーバのログで確認してください。 DEMO_-_PagerDuty

  1. この時点で、すべての設定が終わりました。テストするには、Nagios内でインシデントを生成させます。その後に、インシデントのAckした証拠として、インシデントが「“Acknowledged by PagerDuty」というコメントが追加されることを確認してください。 4-pd-nack-demo

よくある質問

  1. Nagiosに対するインターネット経由でのアクセスを可能にしないで、双方向のインテグレーションを実現できますか?

    双方向のインテグレーションでは、PagerDutyからのWebhookコールをNagiosが受信できるようにするために、インターネット経由でNagiosサーバにアクセスできる必要があります。 あなたのNagios Webサーバへのアクセスを特定のIPに制限したい場合は、PagerDutyのWebhook IPについて解説されている次の記事を参照してください。

  2. ホワイトリストとファイアウォールの目的でのPagerDutyのIPとは何ですか?

    あるいは、ngrokのようなサービスを使用してNagiosサーバへのセキュアなトンネルを作成することができます。またはNagiosサーバを公開する代わりにZooskのポーラスクリプトを使ってリーチさせることもできます。

  3. 複数のPagerDutyサービスで動作するようにNagiosを設定するには?

    PagerDutyのNagiosサービスはNagiosの”contact”に直接マッピングされているので簡単です。 デフォルトでは、この連絡先はpagerdutyという名前で、pagerduty_nagios.cfgファイルで定義されています。複数のサービスを設定するには、既存のcontact定義を複製して名前を変更します(pagerduty_database、pagerduty_networkなど)。 次に、PagerDutyから対応するインテグレーションキーをコピーしてpagerフィールドに貼り付けます。 最後にNagiosを再起動して変更を有効にすることを忘れないでください。

  4. ネットワークがダウンしているときにNagiosイベントが発生した場合はどうなりますか?

    何らかの理由でPagerDutyサーバにアクセスできない場合、イベントはディスク上のキューに保存されます。 PagerDutyエージェントは、接続が回復したときにイベントを再送信しようとします。

  5. NagiosがPagerDutyに不具合のレポートを送るためには、インターネット接続を必要とすると思いますが、サイトが外部と接続できなくなった場合、どうすれば通知を受け取れますか?

    StatusCakeやNodePingなどの外部pingチェックサービスを設定して、サイトの外部接続を監視する必要があります。もちろん、PagerDutyを使ってこれらのサービスからアラートを受け取ることもできます。

  6. PagerDutyが機能していないようです。 どうすればいいでしょうか?

    まず、PagerDutyエージェントがインストールされていることと、PagerDutyエージェントをインストールしようとするときにパッケージマネージャからエラーが出ていないことを確認してください。インテグレーションが機能しない場合の最も一般的な原因は、ディストリビューション(CentOS 5などの互換性のないディストリビューションによる)へのインストールが失敗しているためです。

    PagerDutyのcontactがsyslogにHOSTまたはSERVICE NOTIFICATIONSを取得していることを確認してください。syslogをgrepして、pagerdutyの連絡先が通知されているかどうかを確認す

    ることができます。以下は、Ubuntuシステムの例です(RHELベースのシステムでは、syslogは/var/log/messagesにあります)。

    grep NOTIFICATION /var/log/syslog 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の連絡先にはこのサービス通知が通知されました。pagerdutyの連絡先が全く表示されない場合は、pagerdutyの連絡先が問題のホスト/サービスの通知に関連付けられていないことを意味します。 デフォルトの設定を使っている場合は、pagerdutyの連絡先がadminsの連絡先グループのメンバーであることを確認してください。pagerdutyの連絡先に通知が届いている場合は、エージェントのログを/var/log/pdagent/pdagentd.logで確認してください。

    その他のトラブルシューティングのヒントについては、Nagiosトラブルシューティングガイドを参照してください。

  7. PagerDutyはどのようなNagiosメッセージを理解しますか?

    PagerDutyは、PROBLEM、ACKNOWLEDGMENT、およびRECOVERYメッセージを処理できます。 FLAPPINGSTARTおよびFLAPPINGSTOPを含む他のすべてのメッセージは無視されます。

  8. Nagiosアラートをカスタマイズするにはどうしたらいいですか?

    NagiosからPagerDutyに送信される通知をカスタマイズするためのガイドCustomizing Notifications Sent to PagerDuty from Nagiosを用意してあります。