BigQuery 监控简介

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

监控和日志记录源可能因采样或聚合频率而异。例如,信息架构数据的粒度水平可能高于 Cloud Monitoring 指标数据。

因此,具有较低粒度水平的指标图表看起来可能与可比的信息架构统计信息不同。聚合往往有助于消除差异。在设计监控解决方案时,请根据您的要求评估指标的请求响应时间、精度和准确率。

指标

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

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

对于 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 结构。此结构包含日志的名称、生成日志条目的资源、时间戳(世界协调时间 [UTC])和其他基本信息。

所记录事件的详细信息包含在名为载荷字段的子字段中。对于审核日志,载荷字段名为 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 查询,其中显示了组织的槽和预留利用率、作业执行和作业错误。例如,以下查询会提供待处理查询或当前运行查询的列表。这些查询按在 us 区域中创建的时长排序。

SELECT
    creation_time,
    project_id,
    user_email,
    job_id,
    job_type,
    priority,
    state,
    TIMESTAMP_DIFF(CURRENT_TIMESTAMP(), start_time,second) as running_time_sec
 FROM
   `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
 WHERE
    creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP()
    AND state != "DONE"
ORDER BY
    running_time_sec DESC

如需了解详情,请参阅使用这些信息中心排查 BigQuery 性能问题

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

后续步骤