You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Kafka的OTLP追踪数据发送至Jaeger?配置Jaeger为Kafka消费者

如何让Jaeger消费Kafka中的OTLP追踪数据

方案一:直接配置Jaeger All-in-One作为Kafka消费者

Jaeger的all-in-one镜像支持通过环境变量或配置文件开启Kafka消费者,订阅otlp_spans Topic并将数据导入Jaeger存储。

1. 修改Jaeger的K8s部署配置

在Jaeger的Deployment/StatefulSet中添加以下环境变量:

  • SPAN_STORAGE_TYPE: 设为kafka,指定用Kafka作为span数据源
  • KAFKA_BOOTSTRAP_SERVERS: Kafka集群的Bootstrap服务地址(例如kafka-headless.your-namespace.svc.cluster.local:9092)
  • KAFKA_TOPIC: 设为otlp_spans,指定要消费的Topic
  • KAFKA_CONSUMER_GROUP_ID: 自定义消费者组ID,比如jaeger-otlp-spans-consumer
  • 若Kafka启用了认证(如SASL),需额外添加对应环境变量,比如KAFKA_SASL_MECHANISM、KAFKA_SASL_USERNAME、KAFKA_SASL_PASSWORD等

示例K8s配置片段:

containers:
- name: jaeger-all-in-one
  image: jaegertracing/all-in-one:latest
  env:
  - name: SPAN_STORAGE_TYPE
    value: "kafka"
  - name: KAFKA_BOOTSTRAP_SERVERS
    value: "kafka-headless.your-namespace.svc.cluster.local:9092"
  - name: KAFKA_TOPIC
    value: "otlp_spans"
  - name: KAFKA_CONSUMER_GROUP_ID
    value: "jaeger-otlp-spans-consumer"

2. 注意事项

  • 确保Jaeger Pod能访问Kafka集群的网络(同集群或跨集群网络已打通)
  • 需确认otlp_spans中的消息格式是Jaeger可解析的:如果OTEL Collector发送的是OTLP原生格式Span,Jaeger的Kafka消费者可能无法直接解析,此时建议采用方案二。

方案二:用OpenTelemetry Collector中转(兼容性更强)

OTEL Collector原生支持消费Kafka中的OTLP格式数据,并转发至Jaeger,这种方式适配性更好,尤其适合OTLP格式的消息场景。

1. 编写OTEL Collector配置文件

创建otel-collector-config.yaml:

receivers:
  kafka:
    brokers: ["kafka-headless.your-namespace.svc.cluster.local:9092"]
    topics: ["otlp_spans"]
    protocol_version: "2.0.0"
    consumer_group: "otel-kafka-traces-consumer"
    encoding: otlp_proto # 匹配OTEL Collector发送的消息格式

exporters:
  jaeger:
    endpoint: "jaeger-all-in-one.your-namespace.svc.cluster.local:14250"
    tls:
      insecure: true # 若Jaeger启用了TLS,需调整此配置

service:
  pipelines:
    traces:
      receivers: [kafka]
      exporters: [jaeger]

2. 在K8s中部署该OTEL Collector

先创建ConfigMap挂载配置文件:

kubectl create configmap otel-collector-kafka-config --from-file=otel-collector-config.yaml -n your-namespace

再创建Deployment资源:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: otel-collector-kafka-forwarder
  namespace: your-namespace
spec:
  replicas: 1
  selector:
    matchLabels:
      app: otel-collector-kafka-forwarder
  template:
    metadata:
      labels:
        app: otel-collector-kafka-forwarder
    spec:
      containers:
      - name: otel-collector
        image: otel/opentelemetry-collector-contrib:latest
        args: ["--config=/etc/otel-collector-config.yaml"]
        volumeMounts:
        - name: config-volume
          mountPath: /etc
      volumes:
      - name: config-volume
        configMap:
          name: otel-collector-kafka-config

关于自定义Kafka Sink Connector的说明

通常无需自定义Kafka Sink Connector,上述两种方案已能满足需求。若一定要使用Connector,可选用Confluent的Jaeger Sink Connector,但需确保Connector能解析OTLP格式消息,并正确配置Jaeger端点,这种方式复杂度更高,不推荐优先使用。

内容的提问来源于stack exchange,提问作者Ajinkya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 04:00:18