排解 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 機構的專案中啟用 Cloud Logging API。 Google Cloud Apigee 和 Apigee Hybrid
未啟用 IAM Service Account Credentials API 請確認您已在 Apigee 機構的專案中啟用 IAM 服務帳戶憑證 API。 Google Cloud Apigee 和 Apigee Hybrid
Proxy 服務帳戶設定錯誤 部署時 (Apigee) 或執行階段設定 (Apigee Hybrid) 中使用的服務帳戶可能已遭刪除/設定錯誤。 Apigee 和 Apigee Hybrid
政策設定中的專案名稱不正確 政策設定中的專案名稱與 Apigee 機構相關聯的專案名稱不同。 Apigee 和 Apigee Hybrid
執行階段服務帳戶缺少角色/權限 如果是 Apigee Hybrid,請確認執行階段服務帳戶具備「服務帳戶符記建立者」角色。這是使用 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 中查看記錄,請參閱「必須收集診斷資訊」。

原因:Proxy 服務帳戶設定錯誤

診斷

Apigee

  1. 找出服務帳戶名稱。
    1. 使用 Apigee UI
      1. 依序點選「開發」>「API Proxy」,然後點選 Proxy 名稱。 例如「TurboBooks」TurboBooks
      2. 「Deployments」(部署作業) 下方會顯示「Service Account」(服務帳戶) 名稱。

    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. Proxy 服務帳戶具備呼叫 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. 在「程式碼」窗格中,找出 <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 指令,確認執行階段服務帳戶是否在 Proxy 服務帳戶上具有 iam.serviceAccountTokenCreator 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. 在「配額變更」面板中選取服務來展開檢視畫面,然後填寫「新上限」和「要求」說明欄位。點選「下一步」
  3. 在「聯絡人詳細資料」面板中填寫表單,然後按一下「提交要求」

詳情請參閱 配額與限制說明文件

必須收集診斷資訊

如果按照上述指示操作後問題仍未解決,請收集下列診斷資訊,然後與 Google Cloud 客服團隊聯絡:

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