Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Jaeger v2] Add Kafka exporter and receiver #4868

Open
6 tasks
Tracked by #4843
yurishkuro opened this issue Oct 20, 2023 · 8 comments
Open
6 tasks
Tracked by #4843

[Jaeger v2] Add Kafka exporter and receiver #4868

yurishkuro opened this issue Oct 20, 2023 · 8 comments
Labels
good first issue Good for beginners help wanted Features that maintainers are willing to accept but do not have cycles to implement v2

Comments

@yurishkuro
Copy link
Member

yurishkuro commented Oct 20, 2023

Part of #4843

Objective

  • Demonstrate using Kafka exporter & receiver from OTEL Collector Contrib with jaeger-v2 as a replacement for jaeger-collector / jaeger-ingester
  • Document gaps in backwards compatibility

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

  • Add wiring and sample configuration to prototype Add jaeger-v2 single binary based on OTEL collector #4766
  • Test backwards compatibility:
    • Sending spans in Jaeger format to Kafka
    • Receiving spans in all formats that jaeger-ingester supports today
  • Document gaps
  • Provide reproducible integration test scripts (manually run)

This issue is not a one-evening-worth kind, but the steps are simple enough that I think it can be good-first-issue.

@yurishkuro yurishkuro added help wanted Features that maintainers are willing to accept but do not have cycles to implement good first issue Good for beginners v2 labels Oct 20, 2023
@NavinShrinivas
Copy link
Contributor

NavinShrinivas commented Oct 23, 2023

Hey, I'd like to try this

Just to warrant my understanding :

@yurishkuro
Copy link
Member Author

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
Copy link
Contributor

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
Copy link
Member Author

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

@varshith257
Copy link
Contributor

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

  • Test backwards compatibility:
  • Sending spans in Jaeger format to Kafka
  • Receiving spans in all formats that jaeger-ingester supports today
  • Document gaps
  • Provide reproducible integration test scripts (manually run)

@yurishkuro
Copy link
Member Author

@james-ryans has it

@varshith257
Copy link
Contributor

@james-ryans Any updates here?

@james-ryans
Copy link
Contributor

@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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for beginners help wanted Features that maintainers are willing to accept but do not have cycles to implement v2
Projects
Status: In Progress
Development

No branches or pull requests

4 participants