排解記錄檔分析設定問題

本文說明如何解決使用 Google Cloud 控制台的「Log Analytics」頁面時可能發生的錯誤。

錯誤訊息

本節說明您可能會看到的錯誤訊息,以及如何解決相應的錯誤狀況。

No completion signal within allotted timeframe 錯誤訊息

輸入 SQL 查詢並選取「執行查詢」。查詢未完成,且您看到下列錯誤訊息:

The query failed to execute and return results due to error: No completion signal within allotted timeframe.

如要解決這項錯誤,請執行下列任一操作:

  • 縮短查詢記錄的間隔,然後重試查詢。 舉例來說,如果查詢間隔為 14 天,請將間隔縮短為 7 天,然後執行查詢。

  • 建立連結的 BigQuery 資料集,然後從 BigQuery 介面執行查詢。BigQuery 介面支援的查詢執行時間比 Cloud Logging 介面更長。詳情請參閱查詢連結的 BigQuery 資料集

針對具有不同 CMEK 金鑰的 bucket 執行查詢時出現錯誤訊息

輸入查詢多個記錄檔值區的 SQL 查詢,然後選取「執行查詢」。查詢未完成,且您看到下列錯誤訊息:

Queries against buckets with distinct CMEK keys must have a key configured in the LogSettings.

如要解決這個問題,請採取下列任一做法:

  • 設定記錄 bucket,使其使用相同的 Cloud Key Management Service (Cloud KMS) 金鑰。
  • 如果記錄值區位於相同位置,您可以為記錄值區的父項資源 (資料夾或機構) 設定預設 Cloud KMS 金鑰。父項的預設金鑰必須與記錄 bucket 位於相同位置。採用這項設定後,上層的預設金鑰會加密 Log Analytics 查詢產生的任何暫時資料。詳情請參閱「記錄分析限制」。

FROM 子句中只能包含一個檢視區塊錯誤訊息

您在 Google Cloud 控制台的「記錄檔分析」頁面查詢窗格中輸入 SQL 查詢,但 SQL 剖析器顯示下列錯誤:

FROM clause must contain exactly one log view

如果 FROM 陳述式中指定的資料表無法解析為特定記錄檢視區塊,系統就會回報先前的錯誤。

