
Project Description
本記事は米国PagerDuty社のサイトで公開されているインテグレーションガイドをそのまま日本語に翻訳したものです。日本語環境での動作を保証するわけではありません。原文はこちらを参照してください。
このガイドでは、単純なPerlベースのプラグインを使用してIcinga 2インストールをPagerDutyにインテグレートする方法について説明します。インストールするにはrootでログインする必要があります。Linuxディストリビューションの種類とIcinga 2の設定によっては以下の手順は変更する必要があります。インストールが失敗した場合は、当社までご連絡ください。
Icinga 1の場合はこちらをクリック
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をコピーします。
Icinga 2 Serverでの設定
- 必要なPerlモジュールをインストールします。 Debian、Ubuntu、その他Debian系のディストリビューションの場合は、
apt-get install libwww-perl libcrypt-ssleay-perl libsys-syslog-perl
RHEL、Fedora、CentOS、その他RedHatベースのディストリビューションの場合、
yum install perl-libwww-perl perl-Crypt-SSLeay perl-Sys-Syslog
- 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
- pagerduty_icinga.plをGitHubからダウンロードし、/usr/local/binにコピーします。
wget https://raw.github.com/PagerDuty/pagerduty-icinga-pl/master/pagerduty_icinga.pl
cp pagerduty_icinga.pl /usr/local/bin
- 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メッセージを処理させたい場合はお知らせください。