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

Puppet

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

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

PagerDutyでの設定

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

  2. Serviceページで:

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

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

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

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
    

よくある質問

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

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

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

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

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

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

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

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

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

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