排解 Cloud Logging 中缺少 Apigee 記錄的問題

您正在查看 ApigeeApigee Hybrid 說明文件。
這個主題沒有對應的 Apigee Edge 說明文件。

問題

將 Apigee API 記錄傳送至 Cloud Logging 是常見用途。這通常是透過 MessageLogging 政策或 ServiceCallout 政策完成。無論是哪種情況,Apigee 都會使用 Cloud Logging API 寫入記錄。

在某些情況下,您可能不會在 Cloud Logging 中看到 Apigee API 記錄。

錯誤訊息

系統不會顯示錯誤訊息。

可能的原因

原因 說明 適用於以下裝置的疑難排解操作說明:
未啟用 Cloud Logging API 請確認您已在 Apigee 機構的 Google Cloud專案中啟用 Cloud Logging API。 Apigee 和 Apigee Hybrid
未啟用 IAM Service Account Credentials API 請確認您已在 Apigee 機構的 Google Cloud專案中啟用 IAM 服務帳戶憑證 API。 Apigee 和 Apigee Hybrid
Proxy Service 帳戶設定錯誤 在部署期間 (Apigee) 或在執行階段設定 (Apigee hybrid) 中使用的服務帳戶可能已遭到刪除/設定錯誤。 Apigee 和 Apigee Hybrid
政策設定中的專案名稱不正確 政策設定中的專案名稱與 Apigee 機構相關聯的名稱不同。 Apigee 和 Apigee Hybrid
執行階段服務帳戶缺少角色/權限 針對 Apigee hybrid,請確認執行階段服務帳戶具有「Service Account Token Creator」角色。這是使用 Google 驗證機制的必要條件。 Apigee Hybrid
記錄項目大小超過 Cloud Logging 允許的限制 Cloud Logging 的項目大小上限為 256 KB,無法變更。 Apigee 和 Apigee Hybrid
Cloud Logging API 的每分鐘寫入要求配額用盡 請確認您在 Google Cloud 專案中,未超過 Cloud Logging API 的每分鐘寫入要求配額值。 Apigee 和 Apigee Hybrid

原因:未啟用 Cloud Logging API

診斷

確認已啟用 Cloud Logging API。如要瞭解如何在 Google Cloud 控制台中列出已啟用的 API 和服務,請參閱「 列出已啟用的服務」一文。

解決方法

如果尚未啟用 Cloud Logging API,請按照 啟用服務中的步驟進行。啟用 API 可能需要幾分鐘的時間。

如果您無法解決 Cloud Logging API 未啟用導致 Cloud Logging 中看不到記錄的問題,請參閱「必須收集診斷資訊」一文。

原因:未啟用 IAM Service Account Credentials API

診斷

確認已啟用 IAM 服務帳戶憑證 API。如要瞭解如何在 Google Cloud 控制台中列出已啟用的 API 和服務,請參閱「 列出已啟用的服務」一文。

解決方法

如果尚未啟用 IAM Service Account Credentials API,請按照「 啟用服務」一文中的步驟操作。啟用 API 可能需要幾分鐘的時間。

如果您無法解決未啟用 IAM 服務帳戶憑證 API 而導致 Cloud Logging 中沒有記錄的情況,請參閱「必須收集診斷資訊」。

原因:代理服務帳戶設定錯誤

診斷

