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

Add a new module supporting jaeger - opentracing #101

Closed
wants to merge 5 commits into from
Closed

Add a new module supporting jaeger - opentracing #101

wants to merge 5 commits into from

Conversation

cmoulliard
Copy link
Contributor

  • Added a new maven module supporting jaeger - opentracing
  • Added a starter to deploy a Spring Boot Jaeger application
  • Project has been tested using the ola spring boot application

@@ -20,6 +20,9 @@
<mockwebserver.version>0.0.12</mockwebserver.version>
<restassured.version>3.0.2</restassured.version>
<spock-spring.version>1.0-groovy-2.3</spock-spring.version>
<version.jaeger>0.19.0</version.jaeger>
<io.opentracing.version>0.22.0</io.opentracing.version>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fyi 0.22 is api incompatible with 0.30

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is fine here, these versions match

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will update the version as jaeger-core - 0.19.0 has a dep with opentracing 0.22

[INFO] com.uber.jaeger:jaeger-core:jar:0.19.0
[INFO] +- com.uber.jaeger:jaeger-thrift:jar:0.19.0:compile
[INFO] |  \- org.apache.thrift:libthrift:jar:0.9.2:compile
[INFO] |     +- org.apache.httpcomponents:httpclient:jar:4.2.5:compile
[INFO] |     |  +- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] |     |  \- commons-codec:commons-codec:jar:1.6:compile
[INFO] |     \- org.apache.httpcomponents:httpcore:jar:4.2.4:compile
[INFO] +- io.opentracing:opentracing-api:jar:0.22.0:compile
[INFO] +- com.google.code.gson:gson:jar:2.8.0:compile
[INFO] +- org.slf4j:slf4j-api:jar:1.7.16:compile

@codefromthecrypt
Copy link
Contributor

my 2p: this seems like more a community project than something we'd have in spring-cloud-kubernetes. sleuth is the spring-cloud's tracing solution. We don't want to inherit maintenance for third party apis, particularly api unstable ones never requested by an end user

