啟用分散式追蹤記錄

本頁內容適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

本頁面說明如何為 Apigee 執行階段設定分散式追蹤。如果您剛開始使用分散式追蹤系統,想瞭解更多資訊,請參閱「瞭解分散式追蹤記錄」。

如要進一步瞭解本頁面使用的術語,請參閱 Cloud Trace 總覽

簡介

分散式追蹤系統可讓您追蹤軟體系統中的要求,這些要求會分散在多個應用程式、服務和資料庫,以及 Proxy 等中介程式。這些追蹤系統會產生報表,顯示要求在每個步驟所花費的時間。追蹤報表也能詳細列出要求期間呼叫的各種服務,讓您深入瞭解軟體系統中每個步驟的運作情形。

Apigee Edge 中的追蹤工具和 Apigee 中的偵錯工具,有助於排解 API Proxy 問題及監控 API Proxy。不過,這些工具不會將任何資料傳送至分散式追蹤伺服器,例如 Cloud TraceJaegerOpenTelemetry Collector

如要在分散式追蹤記錄報表中查看 Apigee 執行階段資料,您必須在 Apigee 執行階段中明確啟用分散式追蹤記錄。啟用追蹤功能後,執行階段就能將追蹤資料傳送至分散式追蹤伺服器,並參與現有的追蹤作業。因此,您可以在單一位置查看 Apigee 生態系統內外的資料。

您可以在分散式追蹤報表中查看下列資訊:

  • 整個流程的執行時間。
  • 收到要求的時間。
  • 要求傳送至目標的時間。
  • 從目標收到回應的時間。
  • 流程中每項政策的執行時間。
  • 服務呼叫和目標流程的執行時間。
  • 將回應傳送給用戶端的時間。

在分散式追蹤報表中,您可以將流程的執行詳細資料視為「範圍」。 時距是指追蹤記錄中流程所花費的時間。執行流程所需的時間會顯示為執行流程中各項政策所需時間的總和。您可以將下列每個流程視為個別範圍:

階段 端點 Flow
要求 Proxy Preflow
PostFlow
目標 前置流程
PostFlow
回應 Proxy Preflow
PostFlow
目標 前置流程
PostFlow

啟用分散式追蹤後,Apigee 執行階段預設會追蹤一組預先定義的變數。詳情請參閱「追蹤報表中的預設追蹤變數」。您可以使用 TraceCapture 政策擴充預設的執行階段行為,並追蹤其他流程、政策或自訂變數。詳情請參閱 TraceCapture 政策。

追蹤報表中的預設追蹤變數

適用於:OpenTelemetry 和 OpenCensus 設定。

啟用分散式追蹤記錄後,您可以在追蹤記錄報表中查看下列預先定義的變數。變數會顯示在下列範圍中:

  • RESP_SENT:從目標伺服器收到回應後,系統會新增這個範圍。其中包含「RESP_SENT」範圍中「變數」下方列出的目標端屬性。
  • PROXY_POST_RESP_SENT: 這個範圍會在 Proxy 回應傳送至用戶端後新增。其中 包含PROXY_POST_RESP_SENT」時距內「變數」 下方列出的 Proxy 端屬性。
  • EVENT_FLOW_RESPEVENT_FLOW_END:這些範圍是為處理串流伺服器傳送事件 (SSE) 回應的 API Proxy 新增。EVENT_FLOW_RESP 標記 SSE 回應流程 (每個回覆訊息執行一次)。EVENT_FLOW_END 表示 SSE 串流的結尾。這些範圍目前不會攜帶預設屬性,而是會以具名範圍的形式出現在追蹤記錄中,讓追蹤報告顯示 Proxy 的 SSE 階段。

預設資源屬性

適用對象:僅限 OpenTelemetry。本節不適用於 OpenCensus 設定。

使用 OpenTelemetry 和 OTLP 追蹤記錄通訊協定時,Apigee 執行階段會將下列 OpenTelemetry 語意慣例資源屬性附加至每個發出的時距:

屬性 說明
service.name 固定值 apigee.googleapis.com
service.instance.id 發出範圍的訊息處理器執行個體 ID。 如果執行階段 Pod 身分無法使用,則會省略這項資訊。
cloud.provider 一律 gcp
cloud.platform 一律 gcp_apigee
cloud.region 代管 Apigee 執行階段的區域,如果未設定任何區域,則會回溯至 global
cloud.resource_id 完整 Apigee 資源路徑,格式為 /apigee.googleapis.com/organizations/ORG/environments/ENV
gcp.apigee.organization Apigee 機構名稱。
gcp.apigee.environment Apigee 環境名稱。
gcp.project_id 專案 ID。 Google Cloud 只有在匯出器為 OPEN_TELEMETRY_CLOUD_TRACE 時才會發出。

時距種類

適用於:OpenTelemetry 和 OpenCensus 設定。

Apigee 會發出具有下列 SpanKind 值的範圍:

SpanKind 以這種方式發出的 span
SERVER 根 Proxy 範圍 (每個 Proxy 叫用一次),代表 Apigee 執行階段收到的傳入要求。
INTERNAL 所有其他範圍,包括流程範圍 (例如 RESP_SENTPROXY_POST_RESP_SENT) 和每個政策步驟範圍 (例如 AssignMessage、VerifyAPIKey、ServiceCallout、JavaScript、KeyValueMapOperations)。

