全部產品
Search
文件中心

Alibaba Cloud Service Mesh:將鏈路追蹤資料擷取到阿里雲可觀測鏈路OpenTelemetry版

更新時間:Jun 30, 2024

阿里雲服務網格ASM支援將指標資料上報到阿里雲可觀測鏈路OpenTelemetry版。您可以通過可觀測鏈路OpenTelemetry版控制台查看調用資訊和基於調用資訊產生的拓撲圖等。本文介紹如何將鏈路追蹤資料擷取到阿里雲可觀測鏈路OpenTelemetry版。

前提條件

操作步驟

請您按照ASM執行個體版本選擇對應的頁簽進行操作。

ASM執行個體版本為1.17.2.35以下

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

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

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

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

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

說明

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

ASM執行個體版本為1.17.2.35及以上,1.18.0.124以下

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

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

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

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

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

說明

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

ASM執行個體版本為1.18.0.124及以上

步驟一:部署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

步驟四:部署測試應用

部署bookinfo和sleep應用。具體操作,請參見在ASM執行個體關聯的叢集中部署應用

  • bookinfo.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
    ---

步驟五:訪問應用並查看上報的追蹤資料

  1. 執行以下命令,訪問productpage應用。

    kubectl exec -it deploy/sleep -c sleep -- curl  productpage:9080/productpage?u=normal
  2. 訪問成功後,查看OpenTelemetry Collector日誌,查看debug exporter列印的輸出。

    2023-11-20T08:44:27.531Z	info	TracesExporter	{"kind": "exporter", "data_type": "traces", "name": "debug", "resource spans": 1, "spans": 3}
  3. 通過ARMS控制台查看鏈路追蹤資料。

    1. 登入ARMS控制台
    2. 在左側導覽列,單擊應用監控 > 調用鏈分析,然後在頁面左上方選擇目標地區。

    3. 應用程式名稱地區,選中發起請求的sleep應用,右側列表顯示調用sleep應用的追蹤資料。

      通過sleep應用程式容器發起的訪問,被ASM視作調用sleep應用Sidecar的Egress服務。

      image.png

    4. 在調用列表右側的操作列,單擊目標調用對應的詳情,查看完整調用鏈及延遲資訊。

      image.png