配置上报ASM链路追踪数据

阿里云服务网格 ASM(Service Mesh)支持将指标数据上报到阿里云可观测链路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. 执行以下命令,使用Helmopentelemetry-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将自建系统注册到网格内。具体操作,请参见集群外服务(Service Entry)CRD说明

配置说明

上报到OpenTelemetry

配置项

说明

OpenTelemetry服务域名(完整FQDN)

自建系统服务域名,需要为完整的FQDN。例如 otel.istio-system.svc.cluster.local

OpenTelemetry服务端口

自建系统服务端口,例如8090

通过gRPC上报

超时时间

可选,配置上报链路追踪数据的请求超时时间,单位为秒。例如1,默认关闭。

请求头

可选,配置上报链路追踪数据时携带的请求头,例如authentication: token-xxx,默认为空。

通过HTTP上报

请求路径

上报链路追踪数据的请求路径,例如/api/v2/spans,默认为/

超时时间

可选,配置上报链路追踪数据的请求超时时间,单位为秒。例如1,默认关闭。

请求头

可选,配置上报链路追踪数据时携带的请求头,例如authentication: token-xxx,默认为空。

上报到Zipkin

配置项

说明

OpenTelemetry服务域名(完整FQDN)

自建系统服务域名,需要为完整的FQDN。例如 zipkin.istio-system.svc.cluster.local

OpenTelemetry服务端口

自建系统服务端口,例如8090

请求路径

上报链路追踪数据的请求路径,例如/api/v2/spans,默认为/api/v2/spans

上报到Skywalking

配置项

说明

OpenTelemetry服务域名(完整FQDN)

自建系统服务域名,需要为完整的FQDN。例如 skywalking.istio-system.svc.cluster.local

OpenTelemetry服务端口

自建系统服务端口,例如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