Puppet インテグレーションガイド

Project Description

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


Puppetは、ソフトウェアがどこで実行されるかに関係なく、標準的な方法でソフトウェアを配布し、稼働できるようにします。 Puppetのアプローチでは、可読性の高い共通の言語を使用して、アプリやインフラストラクチャの見え方を定義します。それを基に、データセンター全体にわたって実施したいと思う変更、共有、テストを実施できます。また、あらゆる段階で、意思決定とコンプライアンスの証明に必要な可視性とレポートを提供する機能を備えています。

PagerDutyでの設定

  1. ConfigurationメニューからServices を選択します。
  2. Serviceページで:
    • インテグレーションのために新しいサービスを作成する場合は、 +Add New Service をクリックします。
    • 既存のサービスにインテグレーションを追加する場合は、追加するサービスのName をクリックし ます。 その後、Integrations タブをクリックし、+ New Integration ボタンをクリックします。

  3. Integration Typeメニューから追加したいアプリを選択して、Integration Nameを入力してください。インテグレーションのために新しいサービスを作成する場合は、一般設定で新しいサービスの nameを 入力します。 次に、Incident Settingsで、新しいサービスの Escalation Policy(エスカレーションポリシー)、Notification Urgency(通知の緊急性)、Incident Behavior(インシデントの動作)を指定します。
  4. Add Service または Add Integration ボタンをクリックして、新しいインテグレーションを保存します。 すると、サービスのIntegrationsページに回送されます。

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

Puppet Master Nodeでの設定

  1. pdsupport-pagerdutyモジュールをインストールします。
    /opt/puppetlabs/bin/puppet module install pdsupport-pagerduty
  2. 必要なRubyの依存関係をインストールします。
    /opt/puppetlabs/server/bin/puppetserver gem install puppet
    /opt/puppetlabs/server/bin/puppetserver gem install json
    /opt/puppetlabs/server/bin/puppetserver gem install redphone
  3. 手動でpagerduty.rbスクリプトをインストールします。
    注:このステップは、Puppet内のある問題のために必要です。この問題の詳細は、ここに記載されています。

    cp /etc/puppetlabs/code/environments/production/modules/pagerduty/lib/puppet/reports/pagerduty.rb /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/reports/
  4. マスターノードのメインマニフェストにpagerdutyクラスを追加します:
    class { 'pagerduty': }
  5. マスターノードのpuppet.confファイルにpagerdutyをレポートハンドラとして追加します。
     [master]
    reports = pagerduty
  6. pluginsyncとreportがマスターノードとクライアントノード上で有効になっていなければ、有効にします。
    注:Puppet 3.0.0以降、これらの設定はデフォルトでtrueです。この手順は、これらの設定のいずれかがfalseに設定されている場合にのみ必要です。
    puppet.confの設定を手動で有効にすることができます:
     [master]
    report = true
    pluginsync = true
    [agent]
    report = true
    pluginsync = true

    または、マスターノードのマニフェストでpagerdutyクラス内で有効にすることもできます。

    class { 'pagerduty':
    pagerduty_puppet_reports    => 'store,http,pagerduty',
    pagerduty_puppet_pluginsync => 'true',
    }
  7. Puppetserverサービスを再起動します。
    sudo service puppetserver restart
  8. Pagerduty.yaml.erbテンプレートをマスターのconfdir移動し、ファイルpagerduty.yamlの名前を変更します。
    mv /etc/puppetlabs/code/environments/production/modules/pagerduty/templates/pagerduty.yaml.erb /etc/puppetlabs/puppet/pagerduty.yaml
  9. Pagerduty.yamlファイルを編集し、上記の手順5でコピーしたIntegration Keyを挿入します。
    sudo vi /etc/puppetlabs/puppet/pagerduty.yaml
    ---
    :pagerduty_api: 'INSERT_INTEGRATION_KEY_HERE'
  10. 実行の失敗がPagerDutyインシデントをトリガーするかどうかをテストするには、pagerdutyモジュールのinit.ppマニフェストを編集し、 9〜13行のコメントを外します。
    sudo vi /etc/puppetlabs/code/environments/production/modules/pagerduty/manifests/init.pp
    if ! defined(Service[$pagerduty_puppet_service]) {
    service { $pagerduty_puppet_service :
    ensure => running,
    }
    }
  11. 次に、クライアントノードのいずれかでPuppetエージェントを実行します。
    /opt/puppetlabs/bin/puppet agent --test

よくある質問

このインテグレーションは、どのバージョンのPuppetと互換性がありますか?

このインテグレーションは、Puppet 3.xおよび4.xでテストされています。 旧バージョンのPuppetについては、Puppet 2.xのために作成されたこのモジュールをご覧ください。

Puppetを複数のPagerDutyサービスにインテグレートできますか?

各Puppetマスターノードは、1つのPagerDutyサービスとのみインテグレートできます。 ただし、環境内にPuppetマスターノードが複数ある場合は、P各ノードを別のサービスにインテグレートできます。 pagerduty.yamlファイルのIntegration Keyを更新して、その特定のノードとインテグレートしたいサービスを指すようにしてください。

Puppetで実行が成功するとPagerDutyでインシデントが自動的に解決されますか?

はい、PagerDutyのインシデントは、実行が成功するとすぐに解決になります。

Puppetで失敗する実行が複数あった場合、PagerDutyインシデントではどう重複排除されますか?

Puppetの実行は、レポートを生成したホストに基づいて重複排除されます。

このインテグレーションの問題をトラブルシューティングするためのログはどこにありますか?

Puppetログはlogdirのマスターノードにあり、puppet.confで設定できます。 Puppet 4.xのデフォルトディレクトリは次の通りです。

/var/log/puppetlabs/puppetserver

Project Details