DOCS
インテグレーションガイド / Icinga2

Icinga2

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

このガイドでは、単純なPerlベースのプラグインを使用してIcinga 2インストールをPagerDutyにインテグレートする方法について説明します。インストールするにはrootでログインする必要があります。Linuxディストリビューションの種類とIcinga 2の設定によっては以下の手順は変更する必要があります。インストールが失敗した場合は、当社までご連絡ください。

Icinga 1の場合はこちらをクリック

PagerDutyでの設定

  1. Configuration メニューからServices を選択します。
  2. Servicesページで: インテグレーションのために新しいサービスを作成する場合は、 +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-8

Icinga 2 Serverでの設定

  1. 必要なPerlモジュールをインストールします。 Debian、Ubuntu、その他Debian系のディストリビューションの場合は、

    apt-get install libwww-perl libcrypt-ssleay-perl libsys-syslog-perl RHEL、Fedora、CentOS、その他RedHatベースのディストリビューションの場合、

  2. CentOS 7ユーザーの場合、追加のモジュールをインストールする必要があります。

    yum install perl-LWP-Protocol-https

  3. GitHubからpagerduty-icinga2.cfgをダウンロードします。

    wget https://raw.githubusercontent.com/mdcollins05/PagerDuty-Icinga2/master/pagerduty-icinga2.conf

  4. テキストエディタ(nano、vim、Emacsなど)でファイルを開き、Icinga 2サービスに対応するインテグレーションキーをPager Dutyのフィールドに入力します。インテグレーションキーは、インテグレーションの詳細ページにある32文字の文字列です。

  5. 設定ファイルpagerduty-icinga2.cfgを所定のディレクトリに移動します。

    mv pagerduty-icinga2.conf /etc/icinga2/conf.d/

  6. カスタム属性use_pagerdutyを設定ファイルのホストおよびサービス設定オブジェクトに追加します。 vars.enable_pagerduty = true # Add this line to hosts/services that will send events to PagerDuty これを行う最も簡単な方法は、すべての設定オブジェクトで使用されるテンプレートに追加することです。たとえば、Debian系のシステムでは、デフォルト設定にgeneric-hostテンプレートを使用するホストオブジェクトと、generic-serviceテンプレートを使用するサービスオブジェクトがあります。テンプレートは/etc/icinga2/conf.d/templates.confで定義されており、以下のように変更することができます。

     template Host "generic-host" {
      max_check_attempts = 5
      check_interval = 1m
      retry_interval = 30s

      check_command = "hostalive"

      vars.enable_pagerduty = true # Add this line
}
template Service "generic-service" {
 max_check_attempts = 3
 check_interval = 1m
 retry_interval = 30s

 vars.enable_pagerduty = true # Add this line
}
  1. 手順6でテンプレートにカスタム属性を追加した場合は、そのテンプレートがホストオブジェクトとサービスオブジェクトで使用されていることを確認してください。たとえば、generic-hostテンプレートとgeneric-serviceテンプレートに追加した場合、オブジェクトには次のいずれかの行があります。
 import "generic-host" # All host objects should have this line in them
import "generic-service" # All service objects should have this line in them
  1. PerlスクリプトがIcingaによって実行可能なように属性を変更します
chmod 755 /usr/local/bin/pagerduty_icinga.pl
  1. Icingaユーザーのcrontabを編集します(一部のシステムでは、IcingaはNagiosユーザーとして動作することがあります)。
crontab -u icinga -e
  1. Crontabに次の行を追加します。
* * * * * /usr/local/bin/pagerduty_icinga.pl flush
  1. Icinga 2をリスタートします。
/etc/init.d/icinga2 restart

よくある質問

  1. ネットワークがダウンしている際、Icingaイベントが発生したらどうなりますか?

    何らかの理由でPagerDutyサーバにアクセスできない場合、イベントはディスク上のキューに保存されます。インストールされたcronジョブは、1分間隔でイベントを再送信しようとします。

  2. IcingaはPagerDutyに障害レポートを送信するためにインターネット接続が必要ですが、サイトが外部接続を失った場合、どうすれば通信ダウンの通知を受け取れますか?

    Pingdomのような外部のpingチェックサービスを設定して、サイトの外部接続を監視する必要があります。もちろん、PagerDutyを使ってこれらのサービスから通知を転送することもできます。

  3. うまく動作していないようです。どうしたのでしょうか?

    syslogで「pagerduty」のメッセージを確認してください。ほとんどのシステムでは、

    grep -i pagerduty /var/log/icinga2/icinga2.log
    

    他にチェックが必要なログは、「Icinga event」のメッセージを含むsyslogです。

    grep "Icinga event" /var/log/syslog

    それでも解決できない場合はご連絡ください。

  4. PagerDutyはどのようなIcingaメッセージを理解できますか?

    PagerDutyは、PROBLEM、ACKNOWLEDGMENT、RECOVERYメッセージを処理できます。FLAPPINGSTARTおよびFLAPPINGSTOPを含む他のすべてのメッセージは無視されます。PagerDutyに追加のIcingaメッセージを処理させたい場合はお知らせください。