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

Export to Jaeger using gRPC #128

Closed
jpkrohling opened this issue Sep 18, 2019 · 12 comments
Closed

Export to Jaeger using gRPC #128

jpkrohling opened this issue Sep 18, 2019 · 12 comments
Milestone

Comments

@jpkrohling
Copy link
Member

The current preferred way to send data to Jaeger's collector is via gRPC. The current Jaeger exporter is however using Thrift. While Thrift might still be needed for legacy environments, there should be a gRPC option for the Jaeger exporter, potentially being the default option.

@jmacd jmacd modified the milestone: Tracing SDK Sep 19, 2019
@iredelmeier
Copy link
Member

Unable to add myself as an assignee but I'm picking this up

@iredelmeier
Copy link
Member

@jpkrohling from my understanding, only the collector supports gRPC, and the agent is still Thrift-only. Is this correct? If so, is the idea here that the exporter should skip the agent and connect directly to the collector?

CC @rghetia since I believe you were also interested in getting Jaeger + gRPC in.

@rghetia
Copy link
Contributor

rghetia commented Sep 24, 2019

Unable to add myself as an assignee but I'm picking this up

Thanks for picking it up. I have assigned it to you.

@iredelmeier
Copy link
Member

Thanks @rghetia!

Did you have more context on the use case? It's currently unclear to me whether we want the exporter to ever communicate directly with the collector instead of the agent.

@rghetia
Copy link
Contributor

rghetia commented Sep 24, 2019

Thanks @rghetia!

Did you have more context on the use case? It's currently unclear to me whether we want the exporter to ever communicate directly with the collector instead of the agent.

My understanding is same as yours which is client libraries export spans to Agent and Agent sends it to Collector. Agent only supports HTTP endpoints.
Lets' wait for a response from @jpkrohling .

@jpkrohling
Copy link
Member Author

By default, Jaeger client libraries send spans via UDP in Thrift format to agents. However, most client libraries can be configured to talk to a remote collector via HTTP. Right now, I think we have no clients able to send data via gRPC, but the Jaeger Agent sends data to the Collector via gRPC by default since a couple of releases.

To clarify my original message: this issue here is only about the situation where the library is set to bypass the agent, sending data directly to a remote collector.

@iredelmeier
Copy link
Member

@jpkrohling thanks for the clarification!

What are your thoughts on getting this change accomplished upstream in jaeger-client-go first, and then using the client in the exporter? It feels a bit funky to not be consuming it here.

@jpkrohling
Copy link
Member Author

From what I remember, we haven't implemented it in the official libraries yet because we are waiting to see if the OpenTelemetry clients will replace them in the future. I personally prefer to collaborate on the same set of client libraries.

We had a similar discussion as part of open-telemetry/opentelemetry-java#469 and decided to not depend on the Jaeger Java Client there. If the maintainers of opentelemetry-go prefer to consume jaeger-client-go instead, we can probably implement the gRPC transport there first.

@iredelmeier
Copy link
Member

Interesting, thanks for that context @jpkrohling!

Speaking strictly on behalf of myself, I agree that it makes more sense for the OpenTelemetry exporters to consume the official clients, preferably with some sort of wrapper on top - something approximately like:

package main

import "go.opentelemetry.io/exporters/jaeger"

options := []jaeger.Option{
  // ...
}
exporter := jaeger.NewExporter(options...)
package jaeger

import (
  "github.com/jaegertracing/jaeger-client-go"
  "github.com/jaegertracing/jaeger-client-go/config"
)

type Exporter struct {
  tracer *jaeger.Tracer
}

type Option func(*config)

type config struct {
  configuration config.Configuration
}

@jpkrohling
Copy link
Member Author

I think it would be good then to have a single strategy for all clients: it will certainly be confusing to developers if the Go client is configured in a way that is different from the Java client.

@rghetia
Copy link
Contributor

rghetia commented Mar 26, 2020

Closing stale issue.

@rghetia rghetia closed this as completed Mar 26, 2020
@LiranBinshtok
Copy link

LiranBinshtok commented Nov 22, 2023

I am sorry if my question was answered somewhere else but I have been searching and trying to solve this issue for the last couple of days and did not find a definitive answer. should my application send traces directly to the collector or should i use and agent in the middle? i am deploying on top of k8s, and i am using sidecar as an agent but as it seems the agent does not expose grpc or protobuf or even the http ports.

@XSAM XSAM added this to the untracked milestone Nov 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants