排解記錄檔分析設定問題

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

錯誤訊息

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

No completion signal within allotted timeframe 錯誤訊息

輸入 SQL 查詢並選取「Run query」(執行查詢)。查詢未完成,並顯示下列錯誤訊息:

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 金鑰的資料夾執行查詢時,會顯示錯誤訊息

輸入可查詢多個記錄檔值區的 SQL 查詢,然後選取「Run query」。查詢未完成,並顯示下列錯誤訊息:

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

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

  • 設定記錄資料夾,以便使用相同的 Cloud Key Management Service (Cloud KMS) 金鑰。
  • 如果記錄值區位於相同位置,您可以設定資料夾或組織,做為記錄值區的父項資源,並使用預設的 Cloud KMS 金鑰。父項的預設鍵必須與記錄資料夾位於相同位置。在這種設定下,父項的預設鍵會對 Log Analytics 查詢產生的任何暫時性資料進行加密。詳情請參閱「Log Analytics 限制」。

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

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

FROM clause must contain exactly one log view

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

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

  • 請確認資料表名稱符合 Log Analytics 命名規則的語法。BigQuery 和 Log Analytics 對資料表名稱有不同的規定。您可以查看預設查詢,找出資料表名稱的必要語法。

  • 如果記錄值區的 Google Cloud 專案 ID、區域、值區 ID 或檢視 ID 包含半形句點字元 (.),請確認每個欄位都以單引號 (`) 包裝。

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

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

    先前的查詢假設 _Default 儲存桶位於 global 區域。

無法儲存查詢

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

當「儲存查詢」選項停用時,機構或資料夾的預設資源設定會定義機構政策不允許的位置。如要解決這個失敗問題,請機構管理員在預設資源設定中定義位置,與機構政策允許的位置相符。詳情請參閱「調整機構和資料夾的預設設定」。

如果已啟用「Save query」選項,但您無法完成對話方塊並儲存查詢,請執行下列操作:

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

無法建立數據分析檢視

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

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

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

這些權限並未包含在任何預先定義的 Cloud Logging 角色中。如要瞭解必要角色,請參閱「建立及查詢分析檢視表:事前準備」一文。

無法查詢 Analytics 檢視

您想查詢數據分析檢視畫面,但「Log Analytics」頁面中的「檢視畫面」窗格未顯示任何數據分析檢視畫面。

如要解決這項失敗問題,請嘗試下列操作:

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

    • observability.analyticsViews.{get, list}

    這些權限並未包含在任何預先定義的 Cloud Logging 角色中。如要瞭解必要角色,請參閱「建立及查詢分析檢視表:事前準備」一文。

  • 確認 Google Cloud 專案中已存在數據分析檢視。

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

您在 Google Cloud 控制台中開啟「Log Analytics」頁面,系統會顯示權限遭拒的錯誤訊息。

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

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

在「Log Analytics」頁面查看記錄項目和執行查詢所需的權限,與在「Logs Explorer」頁面查看記錄所需的權限相同。如要瞭解需要具備哪些其他角色,才能查詢使用者定義值區的檢視畫面,或查詢 _Default 記錄值區的 _AllLogs 檢視畫面,請參閱「Cloud Logging 角色」一文。

升級記錄檔值區以使用 Log Analytics 失敗

您建立記錄檔值區並選取使用記錄檔分析的選項,或是升級現有記錄檔值區以便使用記錄檔分析。升級失敗,並顯示類似以下的錯誤狀態:

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

上一個錯誤訊息表示貴機構已設定機構政策,限制可使用的地區。可升級至使用記錄檔分析的記錄檔值區必須使用 global 區域。如果您可以移除限制 global 區域使用情形的機構政策,就可以升級記錄值區。否則,您無法升級記錄檔值區。

建立連結的 BigQuery 資料集失敗

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

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

  • logging.links.create

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

如要進一步瞭解角色和權限,請參閱「使用身分與存取權管理功能控管存取權」。

刪除已連結的 BigQuery 資料集失敗

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

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

  • logging.links.delete

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

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

缺少查詢引擎設定按鈕

如果「執行查詢」按鈕旁未顯示「設定」按鈕,表示 Google Cloud 專案未啟用預留的 BigQuery 插槽。如要啟用 「設定」按鈕,請為專案設定預留的 BigQuery 時段

「Run on BigQuery」按鈕已停用

如果「在 BigQuery 上執行」按鈕顯示但已停用,表示查詢參照的記錄檢視沒有連結的資料集。如要在 BigQuery 預留時段執行查詢,請在記錄檢視畫面中建立連結的 BigQuery 資料集

沒有監控服務帳戶

您想建立警告政策,以便監控 SQL 查詢的結果。設定步驟要求您為監控服務帳戶授予 IAM 角色,但該帳戶不存在。

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

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

  1. 建立監控服務帳戶。詳情請參閱「為服務專員建立及授予角色」。

  2. 將下列角色授予 Monitoring Service 帳戶:

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

您想建立警告政策,以便監控 SQL 查詢的結果。但您會看到 PermissionDenied 錯誤,訊息開頭為 Error authenticating service account

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

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

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

記錄檔分析不會執行 Logs Explorer 所執行的簡化作業類型。

如要解決重複的記錄項目,請嘗試下列操作:

  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;