Cloud Trace 和 Cloud Service Mesh

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

在下列平台上,Cloud Trace 可與 Cloud Service Mesh 安裝作業搭配使用:

  • Google Cloud上的 GKE
  • 如果您是使用 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)

本節說明如何在 Cloud Service Mesh 上啟用 Cloud Trace,並使用受管理的 Istiod 控制層。

  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 需要重新啟動並重新注入,才能取得追蹤程式更新。使用下列指令重新啟動屬於部署的 Pod:

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

追蹤內容傳播

雖然側邊代理程式可以自動傳送追蹤區間,但需要一些提示才能將整個追蹤記錄連結在一起。應用程式需要傳播適當的 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 的一部分。

後續步驟