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

Prometheus

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

Prometheusは、オープンソースのシステム監視とアラートツールキットです。多次元データモデル、多次元構造を活用するための柔軟なクエリ言語、分散ストレージに依存せず、時系列のコレクションはHTTP経由のプルモデルを介して行われます。時系列のプッシュは中間ゲートウェイ経由でサポートされ、ターゲットはサービスの検出や静的な設定が可能で、グラフ化とダッシュボードの複数のモードがサポートされています。

Prometheus Alertmanager v0.11以降の重要な注意事項: AlertmanagerはEvents API v2をサポートしました。ただし、routing_keyプロパティを設定してv2を使用する場合、routing_key値に対応するインテグレーションタイプも Events API v2 でなければなりません。PagerDutyのインテグレーションタイプとして Prometheus を選択した場合は、Events API v1タイプを使用し、代わりにservice_keyプロパティの値を設定する必要があります。

PagerDutyでの作業

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

  2. 新しいサービスを作成する場合はServiceページで

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

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

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

Prometheusサーバで

  1. まだインストールされていない場合は、Prometheus Alertmanagerをインストールしてください。このインテグレーションには、PrometheusからPagerDutyへのルーティングアラートを処理するため、Alertmanagerが必要です。

  2. Alertmanager設定ファイルがない場合は作成します。設定ファイルの例はGitHubにあります。

  3. 設定ファイルにPagerDutyの receiver を作成します。インシデントを処理するチームの名前やPagerDutyのインテグレーション名などの name をレシーバに付け、以前にコピーしたインテグレーションキーを service_key フィールドに貼り付けてから、設定ファイルを保存します。

レシーバー: – name: YOUR-RECEIVER-NAME Pagerduty_configs: – service_key: YOUR-INTEGRATION-KEY

  1. Prometheusのデフォルト route を設定して、カスタムルートと一致しないすべてのアラートを新しいPagerDuty receiver に送信することができます。以下はデフォルト route をどのように設定するかを示す例です。

route: Group_by: [cluster] 受信者:YOUR-RECEIVER-NAME

  1. さまざまな receiver アラートを送信するようにカスタム routes を設定することもできます。たとえば、重大度が warning のアラートのみをPagerDutyに送信する場合は、別のデフォルトルートを設定し、次のような特別な warning ルートを作成します。

route: – match severity: ‘warning’ receiver:YOUR-RECEIVER-NAME

  1. Prometheus Alertmanagerの強力な routes と receiver 設定オプションにより、異なるPagerDutyインテグレーションキーで複数の receiver を構成し、異なる routes による特定のタイプのアラートを異なる receiver に送信するように設定できます。

    ここでは、データベースサービスのアラートをキャプチャすると、DBAに直接通知するPagerDutyサービスにリンクされた receiver に送信し、それ以外のすべてのアラートは異なるインテグレーションキーを持つキーデフォルトの receiver に送る設定例を示します。

    route: group_by: [cluster] receiver: DEFAULT-RECEIVER group_interval: 5m

    route: – match: service: database receiver: PRIMARY-INTEGRATION-KEY

    receiver: – name: DEFAULT-RECEIVER pagerduty_configs: – service_key: PRIMARY-INTEGRATION-KEY

    – name: DATABASE-RECEIVER pagerduty_configs: – service_key: DATABASE-INTEGRATION-KEY

  2. AlertManagerを起動するか、すでに実行している場合は設定の変更を有効にするために再起動してください。

  3. これで、PrometheusはPagerDutyでインシデントをトリガーして解決できるようになりました。次の curl コマンドを使用してテストインシデントをトリガーすることで、これを確認できます。 curl -d ‘[{“labels”:{“アラート名”:”PagerDuty Test”}}]’ http:// localhost:9093 /api/v1/alerts

よくある質問

  1. Prometheusでアラートが解決されると、PagerDutyインシデントは解決されますか?

    send_resolved オプションが false に設定されていなければ答えはYesです。デフォルト値は true ですので、PagerDutyインシデントを自動的に解決するために send_resolved: true を指定する必要はありません。

    また、解決通知が送信されるのが次の group_intervalまで待たされることがあり、Prometheusチームに従って通知をPagerDutyに送信する「ベストエフォート」のみが行われます。

  2. 複数の異なるPrometheusアラートに対して1つの通知しか受け取れません。どうすればこの問題を解決できますか?

    PagerDutyルートのmatchおよびgroup_byオプションを調整してみてください。アラートイベントが固有の問題に関係しているかどうかを判断するために使用される重複排除キー(別名インシデントキー)は、これらのオプションに基づいて生成されます。一連のアラートがgroup_byのプロパティと同じ値を持つ場合、重複排除キーの値は同じになるため、新しいトリガーではなく、最初のアラート/インシデントにマージされます。