查询、导出和存储服务运行状况日志

Personalized Service Health 会在 Cloud Logging 中记录服务运行状况事件。它会将对事件说明、相关性或状态的所有更新记录为一个单独的日志。

本文档介绍了如何查看、导出和存储服务运行状况日志。

准备工作

Make sure that billing is enabled for your Google Cloud project.

您必须有权访问服务运行状况日志

日志架构

如需了解您可以在查询中设置的字段,请参阅日志架构参考文档

查看 Service Health 日志

如需查看 Service Health 日志,请执行以下操作:

  1. 转到 Google Cloud 控制台。
  2. 依次选择 Operations > Logging > Logs Explorer
  3. 在页面顶部选择一个 Google Cloud 项目。
  4. 日志名称下拉菜单中,选择服务运行状况

    日志浏览器

    日志名称

    系统随即会显示 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 日志

您可以使用日志浏览器查询服务运行状况日志。您可能需要以下参考信息来构建查询:

示例:

条件 查询
获取与特定突发事件相关的日志 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 将服务运行状况日志导出到任何 Cloud Logging 接收器目的地。如需设置 Cloud Logging 接收器,请参阅配置和管理接收器

您可以通过为接收器配置包含和排除过滤条件来包含和排除服务健康状况日志。

设置商品或地理位置时,请使用 Google Cloud productslocations 中找到的值。

在文件夹级汇总 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 接收器,请在项目中为与服务运行状况相关的日志创建日志存储分区

    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 查询服务运行状况日志

您可以通过以下方式使用 BigQuery 查询发送到 Cloud Logging 的日志:

  1. 创建 SQL 查询。
  2. 使用 BigQuery API 将查询结果馈送到外部系统。

执行以下操作:

  1. 在您为服务运行状况日志创建的项目中创建日志存储分区

    gcloud logging buckets create BUCKET_ID  --location=LOCATION  --enable-analytics --async
    
  2. 启用 Log Analytics

    gcloud logging buckets update BUCKET_ID --location=LOCATION --enable-analytics --async
    
  3. 创建一个与包含服务运行状况日志的存储分区关联的新 BigQuery 数据集

    gcloud logging links create LINK_ID --bucket=BUCKET_ID --location=LOCATION
    
  4. 如有必要,请启用 BigQuery API。

    gcloud services enable bigquery.googleapis.com
    

现在,您可以对 BigQuery 运行复杂的 SQL 查询,例如:

条件 查询
获取与特定突发事件相关的日志 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. 配置服务健康状况日志
  2. 将日志存储在日志存储分区中