本頁內容適用於 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 說明文件。
本頁面說明如何為 Apigee 執行階段設定分散式追蹤。如果您剛開始使用分散式追蹤系統,想瞭解更多資訊,請參閱「瞭解分散式追蹤記錄」。
如要進一步瞭解本頁面使用的術語,請參閱 Cloud Trace 總覽。
簡介
分散式追蹤系統可讓您追蹤軟體系統中的要求,這些要求會分散在多個應用程式、服務和資料庫,以及 Proxy 等中介程式。這些追蹤系統會產生報表,顯示要求在每個步驟所花費的時間。追蹤報表也能詳細列出要求期間呼叫的各種服務,讓您深入瞭解軟體系統中每個步驟的運作情形。
Apigee Edge 中的追蹤工具和 Apigee 中的偵錯工具,有助於排解 API Proxy 問題及監控 API Proxy。不過,這些工具不會將任何資料傳送至分散式追蹤伺服器,例如 Cloud Trace、Jaeger 或 OpenTelemetry 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_RESP和EVENT_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_SENT 和 PROXY_POST_RESP_SENT) 和每個政策步驟範圍 (例如 AssignMessage、VerifyAPIKey、ServiceCallout、JavaScript、KeyValueMapOperations)。 |
Apigee 不會發出 CLIENT、PRODUCER 或 CONSUMER 範圍。具體來說,從 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 動詞 (例如 GET 或 POST)。 |
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,請按照下列步驟操作: |
| OpenTelemetry Collector | 管理自己的 OpenTelemetry Collector,控管追蹤記錄資料的收集和處理作業。如果您需要將資料傳送至多個系統 (包括非 Google 系統),或自訂資料的處理、分組或強化方式,這就是理想做法。 如要將追蹤資料傳送至 OpenTelemetry Collector,請執行下列操作:
如要瞭解啟用這個選項前必須滿足的網路可連線性、TLS 和傳輸需求,請參閱「使用 OpenTelemetry Collector 時的注意事項」。 |
| 搭配 OpenCensus 使用 Cloud Trace | 如要使用 OpenCensus 將追蹤資料傳送至 Cloud Trace,請執行下列操作: |
| 搭配 OpenCensus 使用 Jaeger | 如要使用 OpenCensus 將追蹤記錄資料傳送至 Jaeger,請為 Jaeger 啟用分散式追蹤。 |
環境變數
本頁的程序會使用下列環境變數。建議您先在環境中設定這些變數,再開始作業。
TOKEN="Authorization: Bearer $(gcloud auth application-default print-access-token)"ENV_NAME=YOUR_ENVIRONMENT_NAMEPROJECT_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 執行階段會辨識追蹤內容標頭格式,包括 W3C、traceparent、tracestate 和 baggage 標頭。
設定 Cloud Trace (OpenTelemetry) 的必要條件
Apigee (ApigeeX) 執行階段支援使用 Cloud Trace 和 OpenTelemetry 進行分散式追蹤。如果您使用客戶管理的 OpenTelemetry Collector,可以略過本節,直接前往「為 OpenTelemetry Collector 啟用分散式追蹤功能」。
設定 Cloud Trace 適用的 ApigeeX 執行階段
如要為 Cloud Trace 設定 Apigee 執行階段,您的 Google Cloud 專案必須啟用下列 API:
- Cloud Trace API (trace.googleapis.com)
- Telemetry API (telemetry.googleapis.com)
- Service Usage API (serviceusage.googleapis.com)
啟用這些 API 後,您的 Google Cloud 專案就能透過 OpenTelemetry 接收來自已驗證來源的追蹤資料。
如要啟用 API,請按照下列步驟操作:
- 在 Google Cloud 控制台中,前往「API 和服務」:
- 按一下「啟用 API 和服務」,開啟 API 程式庫。
- 在 API 程式庫中,啟用 Cloud Trace API、Telemetry API 和 Service Usage API。您可以在 API 程式庫的搜尋列中,依名稱搜尋各個 API (例如
Telemetry API)。
除了啟用 API 之外,您還必須將下列角色授予服務代理程式帳戶:
roles/telemetry.tracesWriterroles/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 啟用分散式追蹤:
- 執行下列 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 支援 Cloud Trace,請將
為 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 Collectorendpoint是可變動的:您稍後可以使用另一個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 管理的金鑰儲存區和信任儲存區的mtlsConfig。traceConfig如需端對端設定,請參閱「為 OpenTelemetry Collector 設定 mTLS」。
為 OpenTelemetry 收集器設定 mTLS
相互傳輸層安全標準 (mTLS) 可讓 OpenTelemetry Collector 以用戶端身分驗證 Apigee 執行階段,Apigee 也會驗證收集器的伺服器憑證。
設定 mTLS 前,請先確認下列必要條件:
- 您的收集器已設定為需要用戶端憑證驗證 (例如 OpenTelemetry Collector 的
tls.client_ca_file設定),並部署了憑證授權單位 (CA) 檔案,其中包含您在設定步驟 1 中上傳的憑證鏈結。 endpoint使用https://配置。exporter為OPEN_TELEMETRY_COLLECTOR,traceProtocol則為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。keyAlias:keyStore內的 KEY_CERT 別名 (例如mp-client)。trustStore:保存步驟 2 中收集器伺服器 CA 憑證的金鑰儲存庫名稱 (例如otel-mtls-truststore)。如要改用 Apigee 參照,請指定ref://REFERENCE_NAME。
Apigee 會對 traceConfig 執行下列驗證,前提是 otelCollectorSecurityScheme 為 MTLS:
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 啟用追蹤功能,請將環境 samplingConfig 的 sampler 設為 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.1 或 0.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,請按照下列步驟操作:
- 在 Google Cloud 控制台中,前往「API 和服務」:
- 點選「啟用 API 和服務」。
- 啟用 Cloud Trace API。
設定 Cloud Trace 適用的 Apigee Hybrid 執行階段
如要為 Cloud Trace 設定 Apigee Hybrid 執行階段,請啟用 Cloud Trace API。
除了啟用 API 之外,您還必須新增 iam.gserviceaccount.com 服務帳戶,才能透過混合式執行階段使用 Cloud Trace。如要新增服務帳戶,以及必要的 roles/cloudtrace.agent 角色和金鑰,請完成下列步驟:
- 建立新的服務帳戶:
gcloud iam service-accounts create \ apigee-runtime --display-name "Service Account Apigee hybrid runtime" \ --project PROJECT_ID - 將 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 - 建立服務帳戶金鑰,並按照下列步驟更新
overrides.yaml。 - 建立服務帳戶金鑰:
gcloud iam service-accounts keys \ create ~/apigee-runtime.json --iam-account apigee-runtime@PROJECT_ID.iam.gserviceaccount.com - 將服務帳戶新增至
overrides.yaml檔案。envs: - name: ENV_NAME serviceAccountPaths: runtime: apigee-runtime.json synchronizer: apigee-sync.json udca: apigee-udca.json - 使用 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 啟用分散式追蹤:
- 執行下列 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 } } - 如要支援 Cloud Trace,請將
使用 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 群組的追蹤設定覆寫,請按照下列步驟操作:
- 使用下列指令擷取追蹤設定的現有覆寫項目:
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 } } ] } - 如要更新 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 群組的追蹤設定覆寫,請按照下列步驟操作:
- 使用下列指令擷取追蹤設定的現有覆寫項目:
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 } } ] } - 如要刪除 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 \
排解分散式追蹤記錄問題
如要排解分散式追蹤問題,請按照下列步驟操作:
- 使用
traceConfigAPI 驗證分散式追蹤設定,確保符合需求。 - 確認服務帳戶在目標專案中具備正確的 IAM 權限 (角色)。
- 如果搭配 OpenTelemetry 使用 Cloud Trace,請檢查傳入的時距,以及是否有任何 API 啟用或配額錯誤。
- 如果使用客戶管理的 OpenTelemetry Collector,請執行下列操作:
- 確認 Apigee 可以連上 Collector 端點。如果使用 Private Service Connect (PSC),請檢查設定。
- 檢查 OpenTelemetry Collector 記錄,找出資料或連線問題。
- 確認收集器的 TLS 憑證有效。
- 檢查 Apigee 執行階段記錄,找出追蹤記錄匯出錯誤。