Apigee 不會發出 CLIENTPRODUCERCONSUMER 範圍。具體來說,從 Apigee 到目標後端的輸出呼叫不會以個別 CLIENT 時距發出;輸出呼叫會顯示在現有的 INTERNAL 流程時距內,且 traceparent 標頭會傳播至目標,以便目標服務發出自己的 SERVER 時距並加入相同追蹤記錄。

RESP_SENT 範圍內的變數

下列變數會顯示在 RESP_SENT 範圍中。 「OTEL 語意變數」欄會顯示 spanSemantics 設為 OTEL 時使用的 OpenTelemetry 語意慣例名稱;「屬性」欄會顯示舊版屬性名稱。

舊版變數 OTEL 語意變數 屬性 說明
REQUEST_URL url.full request.url Proxy 收到的傳入用戶端要求完整網址。
REQUEST_VERB http.request.method request.verb 傳入用戶端要求的 HTTP 動詞 (例如 GETPOST)。
RESPONSE_STATUS_CODE http.response.status_code response.status.code 目標伺服器傳回的回應狀態碼。
ROUTE_NAME gcp.apigee.route.name route.name 選取這項要求目標的路由規則名稱。
ROUTE_TARGET gcp.apigee.route.target route.target 路由規則選取的目標端點名稱。
TARGET_BASE_PATH gcp.apigee.target.basepath target.basepath 目標網址的基礎路徑部分。
TARGET_HOST server.address target.host Proxy 連線的目標伺服器主機名稱。
TARGET_IP server.address target.ip 目標伺服器解析的 IP 位址。
TARGET_NAME gcp.apigee.target.name target.name API Proxy 中定義的目標端點名稱。
TARGET_PORT server.port target.port 用來連線至目標伺服器的 TCP 通訊埠。
TARGET_RECEIVED_END_TIMESTAMP gcp.apigee.target.received_end_timestamp target.received.end.timestamp Proxy 結束接收目標伺服器回應的時間戳記 (以 Epoch 紀元時間起算的毫秒數表示)。
TARGET_RECEIVED_START_TIMESTAMP gcp.apigee.target.received_start_timestamp target.received.start.timestamp Proxy 開始接收目標伺服器回應的時間戳記 (Epoch 毫秒)。
TARGET_SENT_END_TIMESTAMP gcp.apigee.target.sent_end_timestamp target.sent.end.timestamp Proxy 結束將要求傳送至目標伺服器的時間戳記 (以毫秒為單位的訓練週期)。
TARGET_SENT_START_TIMESTAMP gcp.apigee.target.sent_start_timestamp target.sent.start.timestamp Proxy 開始將要求傳送至目標伺服器的時間戳記 (Epoch 毫秒)。
TARGET_SSL_ENABLED gcp.apigee.target.ssl_enabled target.ssl.enabled 布林值,指出連線至目標伺服器時是否使用 TLS。
TARGET_URL url.full target.url Proxy 連線的目標伺服器完整網址。

<0x0A>PROXY_POST_RESP_SENT 範圍中的變數

下列變數會顯示在 PROXY_POST_RESP_SENT 範圍中。「OTEL 語意變數」欄會顯示 spanSemantics 設為 OTEL 時使用的 OpenTelemetry 語意慣例名稱;「屬性」欄則會顯示舊版屬性名稱。

舊版變數 OTEL 語意變數 屬性 說明
API_PROXY_REVISION gcp.apigee.proxy.revision apiproxy.revision 處理要求的 API Proxy 修訂版本號碼。
APIPROXY_NAME gcp.apigee.proxy.name apiproxy.name 處理要求的 API Proxy 名稱。
CLIENT_RECEIVED_END_TIMESTAMP gcp.apigee.client.received_end_timestamp client.received.end.timestamp Proxy 結束接收用戶端要求時的時間戳記 (以 Epoch 毫秒為單位)。
CLIENT_RECEIVED_START_TIMESTAMP gcp.apigee.client.received_start_timestamp client.received.start.timestamp Proxy 開始接收用戶端要求時的時間戳記 (以 Epoch 紀元時間起算的毫秒數表示)。
CLIENT_SENT_END_TIMESTAMP gcp.apigee.client.sent_end_timestamp client.sent.end.timestamp Proxy 結束將回應傳送給用戶端的時間戳記 (以毫秒為單位的紀元時間)。
CLIENT_SENT_START_TIMESTAMP gcp.apigee.client.sent_start_timestamp client.sent.start.timestamp Proxy 開始將回應傳送給用戶端的時間戳記 (Epoch 毫秒)。
ENVIRONMENT_NAME gcp.apigee.environment environment.name 執行 Proxy 的 Apigee 環境名稱。
FAULT_SOURCE gcp.apigee.fault_source message.header.X-Apigee-fault-source Proxy 執行期間發生錯誤時的故障來源。只會在錯誤流程中填入。
IS_ERROR gcp.apigee.is_error is.error 布林值,指出 Proxy 執行是否以錯誤流程結束。
MESSAGE_ID gcp.apigee.message.id message.id Apigee 指派給要求的專屬 ID,可用於建立記錄和追蹤範圍的關聯。
MESSAGE_STATUS_CODE http.response.status_code message.status.code 最終回應狀態碼,包括沒有目標的呼叫和錯誤流程。
PROXY_BASE_PATH http.route proxy.basepath 與傳入要求相符的 API Proxy 基準路徑。
PROXY_CLIENT_IP client.address proxy.client.ip 傳送要求給 Proxy 的用戶端 IP 位址。
PROXY_NAME gcp.apigee.proxy.name proxy.name API Proxy 中處理要求的 Proxy 端點名稱。
PROXY_PATH_SUFFIX url.path proxy.pathsuffix 要求網址路徑中,Proxy 底層路徑後方的部分。
PROXY_URL url.full proxy.url 從用戶端收到的 Proxy 端點完整網址。

