Cloud Trace 和 Cloud Service Mesh

注意:本指南僅支援採用 Istio API 的 Cloud Service Mesh,不支援 Google Cloud API。詳情請參閱「Cloud Service Mesh 總覽」。

Cloud Trace 是一套分散式追蹤系統,可收集應用程式的延遲資料,並近乎即時地顯示。使用 Cloud Trace,就能透過分散式系統追蹤取樣要求、觀察網路呼叫,並全面剖析系統。

Cloud Trace 適用於下列平台上的 Cloud Service Mesh 安裝項目:

  • 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)

如果您已有現有的 Istio Telemetry API CR,請將其納入新的 Istio Telemetry API CR,以便保留現有 Istio Telemetry CR 中的先前自訂設定。

本節說明如何透過代管 Traffic Director 控制層,在 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
    

    預設取樣率為 1%。如要覆寫預設值,請指定 randomSamplingPercentage,並將其設為介於 0.0 和 100.0 之間的值。

    以下範例會將取樣率設為 100% (通常只會用於示範或疑難排解):

    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
         randomSamplingPercentage: 100.0
    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-managed、asm-managed-stable 或 asm-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 都需要重新啟動並重新注入,才能取得追蹤器更新。舉例來說,您可以使用下列指令,重新啟動屬於某個 Deployment 的 Pod:

    kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

叢集內

本節說明如何透過叢集內控制層,在 Cloud Service Mesh 上啟用 Cloud Trace。

如要啟用 Cloud Trace,請使用下列疊加檔案重新部署客戶管理的控制層。如要進一步瞭解疊加層檔案,請參閱「關於疊加層檔案」。

預設

執行下列指令,啟用 Cloud Trace:

 ./asmcli install \
    OTHER_FLAGS \
    --option cloud-tracing

這個指令會套用下列疊加檔,以預設選項啟用追蹤功能。請注意,預設取樣率為 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 可以自動傳送追蹤記錄 span,但需要一些提示才能將整個追蹤記錄連結在一起。應用程式必須傳播適當的 HTTP 標頭,這樣當 Proxy 傳送 Span 資訊時,Span 才能正確地關聯至單一追蹤記錄。

為此,應用程式必須收集適當的標頭,並將其從傳入要求傳播至任何傳出要求。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 說明文件。

存取追蹤記錄

查看服務的追蹤記錄樣本

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

  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. 在「Services」(服務) 下方,選取要檢查的服務名稱。

  3. 前往「Metrics」(指標) 頁面。

  4. 從「Time Span」(時距) 下拉式選單中指定時距,或使用時間軸設定自訂時距。

  5. 按一下「查看追蹤記錄」。

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

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

後續步驟