将 Trace 转发到 Jaeger 实例

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

前提条件

  • 已安装 Alauda build 的 OpenTelemetry v2 Operator。
  • 已安装并部署 Alauda Build 的 Jaeger v2。
  • 集群管理员已使用 cluster-admin 角色建立一个活跃的 ACP CLI (kubectl) 会话。
  • 按照 Procedure 中的说明启用 Automatic 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. 该 namespace 决定在何处创建 Collector 资源。
    2. exporter endpoint 必须指向 Jaeger collector service。请将 jaeger-collector.jaeger-system.svc.cluster.local:4317 替换为你的 Jaeger 部署的实际 service。
    3. 此 trace pipeline 接受 Jaeger、OTLP 和 Zipkin 流量。请使用这些 receiver protocols 之一为已进行埋点的应用配置 trace 发送。

Collector 运行后,已进行埋点的应用可以将 trace 数据发送到 Collector service endpoint,而 Collector 会将这些 trace 转发到 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
# 等待 telemetrygen 完成,然后清理测试 Pod
kubectl wait -n jaeger-system --for=jsonpath='{.status.phase}'=Succeeded pod/telemetrygen --timeout=10m
kubectl delete pod -n jaeger-system telemetrygen