支援的分散式追蹤系統

您可以設定 Apigee 執行階段,將追蹤資料傳送至下列分散式追蹤系統:

分散式追蹤系統 說明
搭配 OpenTelemetry 使用 Cloud Trace

非常適合想使用 OpenTelemetry 進行簡單設定,且主要或唯一追蹤後端是 Cloud Trace 的使用者。

如要使用 OpenTelemetry 將追蹤記錄資料傳送至 Cloud Trace,請按照下列步驟操作:

  1. 設定 Apigee 執行階段的 Cloud Trace
  2. 使用 OpenTelemetry 為 Cloud Trace 啟用分散式追蹤
OpenTelemetry Collector

管理自己的 OpenTelemetry Collector,控管追蹤記錄資料的收集和處理作業。如果您需要將資料傳送至多個系統 (包括非 Google 系統),或自訂資料的處理、分組或強化方式,這就是理想做法。

如要將追蹤資料傳送至 OpenTelemetry Collector,請執行下列操作:

  1. 部署及管理 OpenTelemetry Collector,詳情請參閱「OpenTelemetry Collector」。
  2. 為 OpenTelemetry 收集器啟用分散式追蹤記錄

如要瞭解啟用這個選項前必須滿足的網路可連線性、TLS 和傳輸需求,請參閱「使用 OpenTelemetry Collector 時的注意事項」。

搭配 OpenCensus 使用 Cloud Trace

如要使用 OpenCensus 將追蹤資料傳送至 Cloud Trace,請執行下列操作:

  1. 為 Cloud Trace (OpenCensus) 設定 Apigee 執行階段
  2. 使用 OpenCensus 為 Cloud Trace 啟用分散式追蹤
搭配 OpenCensus 使用 Jaeger

如要使用 OpenCensus 將追蹤記錄資料傳送至 Jaeger,請為 Jaeger 啟用分散式追蹤

環境變數

本頁的程序會使用下列環境變數。建議您先在環境中設定這些變數,再開始作業。

TOKEN="Authorization: Bearer $(gcloud auth application-default print-access-token)"
ENV_NAME=YOUR_ENVIRONMENT_NAME
PROJECT_ID=YOUR_GOOGLE_CLOUD_PROJECT_ID

其中:

  • TOKEN 定義含持有人權杖的驗證標頭。呼叫 Apigee API 時,您會使用這個標頭。詳情請參閱「print-access-token」指令的參考頁面。
  • ENV_NAME 是貴機構中某個環境的名稱。
  • PROJECT_ID 是 Google Cloud 專案的 ID。

為 OpenTelemetry 或 OpenCensus 設定 Apigee 執行階段

Apigee 執行階段支援兩種追蹤標準:OpenTelemetry (建議用於新部署作業) 和 OpenCensus。選擇適合您環境的追蹤標準,然後按照下方章節中的對應設定步驟操作。

對於 OpenTelemetry,Apigee 執行階段會辨識追蹤內容標頭格式,包括 W3Ctraceparenttracestatebaggage 標頭。

設定 Cloud Trace (OpenTelemetry) 的必要條件

Apigee (ApigeeX) 執行階段支援使用 Cloud Trace 和 OpenTelemetry 進行分散式追蹤。如果您使用客戶管理的 OpenTelemetry Collector,可以略過本節,直接前往「為 OpenTelemetry Collector 啟用分散式追蹤功能」。

設定 Cloud Trace 適用的 ApigeeX 執行階段

如要為 Cloud Trace 設定 Apigee 執行階段,您的 Google Cloud 專案必須啟用下列 API:

啟用這些 API 後,您的 Google Cloud 專案就能透過 OpenTelemetry 接收來自已驗證來源的追蹤資料。

如要啟用 API,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「API 和服務」

    前往「APIs and Services」(API 和服務) 頁面

  2. 按一下「啟用 API 和服務」,開啟 API 程式庫
  3. API 程式庫中,啟用 Cloud Trace APITelemetry APIService Usage API。您可以在 API 程式庫的搜尋列中,依名稱搜尋各個 API (例如 Telemetry API)。

除了啟用 API 之外,您還必須將下列角色授予服務代理程式帳戶:

  • roles/telemetry.tracesWriter
  • roles/serviceusage.serviceUsageConsumer

具體服務帳戶取決於 Apigee 環境:

  • ApigeeX (非混合式):將角色授予 Apigee 服務代理,這是 Google 管理的 P4SA (每個產品和每個專案的服務帳戶),Apigee 會自動為專案佈建這個帳戶。服務代理帳戶的格式為 service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com

請參閱「使用 Google Cloud 控制台授予 IAM 角色」。

啟用分散式追蹤記錄 (OpenTelemetry)

