Service Health ログのクエリ、エクスポート、保存

Personalized Service Health は、Cloud Logging にサービス健全性イベントを記録します。イベントの説明、関連性、状態に対するすべての更新を個別のログとして記録します。

このドキュメントでは、Service Health ログを表示、エクスポート、保存する方法について説明します。

始める前に

Verify that billing is enabled for your Google Cloud project.

  1. ログを表示、エクスポート、保存するプロジェクトで Service Health API を有効にします
  2. Service Health ログへのアクセス権を取得します。

ログスキーマ

クエリで設定できるフィールドについては、ログスキーマのリファレンスをご覧ください。

Service Health ログを表示する

Service Health ログを表示するには:

  1. Google Cloud コンソールに移動します。
  2. [オペレーション] > [ロギング] > [ログ エクスプローラ] を選択します。
  3. ページの上部にある Google Cloud プロジェクトを選択します。
  4. [ログ名] プルダウン メニューで、[Service Health] を選択します。

    ログ エクスプローラ

    ログ名

    type.googleapis.com/google.cloud.servicehealth.logging.v1.EventLog のログのリストが表示されます。

  5. ログエントリを開いて、イベントの詳細を表示します。次の例は、一般的なイベントを示しています。

    "insertId":"1pw1msgf6a3zc6",
    "timestamp":"2022-06-14T17:17:55.722035096Z",
    "receiveTimestamp":"2022-06-14T17:17:55.722035096Z",
    "logName":"projects/PROJECT_ID/logs/servicehealth.googleapis.com%2Factivity",
    "resource":{
        "type":"servicehealth.googleapis.com/Event",
        "labels":{
            "resource_container":"797731824162",
            "location":"global",
            "event_id":"U4AqrjwFQYi5fFBmyAX-Gg"
        }
    }
    "labels":{
        "new_event":"true"
        "updated_fields": "[]"
    },
    "jsonPayload":{
        "@type":"type.googleapis.com/google.cloud.servicehealth.logging.v1.EventLog",
        "category":"INCIDENT",
        "title":"We are experiencing a connectivity issue affecting Cloud SQL in us-east1, australia-southeast2.",
        "description":"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":"2023-11-14T22:26:40Z",
        "endTime":"2023-11-14T22:13:20Z",
        "impactedLocations":"['us-east1','australia-southeast2']",
        "impactedProducts":"['Google Cloud SQL']",
        "impactedProductIds":"['hV87iK5DcEXKgWU2kDri']",
        "nextUpdateTime":"2023-11-14T22:40:00Z",
        "startTime":"2020-09-13T12:26:40Z",
        "state":"ACTIVE",
        "detailedState":"CONFIRMED",
        "relevance":"RELATED",
    }
    

Service Health ログをクエリする

ログ エクスプローラを使用して、Service Health ログをクエリできます。クエリを作成するには、次のリファレンスが必要になる場合があります。

例:

条件 クエリ
特定のインシデントの関連性を持つログを取得する jsonPayload.relevance = ("IMPACTED" OR "RELATED")
複数のフィルタを組み合わせる jsonPayload.impactedLocations : "us-central1" AND jsonPayload.impactedProducts : "Google Compute Engine" AND jsonPayload.state = "ACTIVE"

Service Health ログをエクスポートする

Google Cloud コンソール、API、または gcloud CLI を使用して、Service Health ログを任意の Cloud Logging シンクの宛先にエクスポートできます。Cloud Logging シンクを設定するには、シンクを構成して管理するをご覧ください。

シンクの包含フィルタと除外フィルタを構成することで、Service Health ログを含めたり除外したりできます。

商品またはロケーションを設定する場合は、Google Cloud productslocations で見つかった値を使用します。

フォルダレベルで Aggregate Service Health ログを集計する

フォルダ内のすべてのプロジェクトから Service Health 関連のログを Service Health ログ用に作成されたプロジェクトに送信すると、より複雑なクエリを実行できます。

フォルダレベルでシンクを作成し、Service Health 関連のすべてのログをそのフォルダの新しいプロジェクトに送信します。手順は次のとおりです。

  1. フォルダの下に新しいプロジェクトを作成する。このプロジェクトは Service Health ログに割り当てられます。

    gcloud projects create PROJECT_ID --folder FOLDER_ID
    
  2. フォルダ内の他のプロジェクト用に、フォルダレベルで集約シンクを作成します。

    gcloud logging sinks create SINK_NAME \
    SINK_DESTINATION  --include-children \
    --folder=FOLDER_ID --log-filter="LOG_FILTER"
    

    関連するすべてのインシデントのログを取得するには、LOG_FILTER の値を次のように設定します。

    resource.type=servicehealth.googleapis.com/Event AND jsonPayload.category=INCIDENT AND jsonPayload.relevance!=NOT_IMPACTED AND jsonPayload.@type=type.googleapis.com/google.cloud.servicehealth.logging.v1.EventLog
    
  3. シンクのサービス アカウントの権限を設定します

    gcloud projects add-iam-policy-binding PROJECT_ID --member=SERVICE_ACCT_NAME --role=roles/logging.bucketWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID --member=SERVICE_ACCT_NAME --role=roles/logging.logWriter
    
  4. (省略可)ログを _Default シンクに送信しない場合は、プロジェクトで Service Health 関連のログのログバケットを作成します。

    gcloud logging buckets create BUCKET_ID --location=LOCATION --enable-analytics --async
    

    ログバケットを作成した場合は、それらのログをバケットに送信するシンクを作成します。

    gcloud logging sinks create SINK_NAME_BUCKET \
    logging.googleapis.com/projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_ID \
    --project=PROJECT_ID --log-filter="LOG_FILTER"
    

BigQuery で Service Health ログをクエリする

BigQuery を使用して Cloud Logging に送信されたログをクエリするには、次の操作を行います。

  1. SQL クエリの作成。
  2. BigQuery API を使用して、クエリの結果を外部システムにフィードする。

手順は次のとおりです。

  1. Service Health ログ用に作成したプロジェクトにログバケットを作成します。

    gcloud logging buckets create BUCKET_ID  --location=LOCATION  --enable-analytics --async
    
  2. ログ分析を有効にします

    gcloud logging buckets update BUCKET_ID --location=LOCATION --enable-analytics --async
    
  3. Service Health ログを含むバケットにリンクする新しい BigQuery データセットを作成します。

    gcloud logging links create LINK_ID --bucket=BUCKET_ID --location=LOCATION
    
  4. 必要に応じて、BigQuery API を有効にします。

    gcloud services enable bigquery.googleapis.com
    

これで、次のような複雑な SQL クエリを BigQuery に対して実行できます。

条件 クエリ
特定のインシデントの関連性を持つログを取得する gcloud query --use_legacy_sql=false 'SELECT * FROM `PROJECT_ID.LINK_ID._AllLogs` WHERE JSON_VALUE(json_payload["relevance"]) = "IMPACTED"'
親イベントのすべての子ログイベントを取得する gcloud query --use_legacy_sql=false 'SELECT * FROM `PROJECT_ID.LINK_ID._AllLogs` WHERE JSON_VALUE(json_payload["parentEvent"]) = "projects/PROJECT_ID/locations/global/events/EVENT_ID"'

過去のイベントを保持する

Personalized Service Health では、イベントの保持期間が制限されています。

過去のサービス健全性イベントの記録を数か月を超えて保持する必要がある場合は、Service Health ログを保存することをおすすめします。

  1. Service Health ログを構成する
  2. ログバケットにログを保存する