Cloud Trace 和 Cloud Service Mesh
Google Cloud 詳情請參閱 Cloud Service Mesh 總覽。Cloud Trace 是一套分散式追蹤系統,可收集應用程式的延遲資料,並以近乎即時的方式顯示。使用 Cloud Trace,就能透過分散式系統追蹤取樣要求、觀察網路呼叫,並全面剖析系統。
在下列平台上安裝 Cloud Service Mesh 時,即可使用 Cloud Trace:
- GKE on Google Cloud
- 如果您使用 Cloud Service Mesh 憑證授權單位安裝,則為地端的 GKE Enterprise 叢集
請注意,Cloud Trace 預設為停用。啟用後, Google Cloud 控制台中的 Cloud Service Mesh 頁面會提供 Cloud Trace 頁面中追蹤記錄的連結。如需詳細的定價資訊,請參閱 Cloud Trace 定價頁面。
啟用 Cloud Trace
本節說明如何啟用 Cloud Trace。
代管 (TD)
本節說明如何透過代管 Cloud Service Mesh 控制層,在 Cloud Service Mesh 上啟用 Cloud Trace。
執行下列指令來啟用 Cloud Trace:
cat <<EOF | kubectl apply -n istio-system -f - apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: enable-cloud-trace namespace: istio-system spec: tracing: - providers: - name: stackdriver EOF
已管理 (Istiod
)
本節說明如何透過代管 Istiod 控制層,在 Cloud Service Mesh 上啟用 Cloud Trace。
執行下列指令:
cat <<EOF | kubectl apply -f - apiVersion: v1 data: mesh: |- defaultConfig: tracing: stackdriver: {} kind: ConfigMap metadata: name: istio-release-channel namespace: istio-system EOF
其中 release-channel 是發布版本 (
asm-managed
、asm-managed-stable
或asm-managed-rapid
)。執行下列指令來查看 configmap:
kubectl get configmap istio-release-channel -n istio-system -o yaml
如要確認 Cloud Trace 是否已啟用,請確認
mesh:
區段中是否顯示下列幾行。... apiVersion: v1 data: mesh: | .... defaultConfig: tracing: stackdriver:{} ...
重新啟動 Proxy。
請注意,追蹤器設定是 Proxy 啟動程序設定的一部分,因此每個 Pod 都需要重新啟動並重新注入,才能接收追蹤器更新。舉例來說,您可以使用下列指令,重新啟動屬於部署作業的 Pod:
kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME
叢集內
本節說明如何透過叢集內控制平面,在 Cloud Service Mesh 上啟用 Cloud Trace。
如要啟用 Cloud Trace,請使用下列疊加檔案重新部署客戶代管的控制層。如要進一步瞭解重疊檔案,請參閱「關於重疊檔案」。
預設
執行下列指令來啟用 Cloud Trace:
./asmcli install \
OTHER_FLAGS \
--option cloud-trace
這項指令會套用下列疊加檔案,以啟用預設選項的追蹤功能。請注意,預設取樣率為 1%。如要覆寫預設值,請改用 --custom-overlay
。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
values:
global:
proxy:
tracer: stackdriver
如需選項清單,請參閱 anthos-service-mesh
套件。
自訂
只要指定 tracing.sampling
值,即可覆寫這個預設值。值必須介於 0.0 至 100.0 之間,精確度為 0.01。舉例來說,如要追蹤每 10,000 個要求中的 5 個,請使用 0.05。
以下範例顯示 100% 的取樣率 (您只會為了示範或疑難排解而這麼做)。
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
defaultConfig:
tracing:
sampling: 100
values:
global:
proxy:
tracer: stackdriver
執行下列指令來啟用 Cloud Trace:
./asmcli install \
OTHER_FLAGS \
--custom_overlay PATH_TO_FILE
請注意,追蹤器設定是 Proxy 自我啟動設定的一部分,因此 Pod 需要重新啟動並重新注入,才能取得追蹤器更新。使用下列指令重新啟動屬於 Deployment 的 Pod:
kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME
追蹤內容傳播
雖然 Sidecar Proxy 可以自動傳送追蹤範圍,但需要一些提示才能將整個追蹤作業連結在一起。應用程式需要傳播適當的 HTTP 標頭,這樣一來,當 Proxy 傳送範圍資訊時,範圍就能正確地相互關聯到單一追蹤記錄中。
為此,應用程式必須從傳入要求收集適當的標頭,並傳播至任何傳出要求。Cloud Service Mesh Stackdriver 追蹤設定會接受下列任一標頭格式,並傳播所有下列格式:
- B3 (
x-b3-traceid
、x-b3-spanid
、x-b3parentspanid
、x-b3-sampled
、x-b3-flags
) - W3C TraceContext (
traceparent
) - Google Cloud Trace (
x-cloud-trace-context
) - gRPC TraceBin (
grpc-trace-bin
)
也就是說,應用程式可以使用任何這些格式傳播追蹤內容,系統會產生追蹤記錄並適當設定 Stackdriver。
範例
以下是 HTTP-Get 要求範例,原始要求中含有 traceparent
標頭。請注意 Proxy 新增的額外追蹤記錄內容標頭。
$ kubectl exec -it sleep-557747455f-n6flv -- curl "httpbin:8000/anything?freeform=" -H "accept: application/json" -H "Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01" -vv
* Trying 10.12.3.52:8000...
* Connected to httpbin (10.12.3.52) port 8000 (#0)
> GET /anything?freeform= HTTP/1.1
> Host: httpbin:8000
> User-Agent: curl/7.80.0-DEV
> accept: application/json
> Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< server: envoy
< date: Wed, 10 Nov 2021 20:36:04 GMT
< content-type: application/json
< content-length: 1032
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 5
<
{
"args": {
"freeform": ""
},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "application/json",
"Grpc-Trace-Bin": "AAB1Q9FeCeXWGAHU90zeEmm4AaDHmGRtdM7wAgE",
"Host": "httpbin:8000",
"Traceparent": "00-7543d15e09e5d61801d4f74cde1269b8-a0c798646d74cef0-01",
"User-Agent": "curl/7.80.0-DEV",
"X-B3-Sampled": "1",
"X-B3-Spanid": "a0c798646d74cef0",
"X-B3-Traceid": "7543d15e09e5d61801d4f74cde1269b8",
"X-Cloud-Trace-Context": "7543d15e09e5d61801d4f74cde1269b8/11585396123534413552;o=1",
"X-Envoy-Attempt-Count": "1",
"X-Forwarded-Client-Cert": "<REDACTED>"
},
"json": null,
"method": "GET",
"origin": "127.0.0.6",
"url": "http://httpbin:8000/anything?freeform="
}
請注意,在傳回的要求標頭集中,會顯示完整的追蹤內容標頭集。
如需更多傳播標頭的範例,請參閱「追蹤內容傳播」。
使用自訂 ID 從用戶端建立追蹤記錄
如要從具有自訂 ID 的用戶端建立追蹤記錄,請使用 curl
指令建立含有外部用戶端的請求,並強制顯示追蹤記錄。例如:
curl $URL --header "x-client-trace-id: 105445aa7843bc8bf206b12000100000"
如要進一步瞭解 x-client-trace-id
,請參閱 Envoy 說明文件。
存取追蹤記錄
查看服務的追蹤記錄樣本
如要查看應用程式中某項服務的追蹤記錄樣本,請按照下列步驟操作:
前往 Google Cloud 控制台的「Cloud Service Mesh」頁面。
在「服務」下方,選取要檢查的服務名稱。
下方的螢幕截圖顯示
frontend
服務的範例。在「要求追蹤」下方,按一下任一追蹤記錄即可查看更多資訊。
下方的螢幕截圖顯示追蹤要求子面板的範例。
查看所有追蹤記錄
如要查看服務的所有追蹤記錄,請按照下列步驟操作:
前往 Google Cloud 控制台的「Cloud Service Mesh」頁面。
在「服務」下方,選取要檢查的服務名稱。
前往「指標」頁面。
從「時間範圍」下拉式選單指定時間範圍,或使用時間軸設定自訂範圍。
按一下「查看追蹤」。
Cloud Service Mesh 中服務的追蹤記錄包含下列資訊:
- 網格中不同服務的要求延遲時間。
- HTTP 要求屬性,包括 ID、網址、大小、延遲和通訊協定。
- 服務名稱、命名空間和網格 ID 分別是標籤
istio.canonical_service
、istio.namespace
和istio.mesh_id
的一部分。
後續步驟
- 在 Google Cloud 主控台中查看追蹤記錄