啟用分散式追蹤前,請先建立必要的環境變數

為 Cloud Trace 啟用分散式追蹤記錄

下列範例說明如何使用 OpenTelemetry 為 Cloud Trace 啟用分散式追蹤:

  1. 執行下列 Apigee API 呼叫:
    curl -H "$TOKEN" \
        -H "Content-Type: application/json" \
        https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \
        -X PATCH \
        -d '{
              "exporter":"OPEN_TELEMETRY_CLOUD_TRACE",
              "endpoint": "'"$PROJECT_ID"'",
              "samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.05},
              "traceProtocol": "OTLP",
              "spanSemantics": "OTEL"
            }'

    要求主體範例包含下列元素:

    • 如要透過 OpenTelemetry 支援 Cloud Trace,請將 exporter 參數設為 OPEN_TELEMETRY_CLOUD_TRACE,並將 traceProtocol 參數設為 OTLP
    • samplingRate」設為 0.05。也就是說,大約有 5% 的 API 呼叫會傳送至分散式追蹤。如果是 OpenTelemetry,您可以指定最高 1.0 (100%) 的取樣率。 詳情請參閱「效能注意事項」。
    • endpoint 參數設為應接收追蹤資料的 Google Cloud 專案 ID (純專案 ID 字串,而非網址)。
    • spanSemantics 參數為選用,可控制發出的跨度所用的屬性和跨度命名。支援的值:
      • LEGACY (預設):使用變數資料表「屬性」欄中顯示的 Apigee 屬性和範圍名稱。
      • OTEL:使用 OTEL 語意變數資料欄中顯示的 OpenTelemetry 語意慣例名稱。必須為 traceProtocol,才能使用 OTLP

    成功的回應會與下列內容相似:

    {
      "exporter": "OPEN_TELEMETRY_CLOUD_TRACE",
      "endpoint": "my-gcp-project-id",
      "samplingConfig": {
        "sampler": "PROBABILITY",
        "samplingRate": 0.05
      },
      "traceProtocol": "OTLP",
      "spanSemantics": "OTEL"
    }

為 OpenTelemetry Collector 啟用分散式追蹤記錄

如要為客戶管理的 OpenTelemetry Collector 啟用分散式追蹤,請執行下列 Apigee API 呼叫:

curl -H "$TOKEN" \
    -H "Content-Type: application/json" \
    https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \
    -X PATCH \
    -d '{
          "exporter":"OPEN_TELEMETRY_COLLECTOR",
          "endpoint": "http://my-otel-collector.example.com:4318/v1/traces",
          "samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.05},
          "traceProtocol": "OTLP",
          "spanSemantics": "OTEL"
        }'

