Cloud Logging でアラートを構成する

このドキュメントでは、サービス ヘルスイベントのアラートを設定、カスタマイズ、テストする方法について説明します。

Personalized Service Health は Cloud Monitoring ログアラートと統合されているため、アラートを構成して受信できます。次の条件で通知を作成できます。

  • 新しいインシデントが報告されたとき。
  • 既存のインシデントが更新された場合( Google Cloud サポートから新しいメッセージが送信された場合など)。
  • 特定の Google Cloud プロダクトまたは地域などのロケーションのインシデントが作成または更新された場合。
  • 既存のインシデントの特定の詳細(状態や関連性など)が更新された場合。

これらの通知はログアラートを使用するため、各通知は Monitoring インシデントに関連付けられます。各通知には、インシデントのページへのリンクと、Service Health ダッシュボードへの直接リンクが含まれています。インシデントの調査の詳細をご確認ください。

アラートを構成すると、アラート ポリシーの条件が満たされるたびに通知が届きます。これらの通知には、モニタリングの上限が適用されます。たとえば、プロジェクトごとに 1 日あたり 1 つのポリシーにつき 20 件のアラートが送信されます。

以降のセクションでは、ログアラート ポリシーを構成する方法と、一般的なアラート シナリオの例を示します。ログアラートは通知チャネルに依存します。通知チャネルは、メール、SMS、Pub/Sub、Webhook、Slack、PagerDuty など、さまざまな統合をサポートしています。

アラートを前述のオプション以外の宛先に転送するには、Webhook の使用を検討してください。たとえば、ServiceNow への Webhook を構成できます。詳細については、ServiceNow ドキュメントの Google Cloudで Webhook を構成するをご覧ください。

アラート通知の形式

アラート通知の形式は、通知チャンネルによって異なります。

メール

メールを送信するようにアラートを構成すると、アラート条件が満たされたときに、alerting-noreply@google.com というアドレスを使用したメッセージが、選択したメールアドレスに配信されます。

Slack

Slack に投稿するようにカスタム通知を構成すると、イベントが発生したときに、選択したチャンネルに Cloud Monitoring アプリケーションからのメッセージが表示されます。

アラート ポリシーを設定する

アラートはアラート ポリシーを使用します。アラート ポリシーには、アラートを受け取る状況と通知方法が記述されています。

アラート ポリシーは、Service Health ダッシュボード内または Google Cloud CLI を使用して構成できます。

アラート ポリシーには、アラートの送信先を定義する Cloud Monitoring 通知チャネルが必要です。通知チャネルがない場合は、Google Cloud コンソールまたは Monitoring API を使用して作成できます。

Service Health ダッシュボード内

クイックスタートをご覧ください。

gcloud CLI を使用する場合

gcloud CLI を使用してアラート ポリシーを設定するには:

  1. 通知チャンネル ID を取得します。

    a. 通知チャンネル ID を一覧表示します

    gcloud config set project PROJECT_ID
    gcloud beta monitoring channels list
    

    b. projects/PROJECT_ID/notificationChannels/ のエントリを探します。これらのエントリは通知チャンネル ID です。

  2. 次の内容の policy.json ファイルを作成します。

    • 通知に ALERT_NAME が表示されます。例: 「Google Cloud SQL インシデント」

    • ALERT_CONDITION は、アラートを送信するタイミングを定義します。

      • 条件を定義するときは、Google Cloud productslocations で見つかった値を使用します。
      • アラート条件の例:

        アラート条件 ALERT_CONDITION
        Cloud SQL イベントのアラートを受信する jsonPayload.impactedProductIds =~ \"hV87iK5DcEXKgWU2kDri\"
        ゾーン us-central1-a で発生したイベントに関するアラートを受け取る jsonPayload.impactedLocations =~ \"us-central1-a\"

      アラート条件の例をご覧ください。

    • NOTIFICATION_CHANNEL は通知チャンネル ID です。前のステップでリスト コマンドを使用して取得したものです。例: projects/PROJECT_ID/notificationChannels/885798905074

    次のスニペットは、policy.json ファイルの例を示しています。

    {
      "displayName": "ALERT_NAME",
      "combiner": "OR",
      "conditions": [ {
        "displayName": "Log match condition",
        "conditionMatchedLog": {
          "filter": "ALERT_CONDITION",
         } } ],
      "notificationChannels": [ "NOTIFICATION_CHANNEL" ],
    }
    
  3. Cloud Monitoring ポリシーを作成します。

    gcloud config set project PROJECT_ID
    gcloud alpha monitoring policies create --policy-from-file="policy.json"
    

