转发 Traces 到 Jaeger 实例

要将 traces 发送到 Jaeger 实例,请以 deployment 模式部署 OpenTelemetry Collector,并配置一个 trace pipeline,将数据导出到 Jaeger collector endpoint。

前提条件

  • 已安装 Alauda 版 OpenTelemetry v2 Operator。
  • 已安装并部署 Alauda 版 Jaeger v2。
  • 由具有 cluster-admin 角色的集群管理员建立的活动 ACP CLI (kubectl) 会话。
  • 按照 操作步骤 中的说明启用自动创建 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. namespace 决定了 Collector 资源的创建位置。
    2. OTLP gRPC exporter 的名称为 otlp_grpc。旧名称 otlp 仍然可用,但已弃用。请注意,OTLP receiver 仍保持名称 otlp;请参见 Component type names
    3. exporter endpoint 必须指向 Jaeger collector service。请将 jaeger-collector.jaeger-system.svc.cluster.local:4317 替换为你的 Jaeger 部署的实际 service。
    4. 该 trace pipeline 接受 Jaeger、OTLP 和 Zipkin 流量。请为已埋点的应用程序配置其中一种 receiver protocol,以发送 traces。

在 Collector 运行后,已埋点的应用程序可以将 trace 数据发送到 Collector service endpoint,而 Collector 会将 traces 转发到 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