将追踪数据转发到 Jaeger 实例

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

前提条件

  • 已安装 Alauda Container Platform Application Observability(之前称为 Alauda Build of OpenTelemetry v2)Operator。
  • 已安装并部署 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: {}
          k8sattributes: {}
          memory_limiter:
            check_interval: 1s
            limit_percentage: 80
            spike_limit_percentage: 20
        exporters:
          otlp/traces:
            endpoint: "jaeger-collector.jaeger-system.svc.cluster.local:4317"
            tls:
              insecure: true
        service:
          pipelines:
            traces:
              receivers: [jaeger, otlp, zipkin] 
              processors: [memory_limiter, k8sattributes, batch]
              exporters: [otlp/traces]
    EOF
    1. 命名空间决定 Collector 资源的创建位置。
    2. 导出器端点必须指向 Jaeger collector 服务。将 jaeger-collector.jaeger-system.svc.cluster.local:4317 替换为 Jaeger 部署中的实际服务。
    3. 此追踪流水线接受 Jaeger、OTLP 和 Zipkin 流量。请配置已插桩的应用,以使用其中一种接收器协议发送追踪数据。

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