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

Closed
4 of 6 tasks
Tracked by #4843
yurishkuro opened this issue Oct 20, 2023 · 8 comments · Fixed by #5703 or #5782
Closed
4 of 6 tasks
Tracked by #4843

[Jaeger v2] Add Kafka exporter and receiver #4868

yurishkuro opened this issue Oct 20, 2023 · 8 comments · Fixed by #5703 or #5782

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

yurishkuro added a commit that referenced this issue Jul 24, 2024
<!--
!! Please DELETE this comment before posting.
We appreciate your contribution to the Jaeger project! 👋🎉
-->

## Which problem is this PR solving?
-  Resolves #4868 

## Description of the changes
- Add config files for replacement of jaeger-collector and
jaeger-ingester.
- Add the architecture for the integration tests for kafka. 
- Add e2e integration tests for Kafka. 

## How was this change tested?
- Manually ran the collector, ingester configs to check if the data is
being pushed and pulled the right way and verified the architecture.

## Checklist
- [x] I have read
https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md
- [x] I have signed all commits
- [x] I have added unit tests for the new functionality
- [x] I have run lint and test steps successfully
  - for `jaeger`: `make lint test`
  - for `jaeger-ui`: `yarn lint` and `yarn test`

---------

Signed-off-by: joeyyy09 <[email protected]>
Signed-off-by: Harshith Mente <[email protected]>
Signed-off-by: Yuri Shkuro <[email protected]>
Co-authored-by: Yuri Shkuro <[email protected]>
Co-authored-by: Yuri Shkuro <[email protected]>
@yurishkuro yurishkuro added mentorship and removed help wanted Features that maintainers are willing to accept but do not have cycles to implement good first issue Good for beginners labels Aug 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Done
4 participants