全部產品
Search
文件中心

Alibaba Cloud Service Mesh:配置上報ASM鏈路追蹤資料

更新時間:Feb 22, 2025

阿里雲Service Mesh (ASM)支援將指標資料上報到阿里雲可觀測鏈路OpenTelemetry版和自建系統。您可以通過控制台進行配置。本文介紹如何將鏈路追蹤資料擷取到阿里雲可觀測鏈路OpenTelemetry版和自建系統。

前提條件

將鏈路追蹤資料擷取到阿里雲可觀測鏈路OpenTelemetry版

請您按照ASM執行個體版本選擇對應的頁簽進行操作。若您需要升級現有的執行個體版本,請參見升級ASM執行個體

1.17.2.35以下

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇網格執行個體 > 基本資料

  3. 基本資料頁面,單擊功能設定,在功能設定更新面板,選中啟用鏈路追蹤,設定採樣百分比採樣方式選擇阿里雲可觀測鏈路OpenTelemetry版,然後單擊確定

  4. 在左側導覽列,選擇可觀測管理中心 > 鏈路追蹤,跳轉至可觀測鏈路OpenTelemetry版控制台查看鏈路追蹤資訊。鏈路追蹤.png

    關於鏈路追蹤的更多資訊,請參見什麼是可觀測鏈路OpenTelemetry版

說明

若您不再需要此功能,可以在功能設定更新面板取消選中啟用鏈路追蹤,然後單擊確定

1.17.2.35及以上,1.18.0.124以下

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇可觀測管理中心 > 鏈路追蹤

  3. 鏈路追蹤頁面,單擊將服務網格鏈路追蹤資料擷取到阿里雲可觀測鏈路OpenTelemetry版,然後在確認對話方塊,單擊確定

  4. 單擊開啟阿里雲可觀測鏈路OpenTelemetry版控制台,查看鏈路追蹤資訊。

    關於鏈路追蹤的更多資訊,請參見什麼是可觀測鏈路OpenTelemetry版鏈路追蹤.png

說明

若您不再需要此功能,可以在鏈路追蹤頁面,單擊關閉採集,然後在確認對話方塊,單擊確定

1.18.0.124及以上,1.22.6.89以下

在目前的版本範圍內,控制台不支援直接設定匯出至阿里雲可觀測鏈路OpenTelemetry版,您可以通過以下方式在系統中配置Collector進行上報。

步驟一:部署OpenTelemetry Operator

  1. 在ACK叢集對應的kubeconfig環境,執行以下命令,建立opentelemetry-operator-system命名空間。

    kubectl create namespace opentelemetry-operator-system
  2. 執行以下命令,使用Helm在opentelemetry-operator-system命名空間下安裝OpenTelemetry Operator。

    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    helm install --namespace=opentelemetry-operator-system opentelemetry-operator open-telemetry/opentelemetry-operator \
      --set "manager.collectorImage.repository=otel/opentelemetry-collector-k8s" \
      --set admissionWebhooks.certManager.enabled=false \
      --set admissionWebhooks.autoGenerateCert.enabled=true
  3. 執行以下命令,檢查opentelemetry-operator是否正常運行。

    kubectl get pod -n opentelemetry-operator-system

    預期輸出:

    NAME                                      READY   STATUS    RESTARTS   AGE
    opentelemetry-operator-854fb558b5-pvllj   2/2     Running   0          1m

    STATUSRunning,表明opentelemetry-operator正常運行。