Apigee

  1. 找出服務帳戶名稱。
    1. 使用 Apigee UI
      1. 依序按一下「Develop」>「API Proxies」,然後點選 Proxy 名稱。 例如 TurboBooks
      2. 在「部署」下方,會顯示「服務帳戶」名稱。

    2. 使用 Apigee API

      請發出下列 Apigee API 呼叫:

      curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/environments/ENV_NAME/apis/PROXY_NAME/revisions/REVISION_NUMBER/deployments"

      更改下列內容:

      • ORG_NAME:機構名稱。例如:apigee-example-org
      • ENV_NAME:環境名稱。例如:myenv
      • PROXY_NAME:Proxy 的名稱。例如:TurboBooks
      • REVISION_NUMBER:修訂版本編號。例如:4

      例如:

      curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/apigee-example-org/environments/myenv/apis/TurboBooks/revisions/4/deployments"

      系統會傳回類似以下的內容:

      {
        "environment": "myenv",
        "apiProxy": "TurboBooks",
        "revision": "4",
        "deployStartTime": "1687408163394",
        "state": "READY",
        "instances": [
          {
            "instance": "apiginstance",
            "deployedRevisions": [
              {
                "revision": "4",
                "percentage": 100
              }
          .
          .
          .
          .
        "serviceAccount": "projects/-/serviceAccounts/envsa-79@apigee-example-org.iam.gserviceaccount.com"
      }

      其中 serviceAccount 是與 API 代理相關聯的服務帳戶。

  2. 請針對這個 Proxy 服務帳戶驗證下列事項:
    1. 這個服務帳戶必須位於您用來建立 Apigee 機構的 Google Cloud 專案中。例如: apigee-example-org.
    2. 部署 Proxy 的使用者擁有此服務帳戶的 iam.serviceAccounts.actAs 權限。
    3. 代理服務帳戶具備呼叫 Cloud Logging 服務所需的權限。

Apigee Hybrid

針對 Apigee hybrid,除了 Apigee 中列出的步驟之外,請開啟 overrides.yaml 檔案,並確保每個需要 Google 驗證的環境下都指定了服務帳戶。例如:

envs:
  - name: "ENVIRONMENT_NAME"
    serviceAccountPaths:
      runtime: "KEY_FILE_PATH"

更改下列內容:

  • ENVIRONMENT_NAME:環境名稱。例如 myenv
  • KEY_FILE_PATH:執行階段服務帳戶金鑰檔案的路徑。通常在安裝期間,您已在 建立服務帳戶中建立服務帳戶。

解決方法

  1. 如果服務帳戶不在您用來建立 Apigee 機構的 Google Cloud 專案中,則必須在相同的 Google Cloud 專案中建立服務帳戶並加以使用。這點也提到在 使用 Google 驗證
  2. 如果部署 Proxy 的使用者沒有此服務帳戶的 iam.serviceAccounts.actAs 權限,請參閱「 授予單一角色」一文。
  3. 如果 Proxy 服務帳戶沒有呼叫 Cloud Logging 服務所需的權限,請參閱「 授予單一角色」一文。

如果本文件中的步驟無法解決 Apigee 和 Apigee hybrid 的 Proxy 服務帳戶設定不正確的問題,請參閱「必須收集診斷資訊」。

原因:政策設定中的專案名稱不正確

診斷

如果您使用 MessageLogging 政策將記錄檔傳送至 Cloud Logging:

  1. Apigee UI 中,依序按一下「Develop」>「API Proxies」>「API proxy name」>「Develop」分頁。
  2. 在「Code」窗格中,找出 <CloudLogging> 元素。
  3. 確認 <LogName> 值是否為正確的專案名稱:
    <CloudLogging>
      <LogName>projects/PROJECT_ID/logs/LOG_ID</LogName>
    </CloudLogging>

    更改下列內容:

    • PROJECT_ID: Google Cloud 專案 ID。例如 apigee-example-org
    • LOG_ID:Cloud Logging 記錄 ID。例如 apigee-logs

解析度

如果 <LogName> 元素中的值不正確,請更新為正確的值。

如果本文件中的步驟無法解決問題,請參閱「必須收集診斷資訊」一文。

原因:缺少執行階段服務帳戶的角色/權限

診斷

請確認執行階段能模擬 Proxy 服務帳戶。

執行下列 gcloud 指令,確認執行階段服務帳戶是否在代理服務帳戶上具備 iam.serviceAccountTokenCreator 角色:

gcloud iam service-accounts get-iam-policy PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com

更改下列內容:

  • PROXY_SA_NAME:Proxy 服務帳戶名稱。例如:envsa-79
  • PROJECT_ID: Google Cloud 專案 ID。例如:apigee-example-org

系統會傳回類似以下的內容:

- members:
  - serviceAccount:RUNTIME_SA_NAME@PROJECT_ID.iam.gserviceaccount.com
  role: roles/iam.serviceAccountTokenCreator

更改下列內容:

RUNTIME_SA_NAME:執行階段服務帳戶的 ID。例如:apigee-runtime

例如:

gcloud iam service-accounts get-iam-policy envsa-79@apigee-example-org.iam.gserviceaccount.com
  bindings:
  - members:
    - user:222larabrown@gmail.com
    role: roles/iam.serviceAccountAdmin
  - members:
    - serviceAccount:apigee-runtime@apigee-example-org.iam.gserviceaccount.com
    role: roles/iam.serviceAccountTokenCreator
  - members:
    - user:222larabrown@gmail.com
    role: roles/iam.serviceAccountUser
  etag: BwX-shcrL3o=
  version: 1

如果您在輸出內容中沒有看到 iam.serviceAccountTokenCreator 角色和預期成員,請按照解決方法中的步驟授予正確的角色。

解決方法

執行下列 gcloud 指令,授予執行階段服務帳戶代理服務帳戶的 iam.serviceAccountTokenCreator 角色:

gcloud iam service-accounts add-iam-policy-binding \
PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
--member=serviceAccount:RUNTIME_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
--role=roles/iam.serviceAccountTokenCreator

更改下列內容:

  • PROXY_SA_NAME:Proxy 服務帳戶名稱。例如:envsa-79
  • PROJECT_ID: Google Cloud 專案 ID。例如 apigee-example-org
  • RUNTIME_SA_NAME:執行階段服務帳戶的 ID。例如:apigee-runtime

如果本文中的步驟無法解決問題,請參閱「必須收集診斷資訊」一節。

原因:記錄項目大小超過記錄記錄的許可上限

診斷

如果您確認本文所述的其他原因並非問題所在,但仍未在 Cloud Logging 中看到部分記錄檔,則可能是 Apigee 傳送的部分記錄項目大小超過 256 KB,而這正是 Cloud Logging 記錄項目大小的硬性限制。詳情請參閱「 記錄用量限制」。

解決方法

這是 Cloud Logging 上無法設定的限制,目前已知的唯一解決方法是讓從 Apigee 傳送的記錄項目大小保持在 256 KB 以下。如果您記錄的酬載可能會超過此限制,請不要記錄這類酬載,或是瞭解在達到限制後,系統將不會記錄部分交易。

如果本文中的步驟無法解決問題,請參閱「必須收集診斷資訊」一節。

原因:Cloud Logging API 的每分鐘寫入要求配額用盡

診斷

有時客戶會發現,雖然要求會顯示在偵錯工作階段中,但要求不會記錄到記錄檢視器中,即使在負載平衡器記錄中也會出現。

觀察到的訊息遺失情形可能是因為專案內的配額用盡。Cloud Logging API 的頻率限制為每分鐘 120,000 個寫入要求。如果超出這個配額,可能會導致訊息遭到捨棄。詳情請參閱「 查看及管理配額」。

這些配額可以在 Google Cloud console 中提高,客戶可以按照提高配額的說明文件操作。

解決方法

請按照下列程序提高配額。

  1. 配額」頁面 中使用核取方塊選取「Cloud Logging API」,然後按一下「編輯配額」。 如果您收到錯誤訊息 Edit is not allowed for this quota,可以與 Google Cloud Customer Care 聯絡,要求變更配額。請注意,您必須先為 Google Cloud 專案啟用帳單功能,才能點選核取方塊。
  2. 在「配額變更」面板中選取服務來展開檢視畫面,然後填寫「新限制」和「要求」說明欄位。按一下 [Next] (下一步)
  3. 在「聯絡詳細資料」面板中填妥表單,然後按一下「提交要求」

詳情請參閱這份 說明文件 ,瞭解配額與限制。

必須收集診斷資訊

如果問題在您按照上述操作說明後仍未解決,請收集下列診斷資訊,然後與 Google Cloud Customer Care 聯絡:

  • Apigee 機構。
  • 發生問題的環境和 API Proxy。
  • 下載的偵錯工作階段 (會提供上述所有資訊)。
  • API Proxy 中傳送記錄至 Cloud Logging 的特定政策名稱。
  • Apigee Hybrid:overrides.yaml 檔案。