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

Watcher

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

Watcherは、Elasticsearchのアラートと通知用の製品で、データの変更に基づいてアクションを実行できます。これは基本的に、Elasticsearchで何かをクエリーできたら、そのことをアラートするように設計されています。 クエリー、条件、スケジュール、および実行するアクションを定義するだけで、Watcherが残りの作業を行います。

PagerDutyでの設定

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

  2. Serviceページで:

    • インテグレーションのために新しいサービスを作成する場合は、Add New Service をクリックします。

    • 既存のサービスにインテグレーションを追加する場合は、追加するサービスの名前をクリックします。次に、Integrationsタブをクリックし、 New Integration ボタンをクリックします。 RS-Add-New-Service-13-300x113

  3. Integration Typeメニューから追加したアプリを選択して、 Integration Nameを入力してください。インテグレーションのために新しいサービスを作成する場合は、General Settingsで新しいサービスのNameを入力します。 次に、Incident Settingsで、新しいサービスの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

Elastic Watcherサーバーでの設定

  1. Watcherがサーバー上で設定されて実行されていることを確認します。

    レスポンスの中のwatcher stateは、 startedになっているか確認します。

    curl -XGET ‘http:// localhost:9200 / _watcher / stats?pretty’

  2. PagerDuty用のWebhookアクションを伴うウォッチを設定し、PUTリクエストを使用してそれをウォッチャーに追加します。

    注:以下のウォッチは、テスト目的で常に10秒ごとに実行されるように設定されています。ほとんどの運用環境ではノイズを減らすため、トリガーと条件を更新して、問題が発生した場合にのみアクションを実行させる必要があります。PagerDutyのトリガーが重複しないように、PagerDutyアクションに調整期間を追加することもできます。Elastic Watcher Documentationに、ウォッチの各部の設定に関する詳細な手順が記載されています。

    上記の手順5でコピーしたintegration keyを使用して、アクションのbodyService_keyを更新してください。

    curl -XPUT 'http://localhost:9200/_watcher/watch/cluster_health_watch' -d '{
    "trigger" : {
      "schedule" : { "interval" : "10s" }
     },
     "input" : {
       "http" : {
       "request" : {
       "host" : "localhost",
       "port" : 9200,
       "path" : "/_cluster/health"
        }
      }
     },
     "condition" : {
      "always" : {}
     },
     "actions" : {
       "pagerduty": {
         "webhook": {
         "scheme": "https",
          "method": "POST",
          "host": "events.pagerduty.com",
          "port": 443,
           "path": "/generic/2010-04-15/create_event.json",
           "body": "{\"service_key\": \"ENTER_YOUR_SERVICE_KEY_HERE\",\"event_type\":     \"trigger\",\"description\": \"Issue in elastic watcher\"}",
          "headers": {"Content-type": "application/json"}
        }
      }
     }
    }'
    
  3. この時点で、インテグレーションの構成と設定がすべて終わったはずです。 あなたのウォッチの条件に合った問題が発生するとすぐに、そのインシデントはPagerDuty内でトリガされます。

よくある質問

  1. Elastic WatcherからPagerDutyのインシデントを認識し解決することはできますか?

    はい、時計のいずれかのアクションを定義するときは、リクエストの本文にevent_typeを指定できます。 この属性は、triggeracknowledgeまたはresolveいずれかでなければなりません。

  2. Watcherを複数のPagerDutyサービスに追加することはできますか?

    はい、これは現在のインテグレーションでは簡単にできます。さまざまなインテグレーションキーを含む複数のウォッチを定義するかまたはウォッチ内で複数のアクションを定義するだけです。

  3. ウォッチが適切な動作を行っていることを確認するにはどうすればよいですか?

    watch historyまたはstatus_indexをチェックすると、ウォッチ条件が満たされたときに実行されたアクションを確認できます。

    curl -XGET 'http://localhost:9200/.watch_history*/_search?pretty' -d '{
      "query" : {
      "match" : { "result.condition.met" : true }
    }
    }'
    

    このリクエストによって何も起きない場合は、ウォッチはまだ条件が満たされず、何のアクションも引き起こしません。

  4. 私のウォッチは条件が満たされても、そのアクションがPagerDutyでインシデントをトリガしません

    このシナリオでは、PagerDutyアクションに対して定義したパラメータに問題があります。私たちが遭遇したよくある例は次のとおりです。

    • HTTPSの代わりにHTTPスキームを使っている。注:ウォッチにスキームがない場合は、デフォルトでHTTPになります。

    • 443以外のポートを使っている。

    • アクションの本文内にdescriptionを提供できない。