步驟二:建立OpenTelemetry Collector

  1. 使用以下內容,建立collector.yaml檔案。

    請將YAML中的${ENDPOINT}替換為gRPC協議的VPC網路存取點,${TOKEN}替換為鑒權Token。關於如何擷取阿里雲可觀測鏈路OpenTelemetry版的存取點和鑒權Token,請參見接入和鑒權說明

    展開查看collector.yaml

    apiVersion: opentelemetry.io/v1alpha1
    kind: OpenTelemetryCollector
    metadata:
      labels:
        app.kubernetes.io/managed-by: opentelemetry-operator
      name: default
      namespace: opentelemetry-operator-system
      annotations:
        sidecar.istio.io/inject: "false"
    spec:
      config: |
        extensions:
          zpages:
            endpoint: 0.0.0.0:55679 
        receivers:
          otlp:
            protocols:
              grpc:
                endpoint: 0.0.0.0:4317
        exporters:
          debug:
            verbosity: detailed
          otlp:
            endpoint: ${ENDPOINT}
            tls:
              insecure: true
            headers:
              Authentication: ${TOKEN}
        service:
          extensions: [zpages]
          pipelines:
            traces:
              receivers: [otlp]
              processors: []
              exporters: [otlp, debug]
      ingress:
        route: {}
      managementState: managed
      mode: deployment
      observability:
        metrics: {}
      podDisruptionBudget:
        maxUnavailable: 1
      replicas: 1
      resources: {}
      targetAllocator:
        prometheusCR:
          scrapeInterval: 30s
        resources: {}
      upgradeStrategy: automatic
    
  2. 在ACK叢集對應的kubeconfig環境下,執行以下命令,將collector部署到叢集。

    kubectl apply -f collector.yaml
  3. 執行以下命令,檢查collector是否正常啟動。

    kubectl get pod -n opentelemetry-operator-system

    預期輸出:

    NAME                                      READY   STATUS    RESTARTS   AGE
    opentelemetry-operator-854fb558b5-pvllj   2/2     Running   0          3m
    default-collector-5cbb4497f4-2hjqv        1/1     Running   0          30s

    預期輸出表明collector正常啟動。

  4. 執行以下命令,檢查服務是否建立。

    kubectl get svc -n opentelemetry-operator-system

    預期輸出:

    opentelemetry-operator           ClusterIP   172.16.138.165   <none>        8443/TCP,8080/TCP   3m
    opentelemetry-operator-webhook   ClusterIP   172.16.127.0     <none>        443/TCP             3m
    default-collector              ClusterIP   172.16.145.93    <none>        4317/TCP   30s
    default-collector-headless     ClusterIP   None             <none>        4317/TCP   30s
    default-collector-monitoring   ClusterIP   172.16.136.5     <none>        8888/TCP   30s

    預期輸出表明服務已建立成功。

步驟三:通過ASM控制台啟用鏈路追蹤

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇可觀測管理中心 > 可觀測配置

  3. 可觀測配置頁面的鏈路追蹤設定地區,將採樣百分比設定為100,然後單擊提交

  4. 在左側導覽列,選擇可觀測管理中心 > 鏈路追蹤,在OpenTelemetry服務地址/網域名稱輸入default-collector.opentelemetry-operator-system.svc.cluster.local,在OpenTelemetry服務連接埠輸入4317,然後單擊將服務網格鏈路追蹤資料擷取到OpenTelemetry

1.22.6.89及以上

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇可觀測管理中心 > 鏈路追蹤

  3. 鏈路追蹤頁面,選擇匯出到阿里雲可觀測鏈路匯出方式,然後再填寫配置選擇您的上報方式,如Zipkin,然後單擊提交

  4. 單擊前往阿里雲可觀測鏈路OpenTelemetry版控制台,查看鏈路追蹤資訊。關於鏈路追蹤的更多資訊,請參見什麼是可觀測鏈路 OpenTelemetry 版

    image

    說明

    若您不再需要此功能,可以在鏈路追蹤頁面,單擊關閉匯出,然後在確認對話方塊,單擊確定

向自建系統匯出ASM鏈路追蹤資料

不同版本的ASM執行個體所支援的向自建系統匯出鏈路追蹤資料的方式不同,請按照您執行個體的版本進行選擇。

1.18.0.124以下

  • ASM執行個體版本為1.17.2.28以下:登入ASM控制台,在目標執行個體的基本資料頁面,單擊功能設定,選中啟用鏈路追蹤,按需進行配置,然後單擊確定

  • ASM執行個體版本為1.17.2.28及以上,1.18.0.124以下:啟用鏈路追蹤的方式,請參見鏈路追蹤設定說明

1.18.0.124及以上,1.22.6.89以下

在此版本範圍內,僅支援在控制台上報到阿里雲可觀測鏈路OpenTelemetry。您可以登入ASM控制台,在目標執行個體的可觀測管理中心 > 鏈路追蹤頁面進行配置。

