jaegertracing / jaeger

CNCF Jaeger, a Distributed Tracing Platform
https://www.jaegertracing.io/
Apache License 2.0
20.32k stars 2.42k forks source link

[Jaeger v2] Add Kafka exporter and receiver #4868

Closed yurishkuro closed 2 months ago

yurishkuro commented 12 months ago

Part of #4843

Objective

Design

We want to rely on OTel's usual pipeline setup, which should allow us to use OTel's Kafka receiver and exporter without changes. For example, this is how it might look

Replacement for jaeger-collector

jaeger-v2 --config collector-with-kafka.yaml
# collector-with-kafka.yaml
service:
  # extensions: [jaeger_storage, jaeger_query] # don't really need these for collector with Kafka
  pipelines:
    traces:
      receivers: [otlp, jaeger, zipkin]
      processors: [batch]
      exporters: [kafka]  # using standard Kafka exporter as the only one

Replacement for jaeger-ingester

jaeger-v2 --config ingester.yaml
# ingester.yaml
service:
  extensions: [jaeger_storage, jaeger_query]
  pipelines:
    traces:
      receivers: [kafka] # using standard Kafka receiver as the only one
      processors: [batch]
      exporters: [jaeger_storage_exporter]  # same as in the default cmd/jaeger-v2/config.yaml

Steps

NavinShrinivas commented 11 months ago

Hey, I'd like to try this

Just to warrant my understanding :

yurishkuro commented 11 months ago

I'm assuming here that the single v2 binary is responsible for ingesting and querying this means

yes but it can be configured to run in different roles

Will export data to various stores(using kafka)? [Im Not sure about this point] OR are we testing if otel exporters can export jaeger traces to kafka?

the "collector" mode will be receiving spans over network, e.g. OTLP receiver, and using Kafka exporter to write them to Kafka. The "ingester" mode will be using Kafka receiver and then using Jaeger storage exporter to persist in a database.

NavinShrinivas commented 11 months ago

We only seem to be providing one config.yaml (which I assume includes config for both collector and ingester, as mentioned in the doc [Option 2 (selected): shared runtime component] ) So the config will look something like this : On collector end :

extensions:
  jaeger_storage:
    kafka:
        kafka_traces:
             kafka_topic: traces

exporters:
  jaeger_storage_exporter:
    trace_storage: kafka_traces

I'm still not sure how the "ingester" (Which I think is the "jeager_storage" is able to reference another Jaeger storage (Kafka). Also, are these features even supported and implemented in the v2 binary (To read something like the above config file)?

yurishkuro commented 11 months ago

@NavinShrinivas see examples I added to the issue description. There is no explicit interaction required between Kafka components and jaeger_storage.

varshith257 commented 7 months ago

@yurishkuro Is this WIP or needed to work on for those not has any merged PRs:

yurishkuro commented 7 months ago

@james-ryans has it

varshith257 commented 7 months ago

@james-ryans Any updates here?

james-ryans commented 7 months ago

@james-ryans Any updates here?

The PR addressing this issue is #4971 and is currently in progress but is blocked by an upstream issue at otelcol-contrib#30789. I haven't received enough context to assist in fixing the upstream issue, as we have prioritized adding full support for Jaeger-v2 storage backends. I'll return to this once our priorities have been addressed.