DOCS
インテグレーションガイド / Icinga2
本記事は米国PagerDuty社のサイトで公開されているインテグレーションガイドをそのまま日本語に翻訳したものです。日本語環境での動作を保証するわけではありません。原文はこちらを参照してください。
このガイドでは、単純なPerlベースのプラグインを使用してIcinga 2インストールをPagerDutyにインテグレートする方法について説明します。インストールするにはrootでログインする必要があります。Linuxディストリビューションの種類とIcinga 2の設定によっては以下の手順は変更する必要があります。インストールが失敗した場合は、当社までご連絡ください。
Icinga 1の場合はこちらをクリック
PagerDutyでの設定
- Configuration メニューからServices を選択します。
- Servicesページで: インテグレーションのために新しいサービスを作成する場合は、 +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をコピーします。
Icinga 2 Serverでの設定
-
必要なPerlモジュールをインストールします。 Debian、Ubuntu、その他Debian系のディストリビューションの場合は、
apt-get install libwww-perl libcrypt-ssleay-perl libsys-syslog-perl
RHEL、Fedora、CentOS、その他RedHatベースのディストリビューションの場合、 -
CentOS 7ユーザーの場合、追加のモジュールをインストールする必要があります。
yum install perl-LWP-Protocol-https
-
GitHubからpagerduty-icinga2.cfgをダウンロードします。
wget https://raw.githubusercontent.com/mdcollins05/PagerDuty-Icinga2/master/pagerduty-icinga2.conf
-
テキストエディタ(nano、vim、Emacsなど)でファイルを開き、Icinga 2サービスに対応するインテグレーションキーをPager Dutyのフィールドに入力します。インテグレーションキーは、インテグレーションの詳細ページにある32文字の文字列です。
-
設定ファイルpagerduty-icinga2.cfgを所定のディレクトリに移動します。
mv pagerduty-icinga2.conf /etc/icinga2/conf.d/
-
カスタム属性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
}
- 手順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
- PerlスクリプトがIcingaによって実行可能なように属性を変更します
chmod 755 /usr/local/bin/pagerduty_icinga.pl
- Icingaユーザーのcrontabを編集します(一部のシステムでは、IcingaはNagiosユーザーとして動作することがあります)。
crontab -u icinga -e
- Crontabに次の行を追加します。
* * * * * /usr/local/bin/pagerduty_icinga.pl flush
- Icinga 2をリスタートします。
/etc/init.d/icinga2 restart
よくある質問
ネットワークがダウンしている際、Icingaイベントが発生したらどうなりますか?
何らかの理由でPagerDutyサーバにアクセスできない場合、イベントはディスク上のキューに保存されます。インストールされたcronジョブは、1分間隔でイベントを再送信しようとします。
IcingaはPagerDutyに障害レポートを送信するためにインターネット接続が必要ですが、サイトが外部接続を失った場合、どうすれば通信ダウンの通知を受け取れますか?
Pingdomのような外部のpingチェックサービスを設定して、サイトの外部接続を監視する必要があります。もちろん、PagerDutyを使ってこれらのサービスから通知を転送することもできます。
うまく動作していないようです。どうしたのでしょうか?
syslogで「pagerduty」のメッセージを確認してください。ほとんどのシステムでは、
grep -i pagerduty /var/log/icinga2/icinga2.log
他にチェックが必要なログは、「Icinga event」のメッセージを含むsyslogです。
grep "Icinga event" /var/log/syslog
それでも解決できない場合はご連絡ください。
PagerDutyはどのようなIcingaメッセージを理解できますか?
PagerDutyは、PROBLEM、ACKNOWLEDGMENT、RECOVERYメッセージを処理できます。FLAPPINGSTARTおよびFLAPPINGSTOPを含む他のすべてのメッセージは無視されます。PagerDutyに追加のIcingaメッセージを処理させたい場合はお知らせください。