要求主體範例包含下列元素:

  • 如要支援客戶管理的 OpenTelemetry Collector,請將 exporter 參數設為 OPEN_TELEMETRY_COLLECTOR,並將 traceProtocol 參數設為 OTLP
  • endpoint 參數會設為 OpenTelemetry Collector 的 OTLP 擷取端點完整 HTTP/HTTPS 網址 (例如 http://my-otel-collector.example.com:4318/v1/traces)。與採用裸露 Google Cloud 專案 ID 的 Cloud Trace 匯出工具不同,OPEN_TELEMETRY_COLLECTOR 匯出工具需要包含配置、主機、通訊埠和路徑的完整網址。與 Cloud Trace 端點不同,OpenTelemetry Collector endpoint 是可變動的:您稍後可以使用另一個 PATCH 重新設定 traceConfig
  • samplingRate」設為 0.05。也就是說,大約有 5% 的 API 呼叫會傳送至分散式追蹤。詳情請參閱「效能注意事項」。
  • otelCollectorSecurityScheme 參數為選用項目,預設為 NONE。設為 MTLS,在 Apigee 和收集器之間啟用雙向 TLS;如需必要 mtlsConfig 欄位和完整 API 請求主體,請參閱「為 OpenTelemetry 收集器設定 mTLS」。

成功的回應會與下列內容相似:

{
  "exporter": "OPEN_TELEMETRY_COLLECTOR",
  "endpoint": "http://my-otel-collector.example.com:4318/v1/traces",
  "samplingConfig": {
    "sampler": "PROBABILITY",
    "samplingRate": 0.05
  },
  "traceProtocol": "OTLP",
  "spanSemantics": "OTEL"
}

使用 OpenTelemetry Collector 的注意事項

啟用分散式追蹤功能,將資料傳送至客戶管理的 OpenTelemetry Collector 前,請先詳閱下列規定。

網路可連線性

  • 確認 Apigee 可以連上 OpenTelemetry Collector。
  • 如要連線至未公開於網際網路的收集器,請使用 Private Service Connect (PSC)。
  • 如果設定中存在轉送 Proxy,請在 OpenTelemetry Collector 上設定該 Proxy。訊息處理器與 OpenTelemetry Collector 之間的連線一律為直接連線。

傳輸通訊協定

OpenTelemetry Collector 僅支援 OTLP/HTTP 傳輸 (依 OTLP 慣例,通訊埠為 4318,路徑為 /v1/traces)。系統不支援 OTLP/gRPC (通訊埠 4317)。

TLS 和 mTLS

Apigee 支援兩種安全機制,可透過 otelCollectorSecurityScheme 上的 traceConfig 設定,用來連線至 OpenTelemetry Collector:

  • 無安全性 (HTTP) (NONE,預設):Apigee 會透過 HTTP 連線至收集器,不使用相互 TLS。
  • mTLS (MTLS):相互傳輸層安全標準,因此收集器也能將 Apigee 驗證為用戶端。如要啟用 mTLS,請將 otelCollectorSecurityScheme 設為 MTLS,並提供參照 Apigee 管理的金鑰儲存區和信任儲存區的 mtlsConfigtraceConfig如需端對端設定,請參閱「為 OpenTelemetry Collector 設定 mTLS」。

為 OpenTelemetry 收集器設定 mTLS

相互傳輸層安全標準 (mTLS) 可讓 OpenTelemetry Collector 以用戶端身分驗證 Apigee 執行階段,Apigee 也會驗證收集器的伺服器憑證。

設定 mTLS 前,請先確認下列必要條件:

  • 您的收集器已設定為需要用戶端憑證驗證 (例如 OpenTelemetry Collector 的 tls.client_ca_file 設定),並部署了憑證授權單位 (CA) 檔案,其中包含您在設定步驟 1 中上傳的憑證鏈結。
  • endpoint 使用 https:// 配置。
  • exporterOPEN_TELEMETRY_COLLECTORtraceProtocol 則為 OTLP。mTLS 不會套用至 OPEN_TELEMETRY_CLOUD_TRACE 匯出工具,該工具會改用 OAuth 進行驗證。 Google Cloud

步驟 1:上傳用戶端金鑰和憑證

為收集器驗證的 Apigee 用戶端憑證建立 KeyStore,然後以別名上傳金鑰和憑證:

curl -H "$TOKEN" \
    -H "Content-Type: application/json" \
    https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/keystores \
    -X POST \
    -d '{ "name": "otel-mtls" }'

curl -H "$TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/keystores/otel-mtls/aliases?alias=mp-client&format=keycertfile" \
    -X POST \
    -F "keyFile=@client.key" \
    -F "certFile=@client.crt"

client.crt 檔案必須由收集器 tls.client_ca_file 信任的憑證授權單位簽署。如果是自簽設定,client.crt 可以是收集器用做 client_ca_file 的相同檔案。

步驟 2:上傳收集器的伺服器憑證

建立 Apigee 執行階段用來驗證收集器伺服器憑證的信任儲存區,然後以 CERT 別名上傳收集器的 CA 憑證:

curl -H "$TOKEN" \
    -H "Content-Type: application/json" \
    https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/keystores \
    -X POST \
    -d '{ "name": "otel-mtls-truststore" }'

curl -H "$TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/keystores/otel-mtls-truststore/aliases?alias=server-ca&format=keycertfile" \
    -X POST \
    -F "certFile=@server-ca.pem"

步驟 3:在 traceConfig 上啟用 mTLS

修補 traceConfig,將安全配置設為 MTLS,並參照您剛建立的金鑰庫和信任儲存區:

curl -H "$TOKEN" \
    -H "Content-Type: application/json" \
    https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \
    -X PATCH \
    -d '{
          "exporter": "OPEN_TELEMETRY_COLLECTOR",
          "endpoint": "https://my-otel-collector.example.com:4318/v1/traces",
          "traceProtocol": "OTLP",
          "spanSemantics": "OTEL",
          "otelCollectorSecurityScheme": "MTLS",
          "mtlsConfig": {
            "keyStore":   "otel-mtls",
            "keyAlias":   "mp-client",
            "trustStore": "otel-mtls-truststore"
          }
        }'

mtlsConfig 物件有三個必填欄位:

  • keyStore:保存 Apigee 用戶端金鑰和憑證的 KeyStore 名稱 (例如 otel-mtls)。如要改用 Apigee 參照,請指定 ref://REFERENCE_NAME
  • keyAliaskeyStore 內的 KEY_CERT 別名 (例如 mp-client)。
  • trustStore:保存步驟 2 中收集器伺服器 CA 憑證的金鑰儲存庫名稱 (例如 otel-mtls-truststore)。如要改用 Apigee 參照,請指定 ref://REFERENCE_NAME

Apigee 會對 traceConfig 執行下列驗證,前提是 otelCollectorSecuritySchemeMTLS

  • exporter 必須為 OPEN_TELEMETRY_COLLECTOR
  • traceProtocol 必須為 OTLP
  • endpoint 必須採用 https:// 架構。
  • 請務必填寫所有三個 mtlsConfig 欄位。如果缺少任何欄位,系統會傳回 HTTP 400。
  • 參考的金鑰儲存庫、別名和任何參照都必須已存在。如果缺少資源,系統會傳回 HTTP 400。

輪替用戶端金鑰或憑證

如要在不進行 traceConfig 變更的情況下輪替用戶端金鑰或憑證,請使用 PUT 將新金鑰內容上傳至現有 mp-client 別名:

curl -H "$TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/keystores/otel-mtls/aliases/mp-client" \
    -X PUT \
    -F "keyFile=@client-v2.key" \
    -F "certFile=@client-v2.crt"

Apigee 執行階段會在下次設定同步時偵測別名修訂版本變更,並使用新憑證重建 mTLS OTLP 匯出工具。無須重新啟動 Pod,也不會捨棄處理中的要求。

取樣條件

