Cloud Trace 和 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。

  1. 執行下列指令來啟用 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。

  1. 執行下列指令:

    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-managedasm-managed-stableasm-managed-rapid)。

  2. 執行下列指令來查看 configmap:

    kubectl get configmap istio-release-channel -n istio-system -o yaml
    
  3. 如要確認 Cloud Trace 是否已啟用,請確認 mesh: 區段中是否顯示下列幾行。

    ...
    apiVersion: v1
    data:
       mesh: |
       ....
       defaultConfig:
          tracing:
             stackdriver:{}
    ...
    
  4. 重新啟動 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-traceidx-b3-spanidx-b3parentspanidx-b3-sampledx-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 說明文件

存取追蹤記錄

查看服務的追蹤記錄樣本

如要查看應用程式中某項服務的追蹤記錄樣本,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Cloud Service Mesh」頁面。

    前往 Cloud Service Mesh 頁面

  2. 在「服務」下方,選取要檢查的服務名稱。

    下方的螢幕截圖顯示 frontend 服務的範例。

    Cloud Service Mesh 追蹤圖表

  3. 在「要求追蹤」下方,按一下任一追蹤記錄即可查看更多資訊。

    下方的螢幕截圖顯示追蹤要求子面板的範例。

    Cloud Service Mesh 追蹤子面板

查看所有追蹤記錄

如要查看服務的所有追蹤記錄,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Cloud Service Mesh」頁面。

    前往 Cloud Service Mesh 頁面

  2. 在「服務」下方,選取要檢查的服務名稱。

  3. 前往「指標」頁面。

  4. 從「時間範圍」下拉式選單指定時間範圍,或使用時間軸設定自訂範圍

  5. 按一下「查看追蹤」

Cloud Service Mesh 中服務的追蹤記錄包含下列資訊:

  • 網格中不同服務的要求延遲時間。
  • HTTP 要求屬性,包括 ID、網址、大小、延遲和通訊協定。
  • 服務名稱、命名空間和網格 ID 分別是標籤 istio.canonical_serviceistio.namespaceistio.mesh_id 的一部分。

後續步驟