BigQuery 監控功能簡介

監控和記錄功能對於在雲端執行可靠的應用程式至關重要。BigQuery 工作負載也不例外,尤其是工作負載量大或攸關重大任務時。本文件將概略說明可用於 BigQuery 的監控資料。

監控和記錄來源可能會因取樣或匯總頻率而異。舉例來說,資訊結構定義資料的精細程度可能會高於 Cloud Monitoring 指標資料。

因此,精細度較低的指標圖表可能會與相符的資訊架構統計資料有所出入。匯總資料通常會平滑差異。設計監控解決方案時,請根據您的需求評估指標的請求回應時間、精確度和準確度。

指標

指標是指定期收集的數值,可供分析使用。您可以使用指標來完成下列工作:

  • 建立圖表和資訊主頁。
  • 針對需要人為介入的情況或條件觸發警報。
  • 分析歷來成效。

在 BigQuery 的情況下,可用的指標包括執行中的工作數量、查詢期間掃描的位元組數,以及查詢時間的分布。查詢成功後,系統才會提供查詢指標,且最多可能需要七分鐘才能回報。系統不會回報失敗查詢的指標。如需可用指標的完整清單,包括其取樣率、可見度和限制,請參閱「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) 和其他基本資訊。

記錄事件的詳細資料包含在名為「payload」欄位的子欄位中。稽核記錄的酬載欄位名稱為 protoPayload。這個欄位的值是 AuditLog 結構,由 protoPayload.@type 欄位的值表示,該欄位的值已設為 type.googleapis.com/google.cloud.audit.AuditLog

針對資料集、資料表和工作執行的作業,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 預留項目的作業,protoPayloadAuditLog 結構,而 protoPayload.requestprotoPayload.response 欄位則包含更多資訊。您可以在 BigQuery Reservation API 中找到欄位定義。詳情請參閱「監控 BigQuery 預留項目」。

BigQuery 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 管理員資源圖表查看顯示運算單元使用情形、工作並行作業和工作執行時間的圖表。詳情請參閱「監控健康狀態、資源使用率和工作」。

後續步驟