Add exemplars support for Micrometer Tracing#805
Add exemplars support for Micrometer Tracing#805jonatan-ivanov wants to merge 1 commit intoprometheus:mainfrom
Conversation
Signed-off-by: Jonatan Ivanov <jonatan.ivanov@gmail.com>
68cdf76 to
1d5e4c7
Compare
|
Also, do you happen to know why the javadoc goal is failing? The error message does not seem to be very helpful. |
| ExemplarSampler exemplarSampler = new DefaultExemplarSampler(new MicrometerTracingSpanContextSupplier(tracer)); | ||
| ExemplarConfig.setCounterExemplarSampler(exemplarSampler); | ||
| ExemplarConfig.setHistogramExemplarSampler(exemplarSampler); | ||
| ExemplarConfig.enableExemplars(); |
There was a problem hiding this comment.
I just read your comment above again. Yes, the current implementation in Tracer.findSpanContextSupplier() assumes that it can get a tracer from a static variable. In that case client_java will use that tracer automatically, and users don't need any explicit code for that.
However, if the tracer is not available via a static variable, you need to set it explicitly as in your example above. I don't see any other way how to do it.
There was a problem hiding this comment.
Sorry again for dropping the ball. Thanks a lot for adding Micrometer tracer support for Examplars.
I will take another look at the initialization, but I think if there's no static variable to get the tracer, users will need to set the tracer explicitly as in your example.
|
Hello again, I had another look.
|
|
Heads-up: I renamed |
|
javadoc: 🤦🏼 🤣 I'm sorry. static initialization
Spring and other CDI solutions will initialize their context after class loading (by creating non-static instances) so even if they inject something to a static context, that will happen (or can easily happen without control) after the java client's static initializers were executed. Also, since they can (and will) inject the registry, the global/static components are less useful in those environments (in fact they can cause trouble and make testing hard/impossible). This is my honest feedback, I don't want to offend anyone or step on any toes (also, I'm biased): I think the Prometheus Java Client should focus on letting CDI/users configure things in non-static ways (providing builders with defaults and factory methods are completely ok). I think it could also use a
If Micrometer Tracing adds support for another Tracing library or Prometheus Client adds support for another Tracing library (i.e.: Brave) or both, this will increase quickly |
This PR adds exemplars support for Micrometer Tracing.
Micrometer Tracing is the successor of Spring Cloud Sleuth in terms of providing an abstraction layer over tracing libraries (i.e.: Brave and OTel) and it provides distributed tracing support for the Spring portfolio (Spring Boot 3.x, Spring Framework 6.x, etc).
There is one thing missing from this PR where I would like to ask for some guidance from the maintainers: there is no static configuration. Since Micrometer Tracing needs a
Tracerinstance and it supports both Brave + OTel (Brave does not have static config) this might be problematic since users can use their ownTracerinstance that might be different than the Prometheus client is aware of.@fstab @tomwilkie