配置說明

配置項

說明

OpenTelemetry服務網域名稱(完整FQDN)

自建系統服務網域名稱,需要為完整的FQDN。例如 otel.istio-system.svc.cluster.local

OpenTelemetry服務連接埠

自建系統服務連接埠,例如8090

1.22.6.89及以上

您可以登入ASM控制台,在目標執行個體的可觀測管理中心 > 鏈路追蹤頁面選擇您的鏈路追蹤自建系統進行配置。

重要

在配置鏈路追蹤上報到自建系統時,請確保您的自建系統是網格內服務。如果自建系統在網格外部,您可以通過ServiceEntry將自建系統註冊到網格內。具體操作,請參見ServiceEntry

配置說明

上報到OpenTelemetry

配置項

說明

服務網域名稱(完整FQDN)

自建系統服務網域名稱,需要為完整的FQDN。例如 otel.istio-system.svc.cluster.local

服務連接埠

自建系統服務連接埠,例如8090

通過gRPC上報

逾時時間

可選,配置上報鏈路追蹤資料的請求逾時時間,單位為秒。例如1,預設關閉。

要求標頭

可選,配置上報鏈路追蹤資料時攜帶的要求標頭,例如authentication: token-xxx,預設為空白。

通過HTTP上報

請求路徑

上報鏈路追蹤資料的請求路徑,例如/api/v2/spans,預設為/

逾時時間

可選,配置上報鏈路追蹤資料的請求逾時時間,單位為秒。例如1,預設關閉。

要求標頭

可選,配置上報鏈路追蹤資料時攜帶的要求標頭,例如authentication: token-xxx,預設為空白。

上報到Zipkin

配置項

說明

服務網域名稱(完整FQDN)

自建系統服務網域名稱,需要為完整的FQDN。例如 zipkin.istio-system.svc.cluster.local

服務連接埠

自建系統服務連接埠,例如8090

請求路徑

上報鏈路追蹤資料的請求路徑,例如/api/v2/spans,預設為/api/v2/spans

上報到Skywalking

配置項

說明

服務網域名稱(完整FQDN)

自建系統服務網域名稱,需要為完整的FQDN。例如 skywalking.istio-system.svc.cluster.local

服務連接埠

自建系統服務連接埠,例如8090

驗證鏈結路追蹤資料上報

