将链路追踪数据采集到阿里云可观测链路OpenTelemetry版

阿里云服务网格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