@ConfigurationProperties("spring.cloud.kubernetes.jaeger.discovery")
public class KubernetesJaegerDiscoveryProperties {

private String tracerServerName = "jaeger-all-in-one";

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be called agentServiceName data could be sent to agent and collector.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will do that.

URL url = new URL(serviceURL);
Sender sender = new UdpSender(url.getHost(), url.getPort(), 0);
return new com.uber.jaeger.Tracer.Builder(serviceName,
new RemoteReporter(sender, 100, 50,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of these properties should be configurable, see https://github.com/uber/jaeger-client-java/tree/master/jaeger-core#configuration-via-environment at least queue size and flush interval.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@pavolloffay
Copy link

slueth is not OpenTracing compatible and we would like to go that direction.

@codefromthecrypt
Copy link
Contributor

codefromthecrypt commented Jun 7, 2017 via email

@codefromthecrypt
Copy link
Contributor

codefromthecrypt commented Jun 7, 2017 via email

@codefromthecrypt
Copy link
Contributor

codefromthecrypt commented Jun 7, 2017 via email

@cmoulliard
Copy link
Contributor Author

it isn't fine. the point is that this api breaks constantly and will
introduce thrash. bringing unstable components into a repo isn't something
to take lightly.

It's true about api breaks (like it has also been the case for AMQP or WebSocket till 1.0 have been released). However, the OT API version 1.0 should be out soon (although the date is not settled) and will stabilize existing situation. Those breaking changes happen because of major new features like active span in-process propagation.

Sleuth combines a variety of instrumentations and is harder to plug in instrumentation for a different framework, on the other hand, pure OT instrumentation allows us easily plug in different instrumentation together.

So, if you refuse this PR because the OT Api isn't stable enough, I will argue you that you have implemented a Spring Boot starter for AMQP - 0.9 while the spec wasn't stable enough. This is not because a spec API is not yet stable that we should not propose/provide an implementation as proposed here based on the Uber Jaeger project which is not at all a "community project" as you suggest but a Microservices Distributed Tracing Project [1] [2] offering more features than Zipkin

Moreover, as an API adapter has been proposed to the OpenTracing foundation [3] for spring Cloud Sleuth, that makes a lot of sense to continue to develop this PR, module. Do you agree ?

[1] : https://eng.uber.com/distributed-tracing/
[2] : https://uber.github.io/jaeger/
[3] : opentracing-contrib/meta#5

@codefromthecrypt
Copy link
Contributor

I'd recommend closing this issue

@cmoulliard
Copy link
Contributor Author

I'd recommend closing this issue

Why ?

@codefromthecrypt
Copy link
Contributor

The "community project" reference was not a qualitative reference about jaeger. It was that you can absolutely host this integration on your own, as a person in a community, in jaeger's org or opentracing's org or somewhere else.

I'm not going to restate the myriad of reasons why it is not the right time, both from a stability pov, or a relevance POV to put something like this in the core repo!

@codefromthecrypt
Copy link
Contributor

ps I'm not a maintainer of this project, so if contributors here decide to merge and maintain this ahead of user demand etc, that's its prerogative. I'm only commenting as a couple people were confused by this out-of-the-blue PR

@iocanel
Copy link
Contributor

iocanel commented Jun 7, 2017

I will not comment about api stability, as it refers to things I am not familiar with.

I am however, familiar with which integration, should be hosted where kind of talks. So I'll comment on that:

I don't see why we can't host this module here, same way we do for ribbon, hystrix, zipkin.
I also don't see why a feature has to be requested by a user first (especially for an incubating project).

Now, if spring-cloud has a policy like: "we host only one solution per problem (e.g. for tracing we will only host sleuth based stuff)", then I guess as a project that aspires to graduate, we will have to respect that.

@cmoulliard
Copy link
Contributor Author

This PR offers the possibility for Spring project running on Google Kubernetes or Openshift platform to really benefit about a modern OpenTracing API, where instrumentation exists, is independent of the implementation, is vendor neutral.

If you choose zipkin you have to stick with zipkin, OT allows you to change tracing backend with literally zero configuration change. There is no tracer API in zipkin - e.g. zipkin java tracer (brave) has totally different API that tracer in ruby or python.

Because OpenTracing is vendor neutral it is possible (and it is a goal of OT) is to write instrumentation only once. OpenTracing instrumentation can be reused for Zipkin or Jaeger.

The PR module proposed here could be turned into zipkin with minimal changes only tracer creation.

So far all tracing system had to write instrumentation by themselves, the same over and over (instana, datadog, new relic...). OT allows you to write it only once and then focus on thighs which really matters.

So why opentracing --> http://opentracing.io/documentation/#why-opentracing

@maxromanovsky
Copy link

@cmoulliard I don't get why it's k8s-specific. What about consul or netflix users? Also, IMHO there would be little to no people to support it, and it doesn't belong to k8s repo.

@spencergibb
Copy link
Member

It's been marked for team discussion, which we will discuss tomorrow.

@codefromthecrypt
Copy link
Contributor

@cmoulliard I've read the website and the tag line. Show me the tests that prove any of this works in practice. You do know stagemonitor needed to write a shim to work with two opentracing implementations. Now, they are rev-locked.. until everyone updates the same version.

screen shot 2017-06-07 at 6 58 51 pm

What you are doing now is wasting more time, and honestly I'm done responding to your trolls.

@spring-cloud spring-cloud locked and limited conversation to collaborators Jun 7, 2017
@spencergibb
Copy link
Member

I'll reopen discussion after our meeting tomorrow

@spencergibb
Copy link
Member

Thanks for the PR. There are a few things we'll comment on:

  1. This is not the appropriate project for this PR. We’re focusing our tracing efforts in the Spring Cloud Sleuth project: https://github.com/spring-cloud/spring-cloud-sleuth.

  2. There have been no requests for specific Jaeger support. (Also, Jaeger specifically supports Zipkin spans: http://jaeger.readthedocs.io/en/latest/getting_started/#migrating-from-zipkin.)

  3. On sleuth specifically (because this isn't the sleuth repo), we don't have demand to justify a strict dependency on OpenTracing. We would prefer that exposing OpenTracing apis optionally within Sleuth start as a community project, such as the existing OpenTracing integration for Spring Cloud Sleuth (https://github.com/DealerDotCom/sleuth-opentracing). We feel that we should wait to incorporate this support into a core project. We can revisit the topic once the community repository is more popular and apis are stable.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants