BigQuery 监控简介

监控和日志记录对于在云端运行可靠应用至关重要。BigQuery 工作负载也不例外,尤其是在工作负载量大或工作负载是任务关键型工作负载的情况下。本文档简要介绍了适用于 BigQuery 的监控数据。

指标

指标是定期收集且可用于分析的瞬时数值。您可以使用指标执行以下操作:

  • 创建图表和信息中心。
  • 针对需要人为干预的重大状况或情况触发提醒。
  • 分析历史性能。

对于 BigQuery,可用指标包括正在运行的作业数、查询期间扫描的字节数以及查询时间分布。查询的指标只有在查询成功后才可用,并且最多可能需要 7 分钟才会报告。不会报告失败的查询的指标。如需查看可用指标的完整列表(包括其采样率、可见性和限制),请参阅 Google Cloud 指标下的 bigquery

使用 Cloud Monitoring 查看 BigQuery 指标并创建图表和提醒。每个指标都有一个资源类型(即 bigquery_datasetbigquery_projectglobal)和一组标签。使用此信息在 Monitoring Query Language (MQL) 中构建查询。您可以使用标签对每项指标进行分组或过滤。

例如,如需为进行中的交互式查询数量绘制图表,请使用以下 MQL 语句,其按 priority 等于 interactive 进行过滤:

fetch global
| metric 'bigquery.googleapis.com/query/count'
| filter metric.priority = 'interactive'

在下一个示例中,获取正在执行的加载作业数量,并按 10 分钟的间隔进行分组:

fetch bigquery_project
| metric 'bigquery.googleapis.com/job/num_in_flight'
| filter metric.job_type = 'load'
| group_by 10m

如需了解详情,请参阅为 BigQuery 创建图表和提醒

日志

日志是为响应特定事件或操作而生成的文本记录。BigQuery 会为创建或删除表、购买槽或运行加载作业等操作创建日志条目。如需详细了解 Google Cloud 中的日志记录,请参阅 Cloud Logging

日志是仅允许附加操作的日志条目集合。例如,您可以将自己的日志条目写入名为 projects/PROJECT_ID/logs/my-test-log 的日志。许多 Google Cloud 服务(包括 BigQuery)都会创建一种称为审核日志的日志。这些日志记录包括:

  • 管理活动,如创建或修改资源。
  • 数据访问,例如从资源读取用户提供的数据。
  • 由 Google 系统(而非用户操作)生成的系统事件。

审核日志采用结构化 JSON 格式编写。Google Cloud 日志条目的基本数据类型是 LogEntry 结构。此结构包含日志的名称、生成日志条目的资源、时间戳和其他基本信息。

所记录事件的详细信息包含在名为载荷字段的子字段中。对于审核日志,载荷字段名为 protoPayload。此字段的值是一种 AuditLog 结构,由设置为 type.googleapis.com/google.cloud.audit.AuditLogprotoPayload.@type 字段值指示。

对数据集、表和作业的操作,BigQuery 目前以两种不同的格式写入审核日志,但两种格式共享 AuditLog 基本类型。

如果是旧版格式:

  • resource.type 字段为 bigquery_resource
  • 系统会将操作的相关详情写入 protoPayload.serviceData 字段。此字段的值是一种 AuditData 结构。

如果是新版格式:

  • resource.type 字段为 bigquery_projectbigquery_datasetbigquery_project 资源包含与作业有关的日志条目,而 bigquery_dataset 资源则包含与存储空间有关的日志条目。
  • 系统会将操作的相关详情写入 protoPayload.metadata 字段。此字段的值是一种 BigQueryAuditMetadata 结构。

我们建议您使用新版格式日志。如需了解详情,请参阅审核日志迁移指南

以下是显示失败操作的日志条目的简化示例:

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "code": 5,
      "message": "Not found: Dataset my-project:my-dataset was not found in location US"
    },
    "authenticationInfo": { ... },
    "requestMetadata":  { ... },
    "serviceName": "bigquery.googleapis.com",
    "methodName": "google.cloud.bigquery.v2.JobService.InsertJob",
    "metadata": {
  },
  "resource": {
    "type": "bigquery_project",
    "labels": { .. },
  },
  "severity": "ERROR",
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access",
  ...
}

对 BigQuery Reservations 的操作,protoPayload 是一种 AuditLog 结构,protoPayload.requestprotoPayload.response 字段包含更多信息。您可以在 BigQuery Reservations API 中查找字段定义。如需了解详情,请参阅监控 BigQuery Reservations

INFORMATION_SCHEMA 次浏览

INFORMATION_SCHEMA 视图是 BigQuery 中的另一个数据分析来源,您可以将其与指标和日志结合使用。

这些视图包含有关作业、数据集、表和其他 BigQuery 实体的元数据。例如,您可以获取关于在指定时间段内运行了哪些 BigQuery 作业的实时元数据,然后按项目、用户、引用的表和其他维度对结果进行分组或过滤。

您可以使用此信息对您的 BigQuery 工作负载执行更详细的分析,并回答类似下面的问题:

  • 指定项目在过去 7 天内所有查询的平均槽利用率是多少?
  • 哪些用户针对指定项目提交了批量加载作业?
  • 过去 30 分钟内发生了哪些流式传输错误(按错误代码分组)?

请特别查看作业元数据流式传输元数据预留元数据以深入了解 BigQuery 工作负载的性能。

您可以在 GitHub 上找到示例 INFORMATION_SCHEMA 查询,其中显示了组织的槽和预留利用率、作业执行和作业错误。您还可以查看根据这些查询构建的 Google 数据洞察信息中心;请参阅 BigQuery 系统表报告

如果您有槽预留,则除了编写您自己的查询外,您还可以使用 BigQuery Admin 资源图表来查看显示槽使用情况、作业并发和作业运行时间的图表。如需了解详情,请参阅 BigQuery Admin 资源图表简介预览)。

后续步骤