アラートのコンテンツをカスタマイズする

JSON ファイルの次のフィールドを使用して、通知内のフィールドを設定できます。

  • labelExtractors: 通知のヘッダーに含めるプロパティ。これらのプロパティをカスタマイズするには、LabelExtractors ガイドをご覧ください。
  • content: メール通知の形式。マークダウン変数の置換を使用すると、labelExtractors を変数として使用できます。これらの変数をカスタマイズするには、こちらのガイドをご覧ください。

アラートをカスタマイズする方法については、アラート ポリシーと条件の例をご覧ください。

アラートをテストする

アラートをテストするには、Cloud Logging を使用してサンプル テストログを使用します。テストログには、以前に構成したアラート ロジックが表示されます。

Google Cloud コンソールの使用

手順は次のとおりです。

  1. entries:write メソッドのリファレンス ページに移動します。このページでは、Cloud Logging にログエントリを書き込むことができます。メソッドを試すことができるウィンドウが表示されます。
  2. リクエスト本文で、PROJECT_ID を実際のプロジェクトに変更します。
  3. テストするアラート条件に応じて、リクエスト本文の jsonPayload フィールドを変更します。event_log.proto スキーマを確認し、ログの値を調整して、関心のある特定のシナリオをテストすることもできます。

    {
      "entries": [
        {
          "logName": "projects/PROJECT_ID/logs/servicehealth.googleapis.com%2Factivity",
          "resource": {
            "type": "servicehealth.googleapis.com/Event",
            "labels": {
              "resource_container": "PROJECT_ID",
              "location": "global",
              "event_id": "U4AqrjwFQYi5fFBmyAX-Gg"
            }
          },
          "labels": {
            "servicehealth.googleapis.com/new_event": "true",
            "servicehealth.googleapis.com/updated_fields": "[]"
          },
          "jsonPayload": {
            "@type": "type.googleapis.com/google.cloud.servicehealth.logging.v1.EventLog",
            "category": "INCIDENT",
            "title": "EXAMPLE... NOT REAL INCIDENT",
            "description": "EXAMPLE FOR TESTING, NOT REAL INCIDENT. We are experiencing an issue with Google Cloud infrastructure components at us-east1, australia-southeast2. Our engineering team continues to investigate the issue. We apologize to all who are affected by the disruption.",
            "updateTime": "2022-07-15T22:26:40Z",
            "endTime": "2022-07-16T22:13:20Z",
            "impactedLocations": "['us-east1', 'australia-southeast2']",
            "impactedProducts": "['CloudSQL']",
            "impactedProductIds": "['hV87iK5DcEXKgWU2kDri']",
            "startTime": "2022-07-13T12:26:40Z",
            "nextUpdateTime": "2022-07-13T16:26:40Z",
            "state": "ACTIVE",
            "detailedState": "CONFIRMED",
            "relevance": "RELATED"
          }
        }
      ]
    }
    
  4. [実行] をクリックします。Google APIs Explorer がアカウントへのアクセスをリクエストするウィンドウが表示されます。

  5. Google APIs Explorer へのアクセスを許可します。リクエスト本文を含むウィンドウに、成功を示す次のスクリーンショットが表示されます。

    200 メッセージ

  6. 数分待ってから、アラートがトリガーされたことを確認します。

    1. Google Cloud コンソールで、[Cloud Monitoring] > [インシデント] ページに移動します。

      [インシデント] に移動

    2. アラート ポリシーで使用されている通知チャンネルでアラートを受信したかどうかを確認します。

アラートを再度テストする必要がある場合は、5 分以上待ってからテストしてください。

gcloud の使用

gcloud コマンドを使用して Cloud Logging API を呼び出して、テストログエントリを作成することもできます。

  1. (省略可)現在のプロジェクトを確認します。

    gcloud config list
    
  2. 現在のプロジェクトを設定します。

    gcloud_name config set project PROJECT_ID
    
  3. テストログ エントリを書き込みます

    gcloud logging write --payload-type=json
    LOG_NAME
    '{ "category": "INCIDENT", "relevance": "IMPACTED", "@type": "type.googleapis.com/google.cloud.servicehealth.logging.v1.EventLog", "description": "This is a test log entry"}'
    
  4. 数分待ってから、アラートがトリガーされたことを確認します。