Apigee 執行階段會結合傳入的要求標頭和環境追蹤設定,決定是否要記錄每個要求的追蹤記錄。

W3C 追蹤內容標頭

在 OpenTelemetry 設定下,執行階段會遵守 W3C 追蹤內容 traceparent 標頭。traceparent 的最後一個位元 (即 trace-flags 位元) 攜帶 sampled 旗標:值為 01 表示呼叫端已決定要記錄追蹤記錄,值為 00 則表示呼叫端尚未決定。

根據 W3C 追蹤脈絡規格的取樣旗標建議,元件在做出記錄決策時應遵守傳入的取樣旗標,並在旗標中反映明確的記錄決策。Apigee 會遵循這些建議:決定是否要記錄追蹤記錄時,會考量傳入的取樣標記 (請參閱「標頭優先於本機設定」),並在傳播至下游服務的 traceparent 標頭中設定取樣標記,以反映要求是否正在記錄中。為防範因傳入旗標而導致不必要的追蹤,請將 sampler 設為 OFF (請參閱「停用分散式追蹤設定」),即使要求中的 traceparent 已設定取樣旗標,也會停用追蹤功能。

標頭優先於本機設定

如果傳入的要求帶有 traceparent 標頭,Apigee 執行階段會使用該標頭中的取樣旗標,而非本機 samplingConfig。如果要求將取樣旗標設為 01,系統一律會追蹤要求;如果將旗標設為 00,系統則不會追蹤要求。環境層級的 samplingConfig 僅適用於沒有 traceparent 標頭的要求。

停用追蹤記錄

如要為環境中的每個 Proxy 停用追蹤功能 (不包括 Proxy 覆寫),請在環境 traceConfig 中將 sampler 設為 OFF。請參閱「停用分散式追蹤設定」。

個別 Proxy 覆寫

如要只為環境中的部分 Proxy 啟用追蹤功能,請將環境 samplingConfigsampler 設為 OFF,並為要追蹤的每個 Proxy 建立 Proxy 專屬的覆寫 (將 sampler 設為 PROBABILITY,並將 samplingRate 設為非零值)。請參閱「覆寫 API Proxy 的追蹤設定」。

取樣率對效能的影響

samplingRate設定的內容會直接影響執行階段效能。每個取樣要求都會在訊息處理器上產生額外的 CPU 工作 (產生及匯出範圍),並增加要求路徑的延遲時間。取樣率越高,每個 MP 追蹤的流量就越大,這可能會降低輸送量,並增加尾部延遲 (p95、p99)。影響會隨著流量增加而擴大:在低要求率下,額外負荷通常可忽略不計,但在高要求率下,高取樣率可能會大幅降低可持續的處理量,並需要額外的 MP 容量。在內部基準測試中,與停用追蹤功能相比,在持續大量流量下以 samplingRate=1.0 (100% 抽樣) 執行,總處理量最多會減少約 15%。

一般而言,請在製作時將 samplingRate 保持在低值 (例如 0.1 或更低),只有在需要更深入瞭解特定 Proxy 時,才透過每個 Proxy 的覆寫提高值。如要詳細瞭解預期影響和容量指引,請參閱效能考量

效能注意事項

為 Apigee 執行階段環境啟用分散式追蹤功能時,預期會對效能造成影響。這可能會導致記憶體用量增加、CPU 需求增加,以及延遲時間增加。影響程度取決於 API Proxy 的複雜度 (例如政策數量)、機率取樣率 (設為 samplingRate),以及最重要的追蹤流量相對於每個訊息處理器 (MP) 時距匯出容量的比例。

Apigee MP 的時距匯出速率有限。使用預設設定時,單一 MP 每秒可持續匯出約 820 個範圍。一般 API Proxy 執行作業會發出約 10 個範圍 (Proxy PreFlow、目標流程、PostFlow、附加政策),因此單一 MP 在 100% 取樣率下,每秒可持續追蹤約 82 個要求。擴充 MP 副本數量會以線性方式增加總上限。

下表摘要列出兩種流量狀態下,samplingRate=1.0 (100% 可能性) 的預期影響:

流量制度 (每個 MP) 預計影響時間:samplingRate=1.0 建議做法
流量較低 (每個 MP 每秒追蹤的要求數約少於 82 個) 處理量會減少約 1% 至 2%;平均延遲時間會增加約 1%;p99 延遲時間會增加約 15% 至 20%。實際影響微乎其微。 可安全地啟用 100% 的功能。
流量過大 (明顯高於每個 MP 大約每秒 82 個追蹤要求) 輸送量會減少約 14%;平均延遲時間會增加約 24%;p75 延遲時間會增加約 52%;錯誤率會增加約 1 個百分點。 請降低 samplingRate (例如降至 0.10.05),或增加 MP 副本數量,讓每個 MP 每秒處理的追蹤要求減少。

對於流量高且延遲時間要求嚴格的環境,建議的機率取樣率小於或等於 10%。如要使用分散式追蹤功能進行疑難排解,請考慮透過每個 Proxy 的覆寫值,僅針對特定 API Proxy 提高機率取樣 (samplingRate)。

設定 Apigee 執行階段的 Cloud Trace (OpenCensus)

