使用 Log Analytics 分析記錄檔的資料量

本文說明如何使用 Log Analytics 估算記錄檔項目的計費量。您可以編寫查詢,依資源類型或應用程式名稱等不同維度,回報及彙整可計費量,然後繪製及查看查詢結果。

如何查詢可計費量

記錄項目的可計費量 (即向 Cloud Billing 報告的大小) 可透過 storage_bytes 欄位取得。在查詢中,您可以像使用任何資料類型為 INTEGER 的結構定義欄位一樣,使用 storage_bytes 欄位。舉例來說,您可以在 SELECT 子句、CASE 陳述式和一般資料表運算式中加入這個函式。如要進一步瞭解如何查詢記錄,請參閱下列文件:

由於 Cloud Billing 會根據可計費的資料量決定費用,因此您可以編寫查詢,瞭解費用來源。舉例來說,您可以編寫查詢,判斷哪些應用程式寫入的記錄項目最多。如要瞭解如何將可計費的資料量與費用建立關聯,請參閱 Google Cloud Observability 定價頁面的 Cloud Logging 專區。

記錄項目的計費量並非傳送至 Cloud Logging API 的 LogEntry 物件大小,可計費的容量包括序列化和中繼資料所需的位元組。

事前準備

本節說明使用記錄分析前必須完成的步驟。

設定記錄檔 bucket

確認記錄檔 bucket 已升級,可使用記錄檔分析功能:

  1. 在 Google Cloud 控制台中,前往「Logs Storage」(記錄檔儲存空間) 頁面:

    前往「Logs Storage」(記錄檔儲存空間)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果

  2. 針對要查詢記錄檢視區塊的每個記錄 bucket,請確認「可使用記錄檔分析」欄顯示「開啟」。如果顯示「升級」,請按一下「升級」並完成對話方塊。

設定 IAM 角色和權限

本節說明使用記錄檔分析功能所需的 IAM 角色或權限:

  • 如要取得使用記錄檔分析和查詢記錄檔檢視畫面所需的權限,請要求管理員將專案的下列 IAM 角色授予您:

    • 如要查詢 _Required_Default 記錄檔值區: 記錄檢視器 (roles/logging.viewer)
    • 如要查詢專案中的所有記錄檢視區塊: 「記錄檢視存取者」 (roles/logging.viewAccessor)

    如要將主體限制為特定記錄檢視畫面,請在專案層級授予記錄檢視畫面存取者角色時新增 IAM 條件,或是在記錄檢視畫面的政策檔案中新增 IAM 繫結。詳情請參閱控管記錄檢視畫面存取權

    您必須具備這些權限,才能在「記錄檔探索器」頁面查看記錄項目。如要瞭解查詢使用者定義值區中的檢視畫面,或查詢 _Default 記錄檔值區的 _AllLogs 檢視畫面時,需要哪些其他角色,請參閱「Cloud Logging 角色」。

  • 如要取得查詢 Analytics 檢視畫面所需的權限,請要求管理員授予您專案的「可觀測性 Analytics 使用者」 (roles/observability.analyticsUser) IAM 角色。

查詢範例

本節提供範例查詢,用於分析單一記錄檢視畫面中的資料。如果您將資料儲存在多個記錄檢視區中,且想計算這些檢視區中儲存的資料匯總值,則需要使用 UNION 陳述式。

您可以使用「記錄分析」頁面,或任何可查詢 BigQuery 資料集的位置 (包括 BigQuery StudioLooker Studio 頁面,以及 bq 指令列工具),查詢記錄檔項目。

如要使用查詢範例,請按照下列步驟操作:

依應用程式查詢記錄量

如要計算每天每個應用程式的記錄項目總位元組數 (這些記錄項目是針對 Google Kubernetes Engine 資源寫入,且具有 JSON 酬載),請使用下列查詢:

SELECT
  timestamp_trunc(timestamp,DAY) as day,
  JSON_VALUE(labels["k8s-pod/app"]) as app_id,
  SUM(storage_bytes) as total_bytes
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  json_payload IS NOT NULL
  AND resource.type="k8s_container"
GROUP BY ALL

如要以視覺化方式呈現資料,可以建立圖表。

在下列範例中,資料會以堆疊長條圖顯示。圖表中的每個長條都會顯示儲存的位元組總數,並依應用程式分類。在本例中,frontend 應用程式產生的記錄資料最多:

圖表範例:依應用程式查詢記錄量。

依記錄名稱查詢記錄磁碟區

如要列出每個具有 JSON 酬載,且是針對 Google Kubernetes Engine 資源寫入的記錄項目,請使用下列查詢:

SELECT
  log_id AS log_name,
  storage_bytes
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  json_payload IS NOT NULL
  AND resource.type="k8s_container"

先前的查詢不會匯總結果,而是為每個記錄項目提供一個資料列,且該資料列包含記錄名稱和儲存的位元組數。如果將這項資料繪製成圖表,即可將寫入不同記錄的記錄資料部分視覺化:

範例圖表:依記錄名稱查詢記錄量。

上一個圖表顯示,大部分的記錄資料都會寫入名為「stdout」的記錄。

使用 bq 指令列工具,依記錄名稱查詢記錄量

您可以在透過 BigQuery Studio 頁面或 bq 指令列工具執行的查詢中,加入 storage_bytes 欄位。

下列查詢會回報每個記錄項目的記錄名稱和儲存的位元組數:

bq query --use_legacy_sql=false  'SELECT log_id as log_name,
  storage_bytes FROM `TABLE_NAME_OF_LOG_VIEW`'

這項查詢的結果類似於下列內容:

+----------+---------------+
| log_name | storage_bytes |
+----------+---------------+
| stdout   |           716 |
| stdout   |           699 |
| stdout   |           917 |
| stdout   |           704 |

每一列都對應一個記錄項目。storage_bytes 資料欄的值是該記錄項目的可計費量。

限制

只有在符合下列條件時,storage_bytes 欄位才會顯示:

  • 記錄檔 bucket 已升級,可使用記錄檔分析。
  • 查詢會在「記錄分析」頁面或任何可查詢 BigQuery 資料集的位置執行,包括「BigQuery Studio」和「Looker Studio」頁面,以及 bq 命令列工具

  • 記錄項目是在 2024 年 1 月 1 日當天或之後寫入。