将跟踪数据转发到 Jaeger 实例

若要将跟踪数据发送到 Jaeger 实例,请以 deployment 模式部署 OpenTelemetry Collector,并配置一个将数据导出到 Jaeger collector 端点的跟踪管道。

前提条件

  • 已安装 Alauda Container Platform Application Observability(之前称为 Alauda Build of OpenTelemetry v2)Operator。
  • 已安装并部署 Alauda Container Platform Distributed Tracing(之前称为 Alauda Build of Jaeger v2)。
  • 集群管理员已建立有效的 ACP CLI (kubectl) 会话,并拥有 cluster-admin 角色。
  • 按照操作步骤中的说明启用自动创建 RBAC。

操作步骤

  1. 创建一个 OpenTelemetryCollector 资源:

    kubectl apply -f - <<EOF
    apiVersion: opentelemetry.io/v1beta1
    kind: OpenTelemetryCollector
    metadata:
      name: otel
      namespace: jaeger-system
    spec:
      mode: deployment
      replicas: 1
      config:
        receivers:
          jaeger:
            protocols:
              grpc: {}
              thrift_binary: {}
              thrift_compact: {}
              thrift_http: {}
          otlp:
            protocols:
              grpc:
                endpoint: 0.0.0.0:4317
              http:
                endpoint: 0.0.0.0:4318
          zipkin: {}
        processors:
          batch: {}
          k8s_attributes: {}
          memory_limiter:
            check_interval: 1s
            limit_percentage: 80
            spike_limit_percentage: 20
        exporters:
          otlp_grpc/traces:
            endpoint: "jaeger-collector.jaeger-system.svc.cluster.local:4317"
            tls:
              insecure: true
        service:
          pipelines:
            traces:
              receivers: [jaeger, otlp, zipkin] 
              processors: [memory_limiter, k8s_attributes, batch]
              exporters: [otlp_grpc/traces]
    EOF
    1. 命名空间决定 Collector 资源的创建位置。
    2. OTLP gRPC exporter 的名称为 otlp_grpc。旧名称 otlp 仍然可用,但已弃用。请注意,OTLP receiver 仍使用名称 otlp;请参阅组件类型名称。
    3. exporter 端点必须指向 Jaeger collector 服务。将 jaeger-collector.jaeger-system.svc.cluster.local:4317 替换为 Jaeger 部署中的实际服务。
    4. 此跟踪管道接受 Jaeger、OTLP 和 Zipkin 流量。配置经过插桩的应用,使用其中一种 receiver 协议发送跟踪数据。

Collector 运行后,经过插桩的应用即可将跟踪数据发送到 Collector 服务端点,Collector 随后会将跟踪数据转发到 Jaeger。

TIP

可将 telemetrygen 部署为测试客户端:

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: telemetrygen
  namespace: jaeger-system
spec:
  restartPolicy: Never
  containers:
    - name: telemetrygen
      image: ghcr.io/open-telemetry/opentelemetry-collector-contrib/telemetrygen:latest
      args:
        - traces
        - --otlp-endpoint=otel-collector.jaeger-system.svc.cluster.local:4317
        - --otlp-insecure
        - --duration=150s
        - --interval=5s
        - --child-spans=3
        - --rate=2
        - --service=telemetrygen
        - --workers=1
EOF
# Wait for telemetrygen to complete, then clean up the test Pod
kubectl wait -n jaeger-system --for=jsonpath='{.status.phase}'=Succeeded pod/telemetrygen --timeout=10m
kubectl delete pod -n jaeger-system telemetrygen