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

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. 依次选择运维 > Logging > 日志浏览器
  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 日志

您可以使用 Logs Explorer 查询 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 商品位置中的值。

在文件夹级汇总 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 查询服务运行状况日志

您可以使用 BigQuery 查询发送到 Cloud Logging 的日志,方法如下:

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

执行以下操作:

  1. 在您为 Service Health 日志创建的项目中创建日志存储桶

    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. 创建与包含 Service Health 日志的存储桶相关联的新 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. 将日志存储在日志存储桶中