如要解決這項錯誤,請確認資料表名稱的語法正確無誤:

  • 請確認資料表名稱符合 Log Analytics 命名架構的語法規定。BigQuery 和記錄檔分析對資料表名稱有不同的規定。如要查看資料表名稱的必要語法,請查看預設查詢

  • 如果記錄值區的 Google Cloud 專案 ID、區域、值區 ID 或檢視區塊 ID 包含句號字元 (.),請務必以單一反引號 (`) 包住每個欄位。

    舉例來說,如果專案 ID 為 Google Cloud ,如要查詢 _Default 記錄值區的 _AllLogs 檢視區塊,請使用下列語法指定資料表:example.com:bluebird

    
    SELECT *
    FROM `example.com:bluebird`.`global`.`_Default`.`_AllLogs`
    

    先前的查詢假設 _Default bucket 位於 global 區域。

無法儲存查詢

您想儲存目前的查詢,因此執行查詢,然後按一下「儲存」「儲存查詢」選項已停用,或您無法完成對話方塊步驟。

如果「儲存查詢」選項已停用,表示機構或資料夾的預設資源設定定義的位置不符合機構政策規定。如要解決這項失敗問題,請要求貴機構的管理員在預設資源設定中定義位置,該位置必須符合貴機構政策允許的位置。詳情請參閱「調整機構和資料夾的預設設定」。

如果已啟用「儲存查詢」選項,但無法完成對話方塊並儲存查詢,請按照下列步驟操作:

  1. 確認查詢不含語法錯誤。 你只能儲存有效查詢。
  2. 選用:將查詢複製到剪貼簿。
  3. 請重新載入頁面。
  4. 如果您已將查詢複製到剪貼簿,請將查詢貼到「Query」(查詢) 窗格,執行查詢,然後執行儲存作業。

無法建立 Analytics 檢視

您想建立數據分析檢視畫面,因此輸入並執行 SQL 查詢,然後按一下「儲存」,但「另存為數據分析檢視畫面」選項已停用。

如要解決這個問題,請確保 IAM 角色具備下列權限:

  • observability.analyticsViews.{get, list, create, update, delete}

任何預先定義的 Cloud Logging 角色都不具備這些權限。如要瞭解必要角色,請參閱「建立及查詢 Analytics 檢視區塊:事前準備」。

無法查詢 Analytics 資料檢視

您想查詢數據分析檢視區塊,但「Log Analytics」(記錄檔分析) 頁面的「Views」(檢視區塊) 窗格未顯示任何數據分析檢視區塊。

如要解決這項問題,請嘗試下列方法:

  • 確認 IAM 角色具備下列權限:

    • observability.analyticsViews.{get, list}

    任何預先定義的 Cloud Logging 角色都不具備這些權限。如要瞭解必要角色,請參閱「建立及查詢 Analytics 檢視區塊:事前準備」。

  • 確認專案中存在分析資料檢視。 Google Cloud

無法存取「記錄檔分析」頁面

您在 Google Cloud 控制台中開啟「Log Analytics」(記錄檔分析) 頁面,但系統顯示權限遭拒的錯誤訊息。

如要取得載入「記錄檔分析」頁面、執行查詢及查看記錄檔所需的權限,請要求管理員在專案中授予您下列 IAM 角色:

  • 查看記錄: 「記錄檢視器」 (roles/logging.viewer)
  • 在自訂記錄檔儲存空間中查看記錄: 「記錄檔檢視存取者」 (roles/logging.viewAccessor)

您或許還可透過自訂角色或記錄預先定義的角色取得必要權限。

如要在「記錄檔分析」頁面中查看記錄項目及執行查詢,所需權限與在「記錄檔探索工具」頁面中查看記錄檔相同。如要瞭解查詢使用者定義值區中的檢視畫面,或查詢 _Default 記錄檔值區的 _AllLogs 檢視畫面時,需要哪些其他角色,請參閱「Cloud Logging 角色」一文。

無法升級記錄檔 bucket 以使用記錄檔分析

建立記錄檔 bucket 並選取使用記錄檔分析的選項,或升級現有記錄檔 bucket 以使用記錄檔分析。升級失敗,並出現類似下列的錯誤狀況:

Failed precondition (HTTP 400): Constraint "my-constraint" violated for PROJECT_ID  with location global.

先前的錯誤訊息指出貴機構已設定機構政策,限制可使用的區域。如要升級記錄檔 bucket 以使用記錄檔分析,必須使用 global 區域。如果可以移除限制使用 global 區域的機構政策,即可升級記錄值區。否則無法升級記錄檔值區。

無法建立連結的 BigQuery 資料集

您編輯記錄檔 bucket 來建立連結的 BigQuery 資料集,或是建立新的記錄檔 bucket 並選取建立連結資料集的選項,但系統未建立連結的資料集。

如要解決這項錯誤,請要求系統管理員授予您 Google Cloud 專案的 IAM 角色,該角色須具備下列權限:

  • logging.links.create

先前的權限包含在「記錄檔管理員」(roles/logging.admin) 和「記錄檔設定寫入者」(roles/logging.configWriter) 角色中。

如需角色和權限的相關資訊,請參閱「使用身分與存取權管理功能控管存取權」一文。

無法刪除連結的 BigQuery 資料集

您不再需要連結的資料集,但刪除該資料集的選項已停用。

如要解決這項錯誤,請要求系統管理員授予您 Google Cloud 專案的 IAM 角色,該角色須具備下列權限:

  • logging.links.delete

先前的權限包含在「記錄檔管理員」(roles/logging.admin) 和「記錄檔設定寫入者」(roles/logging.configWriter) 角色中。

您可以使用這項權限,從 Google Cloud 控制台的「記錄儲存空間」頁面刪除已連結的資料集。如要進一步瞭解角色和權限,請參閱「使用身分與存取權管理功能控管存取權」一文。

缺少查詢引擎設定按鈕

如果「執行查詢」按鈕旁未顯示「設定」按鈕,表示您的 Google Cloud 專案未啟用預留 BigQuery 查詢空間。如要啟用「設定」按鈕,請為專案設定預留的 BigQuery 配額

「在 BigQuery 執行」按鈕已停用

如果系統顯示「在 BigQuery 中執行」按鈕,但按鈕處於停用狀態,表示查詢參照的記錄檢視區塊沒有連結的資料集。如要在 BigQuery 預留空間上執行查詢,請在記錄檔檢視區中建立連結的 BigQuery 資料集

沒有監控服務帳戶

您想建立快訊政策,監控 SQL 查詢結果。設定步驟要求您將 IAM 角色授予監控服務帳戶,但該帳戶不存在。

監控服務帳戶是由Google Cloud建立及管理,因此稱為服務代理人。設定需要帳戶的資源或服務時,系統會自動建立帳戶。舉例來說,如果您建立 Pub/Sub 通知管道,系統可能會因此建立監控服務帳戶。

如要建立監控服務帳戶,並授予該帳戶 SQL 快訊政策所需的權限,請按照下列步驟操作:

  1. 建立監控服務帳戶。詳情請參閱建立服務代理程式並授予角色

  2. 將下列角色授予監控服務帳戶:

監控服務帳戶權限遭拒錯誤

您想建立快訊政策,監控 SQL 查詢結果。不過,您會看到 PermissionDenied 錯誤,且訊息開頭為 Error authenticating service account

如要解決這項問題,請將下列角色授予 Monitoring 服務帳戶:

記錄檔分析結果中有重複的記錄項目

您執行的查詢會計算或回報重複項目。 由於 Logs Explorer 會根據記錄名稱、時間戳記和插入 ID 移除重複項目,因此您預期 Log Analytics 會在執行查詢前,先移除重複的記錄項目。

記錄檔分析不會執行與記錄檔探索工具相同的重複資料刪除作業。

如要解決記錄項目重複的問題,請嘗試下列方法:

  1. 判斷重複的記錄檔項目是否具有不同的接收時間戳記值。如果時間戳記不同,表示相同資料多次寫入記錄。

    如要解決重複寫入的問題,請調查記錄整合項目,找出錯誤訊息或設定錯誤。

  2. 如果值區已設定為使用 Cloud Key Management Service 金鑰,請確認您在配額範圍內,且金鑰一律可存取。如果超出配額或失去金鑰存取權,可能會導致記錄項目重複。

    如要解決這些失敗問題,請確保您未超出配額,且金鑰可供存取。

  3. 修改查詢,移除重複的記錄項目。

    舉例來說,假設 JSON 酬載包含 fieldAfieldB,前者是字串,後者是數值。此外,假設 JSON 酬載包含標示為 server 的欄位,其中包含字串。接著,請思考以下查詢:

    SELECT
      JSON_VALUE(json_payload.fieldA) AS fieldA
      SUM(IFNULL(SAFE_CAST(JSON_VALUE(json_payload.fieldB) AS INT64), 0)) AS sum_fieldB
    FROM
      `TABLE_NAME_OF_LOG_VIEW`
    WHERE
      JSON_VALUE(json_payload.server) = "test"
    GROUP BY
      fieldA;
    

    您可以修改查詢,移除重複的記錄項目,系統會檢查記錄名稱、時間戳記和插入 ID,判斷記錄項目是否重複:

    WITH
      deduplicated AS (
      SELECT
        JSON_VALUE(json_payload.fieldA) AS fieldA
        IFNULL(SAFE_CAST(JSON_VALUE(json_payload.fieldB) AS INT64), 0) AS fieldB
      FROM
        `TABLE_NAME_OF_LOG_VIEW` a
      WHERE
        JSON_VALUE(json_payload.server) = "test"
      QUALIFY
        ROW_NUMBER() OVER (PARTITION BY a.log_name, a.timestamp, a.insert_id ) = 1 )
    
    SELECT
      fieldA,
      SUM(fieldB) AS sum_fieldB
    FROM
      deduplicated
    GROUP BY
      fieldA;