部署應用

  1. 部署樣本應用。

    1. 使用以下內容建立bookinfo.yaml。

      展開查看YAML內容

      apiVersion: v1
      kind: Service
      metadata:
        name: details
        labels:
          app: details
          service: details
      spec:
        ports:
        - port: 9080
          name: http
        selector:
          app: details
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: bookinfo-details
        labels:
          account: details
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: details-v1
        labels:
          app: details
          version: v1
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: details
            version: v1
        template:
          metadata:
            labels:
              app: details
              version: v1
          spec:
            serviceAccountName: bookinfo-details
            containers:
            - name: details
              image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-details-v1:1.20.1
              imagePullPolicy: IfNotPresent
              ports:
              - containerPort: 9080
      ---
      ##################################################################################################
      # Ratings service
      ##################################################################################################
      apiVersion: v1
      kind: Service
      metadata:
        name: ratings
        labels:
          app: ratings
          service: ratings
      spec:
        ports:
        - port: 9080
          name: http
        selector:
          app: ratings
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: bookinfo-ratings
        labels:
          account: ratings
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: ratings-v1
        labels:
          app: ratings
          version: v1
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: ratings
            version: v1
        template:
          metadata:
            labels:
              app: ratings
              version: v1
          spec:
            serviceAccountName: bookinfo-ratings
            containers:
            - name: ratings
              image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-ratings-v1:1.20.1
              imagePullPolicy: IfNotPresent
              ports:
              - containerPort: 9080
      ---
      ##################################################################################################
      # Reviews service
      ##################################################################################################
      apiVersion: v1
      kind: Service
      metadata:
        name: reviews
        labels:
          app: reviews
          service: reviews
      spec:
        ports:
        - port: 9080
          name: http
        selector:
          app: reviews
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: bookinfo-reviews
        labels:
          account: reviews
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: reviews-v1
        labels:
          app: reviews
          version: v1
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: reviews
            version: v1
        template:
          metadata:
            labels:
              app: reviews
              version: v1
          spec:
            serviceAccountName: bookinfo-reviews
            containers:
            - name: reviews
              image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v1:1.20.1
              imagePullPolicy: IfNotPresent
              env:
              - name: LOG_DIR
                value: "/tmp/logs"
              ports:
              - containerPort: 9080
              volumeMounts:
              - name: tmp
                mountPath: /tmp
              - name: wlp-output
                mountPath: /opt/ibm/wlp/output
            volumes:
            - name: wlp-output
              emptyDir: {}
            - name: tmp
              emptyDir: {}
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: reviews-v2
        labels:
          app: reviews
          version: v2
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: reviews
            version: v2
        template:
          metadata:
            labels:
              app: reviews
              version: v2
          spec:
            serviceAccountName: bookinfo-reviews
            containers:
            - name: reviews
              image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v2:1.20.1
              imagePullPolicy: IfNotPresent
              env:
              - name: LOG_DIR
                value: "/tmp/logs"
              ports:
              - containerPort: 9080
              volumeMounts:
              - name: tmp
                mountPath: /tmp
              - name: wlp-output
                mountPath: /opt/ibm/wlp/output
            volumes:
            - name: wlp-output
              emptyDir: {}
            - name: tmp
              emptyDir: {}
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: reviews-v3
        labels:
          app: reviews
          version: v3
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: reviews
            version: v3
        template:
          metadata:
            labels:
              app: reviews
              version: v3
          spec:
            serviceAccountName: bookinfo-reviews
            containers:
            - name: reviews
              image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v3:1.20.1
              imagePullPolicy: IfNotPresent
              env:
              - name: LOG_DIR
                value: "/tmp/logs"
              ports:
              - containerPort: 9080
              volumeMounts:
              - name: tmp
                mountPath: /tmp
              - name: wlp-output
                mountPath: /opt/ibm/wlp/output
            volumes:
            - name: wlp-output
              emptyDir: {}
            - name: tmp
              emptyDir: {}
      ---
      ##################################################################################################
      # Productpage services
      ##################################################################################################
      apiVersion: v1
      kind: Service
      metadata:
        name: productpage
        labels:
          app: productpage
          service: productpage
      spec:
        ports:
        - port: 9080
          name: http
        selector:
          app: productpage
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: bookinfo-productpage
        labels:
          account: productpage
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: productpage-v1
        labels:
          app: productpage
          version: v1
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: productpage
            version: v1
        template:
          metadata:
            annotations:
              prometheus.io/scrape: "true"
              prometheus.io/port: "9080"
              prometheus.io/path: "/metrics"
            labels:
              app: productpage
              version: v1
          spec:
            serviceAccountName: bookinfo-productpage
            containers:
            - name: productpage
              image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-productpage-v1:1.20.1
              imagePullPolicy: IfNotPresent
              ports:
              - containerPort: 9080
              volumeMounts:
              - name: tmp
                mountPath: /tmp
            volumes:
            - name: tmp
              emptyDir: {}
      ---
    2. 將Bookinfo應用部署到資料面叢集中。

      kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f bookinfo.yaml
  2. 部署sleep應用。

    1. 使用以下內容,建立sleep.yaml

      展開查看sleep.yaml

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: registry.cn-hangzhou.aliyuncs.com/acs/curl:8.1.2
              command: ["/bin/sleep", "infinity"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. 部署sleep應用。

      kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f sleep.yaml

發起測試

執行以下命令,發起測試。

 kubectl exec -it deploy/sleep -- sh -c 'for i in $(seq 1 100); do curl -s productpage:9080/productpage > /dev/null; done'

查看上報資料

以下以上報到阿里雲可觀測鏈路OpenTelemetry版為例,展示資料上報結果。

  1. 登入可觀測鏈路 OpenTelemetry 版控制台

  2. 單擊左側導覽列的應用列表。可以看到類似下圖的資料。

    image