Apigee 執行階段和 Apigee Hybrid 執行階段都支援使用 Cloud Trace 和 OpenCensus 進行分散式追蹤。如果您使用 Jaeger,可以略過本節,直接前往「使用 OpenCensus 為 Jaeger 啟用分散式追蹤記錄」。

設定 Apigee 執行階段的 Cloud Trace

如要為 Cloud Trace 設定 Apigee 執行階段,您的 Google Cloud 專案必須啟用 Cloud Trace API

如要啟用 API,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「API 和服務」

    前往「APIs and Services」(API 和服務) 頁面

  2. 點選「啟用 API 和服務」
  3. 啟用 Cloud Trace API

設定 Cloud Trace 適用的 Apigee Hybrid 執行階段

如要為 Cloud Trace 設定 Apigee Hybrid 執行階段,請啟用 Cloud Trace API

除了啟用 API 之外,您還必須新增 iam.gserviceaccount.com 服務帳戶,才能透過混合式執行階段使用 Cloud Trace。如要新增服務帳戶,以及必要的 roles/cloudtrace.agent 角色和金鑰,請完成下列步驟:

  1. 建立新的服務帳戶:
    gcloud iam service-accounts create \
        apigee-runtime --display-name "Service Account Apigee hybrid runtime" \
        --project PROJECT_ID
  2. 將 IAM 政策繫結新增至服務帳戶:
    gcloud projects add-iam-policy-binding \
        PROJECT_ID --member "serviceAccount:apigee-runtime@PROJECT_ID.iam.gserviceaccount.com" \
        --role=roles/cloudtrace.agent --project PROJECT_ID
  3. 建立服務帳戶金鑰,並按照下列步驟更新 overrides.yaml
  4. 建立服務帳戶金鑰:
    gcloud iam service-accounts keys \
        create ~/apigee-runtime.json --iam-account apigee-runtime@PROJECT_ID.iam.gserviceaccount.com
  5. 將服務帳戶新增至 overrides.yaml 檔案。
    envs:
     - name: ENV_NAME
       serviceAccountPaths:
         runtime: apigee-runtime.json
         synchronizer: apigee-sync.json
         udca: apigee-udca.json
  6. 使用 Helm 將變更套用至執行階段:
    helm upgrade ENV_NAME apigee-env/ \
        --namespace APIGEE_NAMESPACE \
        --set env=ENV_NAME \
        --atomic \
        -f overrides.yaml

啟用分散式追蹤記錄 (OpenCensus)

啟用分散式追蹤前,請先建立必要的環境變數

使用 OpenCensus 啟用 Cloud Trace 的分散式追蹤功能

以下範例說明如何使用 OpenCensus 為 Cloud Trace 啟用分散式追蹤:

  1. 執行下列 Apigee API 呼叫:
    curl -H "$TOKEN" \
        -H "Content-Type: application/json" \
        https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \
        -X PATCH \
        -d '{
              "exporter":"CLOUD_TRACE",
              "endpoint": "'"$PROJECT_ID"'",
              "samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.1}
            }'

    要求主體範例包含下列元素:

    • 如要支援 Cloud Trace,請將 exporter 參數設為 CLOUD_TRACE。未指定的 traceProtocol 參數會預設為 OpenCensus
    • endpoint 參數會設為要傳送追蹤記錄的 Google Cloud 專案。
    • samplingRate 設為 0.1。也就是說,大約 10% 的 API 呼叫會傳送至分散式追蹤。如果是 OpenCensus,可設定的取樣率上限為 0.5

    成功的回應會與下列內容相似:

    {
      "exporter": "CLOUD_TRACE",
      "endpoint": "staging",
      "samplingConfig": {
        "sampler": "PROBABILITY",
        "samplingRate": 0.1
      }
    }

使用 OpenCensus 為 Jaeger 啟用分散式追蹤記錄

以下範例說明如何為 Jaeger 啟用分散式追蹤:

curl -s -H "$TOKEN" \
    https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \
    -X PATCH \
    -H "content-type:application/json" -d '{
    "samplingConfig": {
    "samplingRate": 0.4,
    "sampler": "PROBABILITY"},
    "endpoint": "http://DOMAIN:9411/api/v2/spans",
    "exporter": "JAEGER"
    }'

在這個例子中:

  • 如要支援 Jaeger,請將 exporter 參數設為 JAEGER。未指定的 traceProtocol 參數會預設為 OpenCensus
  • endpoint 參數設為 Jaeger 的安裝和設定位置。
  • samplingRate 設為 0.4。這表示大約 40% 的 API 呼叫會傳送至分散式追蹤。

為 Apigee 執行階段環境啟用分散式追蹤功能時,預期會對效能造成影響。這可能會導致記憶體用量增加、CPU 需求增加,以及延遲時間增加。影響程度取決於 API Proxy 的複雜度 (例如政策數量) 和機率取樣率 (設為 samplingRate)。取樣率越高,對效能的影響就越大。

詳情請參閱「效能注意事項」。

查看分散式追蹤設定

如要查看執行階段中現有的分散式追蹤設定,請登入執行階段,然後執行下列指令:

curl -H "$TOKEN" \
    -H "Content-Type: application/json" \
    https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig

執行指令後,您會看到類似以下的回應:

{
  "exporter": "CLOUD_TRACE",
  "endpoint": "my-gcp-project-id",
  "samplingConfig": {
    "sampler": "PROBABILITY",
    "samplingRate": 0.1
  },
  "revisionId": "7",
  "updateTime": "2026-06-08T14:25:13.512000Z"
}

每次成功更新時,revisionId 都會遞增,而 updateTime 則會反映最近一次變更的伺服器時間戳記。使用這兩個欄位確認控制層已接受設定更新;這兩個欄位也會由 PATCH .../traceConfig 回應傳回。

更新分散式追蹤設定

下列指令說明如何更新 Cloud Trace 的現有分散式追蹤設定:

curl -H "$TOKEN" \
    -H "Content-Type: application/json" \
    https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \
    -X PATCH \
    -d '{
          "samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.6}
        }'

執行指令後,您會看到類似以下的回應:

{
  "samplingConfig": {
    "sampler": "PROBABILITY",
    "samplingRate": 0.6
  },
  "traceProtocol": "OTLP"
}
在本範例中,取樣率會更新為 0.6

停用分散式追蹤設定

以下範例說明如何停用為 Cloud Trace 設定的分散式追蹤:

curl -H "$TOKEN" \
    -H "Content-Type: application/json" \
    https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig \
    -X PATCH \
    -d '{
          "samplingConfig": {"sampler": "OFF"}
        }'

執行指令後,您會看到類似以下的回應:

{
  "samplingConfig": {
    "sampler": "OFF"
  },
  "traceProtocol": "OTLP"
}

覆寫 API Proxy 的追蹤設定

在 Apigee 執行階段啟用分散式追蹤功能後,執行階段中的所有 API Proxy 都會使用相同的追蹤設定。不過,您可以覆寫 API Proxy 或 API Proxy 群組的分散式追蹤設定。這樣就能更精細地控管追蹤設定。

以下範例會覆寫 hello-world API Proxy 的分散式追蹤設定:

curl -s -H "$TOKEN" \
     https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig/overrides \
     -X POST \
     -H "content-type:application/json" \
     -d '{"apiProxy": "hello-world","samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.1}}'

您可以覆寫設定,針對特定 API Proxy 排除問題,不必變更所有 API Proxy 的設定。

更新追蹤設定覆寫

如要更新 API Proxy 或 API Proxy 群組的追蹤設定覆寫,請按照下列步驟操作:

  1. 使用下列指令擷取追蹤設定的現有覆寫項目:
    curl -s -H "$TOKEN" \
        https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig/overrides \
        -X GET 

    這項指令應會傳回類似下列內容的回應,其中包含「name」欄位,用於識別由覆寫項目控管的 Proxy:

    {
      "traceConfigOverrides": [
        {
          "name": "dc8437ea-4faa-4b57-a14f-4b8d3a15fec1",
          "apiProxy": "proxy1",
          "samplingConfig": {
            "sampler": "PROBABILITY",
            "samplingRate": 0.25
          }
        }
      ]
    }
  2. 如要更新 Proxy,請使用「name」欄位的值,將 POST 要求傳送至該 Proxy 的覆寫設定,並附上更新的欄位值。例如:
    curl -s -H "$TOKEN" \
        https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig/overrides/dc8437ea-4faa-4b57-a14f-4b8d3a15fec1 \
        -X POST \
        -H "content-type:application/json" \
        -d '{"apiProxy": "proxy1","samplingConfig": {"sampler": "PROBABILITY","samplingRate": 0.05}}'

刪除追蹤設定覆寫

如要刪除 API Proxy 或 API Proxy 群組的追蹤設定覆寫,請按照下列步驟操作:

  1. 使用下列指令擷取追蹤設定的現有覆寫項目:
    curl -s -H "$TOKEN" \
        https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig/overrides \
        -X GET 

    這項指令應會傳回類似下列內容的回應,其中包含「name」欄位,用於識別由覆寫項目控管的 Proxy:

    {
      "traceConfigOverrides": [
        {
          "name": "dc8437ea-4faa-4b57-a14f-4b8d3a15fec1",
          "apiProxy": "proxy1",
          "samplingConfig": {
            "sampler": "PROBABILITY",
            "samplingRate": 0.25
          }
        }
      ]
    }
  2. 如要刪除 Proxy,請使用「name」欄位的值,將 DELETE 要求傳送至該 Proxy 的覆寫設定,並提供更新的欄位值。例如:
    curl -s -H "$TOKEN" \
        https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENV_NAME/traceConfig/overrides/dc8437ea-4faa-4b57-a14f-4b8d3a15fec1 \
        -X DELETE \

排解分散式追蹤記錄問題

如要排解分散式追蹤問題,請按照下列步驟操作:

  • 使用 traceConfig API 驗證分散式追蹤設定,確保符合需求。
  • 確認服務帳戶在目標專案中具備正確的 IAM 權限 (角色)。
  • 如果搭配 OpenTelemetry 使用 Cloud Trace,請檢查傳入的時距,以及是否有任何 API 啟用或配額錯誤。
  • 如果使用客戶管理的 OpenTelemetry Collector,請執行下列操作:
    • 確認 Apigee 可以連上 Collector 端點。如果使用 Private Service Connect (PSC),請檢查設定。
    • 檢查 OpenTelemetry Collector 記錄,找出資料或連線問題。
    • 確認收集器的 TLS 憑證有效。
  • 檢查 Apigee 執行階段記錄,找出追蹤記錄匯出錯誤。