I am building a demo application to show off Prometheus Exemplars and 
OpenTelemetry Tracing abilities with Java / Spring applications.  However, 
I cannot get exemplars to appear in the metrics HTTP endpoint.  I'm using 
the following curl command and I get metrics in the OpenMetrics format, but 
no exemplars.

    $ curl -H 'Accept: application/openmetrics-text; version=1.0.0; 
charset=utf-8' http://localhost:8081/metrics

I've got the Prometheus client_java 0.12.0 loaded and I'm using that to 
directly instrument.  In build.gradle:

dependencies {
    ...
    implementation 'io.prometheus:simpleclient:0.12.0'
    implementation 'io.prometheus:simpleclient_hotspot:0.12.0'
    implementation 'io.prometheus:simpleclient_httpserver:0.12.0'
    implementation 'io.prometheus:simpleclient_tracer_otel:0.12.0'
    implementation 'io.prometheus:simpleclient_tracer_otel_agent:0.12.0'
    implementation('io.opentelemetry:opentelemetry-api:1.0.0')
    
implementation('io.opentelemetry:opentelemetry-extension-annotations:1.0.0')
}

I setup my Prometheus metrics in the class constructor:

    prometheusErrors = io.prometheus.client.Counter.build()
      .namespace("custommetricsdemo")
      .name("errors")
      .help("Test Prometheus Client Library errors counter")
      .withExemplars()
      .register();
    prometheusTimer = io.prometheus.client.Summary.build()
      .namespace("custommetricsdemo")
      .name("latency_timer")
      .help("Test Prometheus Client Library latency summary")
      .quantile(0.5, 0.01)
      .quantile(0.95, 0.01)
      .register();
    prometheusHistogram = io.prometheus.client.Histogram.build()
      .namespace("custommetricsdemo")
      .name("histogram")
      .help("Test Prometheus Client Library latency histogram")
      .withExemplars()
      .register();
​
    try {
      io.prometheus.client.exporter.HTTPServer server
        = new io.prometheus.client.exporter.HTTPServer(8081);
    } catch (Exception e) {
      logger.error("Failed to setup Prometheus HTTP server", e);
    }

This code runs a ScheduledTask at a random interval which sleeps for a 
random time.  Thanks to running with the OpenTelemetry Agent, I can see 
trace_id and span_id in the logback logs.  That part works well.  I can 
also query the span IDs in code:

logger.info("{}, {}", span.getSpanContext().getSpanId(), 
span.getSpanContext().getTraceId());

I could not get the auto-exemplars to work, so I began to observe them in 
code:

prometheusErrors.incWithExemplar("span_id", 
span.getSpanContext().getSpanId(), "trace_id", 
span.getSpanContext().getTraceId());

I also tested with different exemplar tag names:

prometheusHistogram.observeWithExemplar(sw.getTotalTimeSeconds(), 
"span_foo", span.getSpanContext().getSpanId(), "trace_bar", 
span.getSpanContext().getTraceId());

However, no exemplars ever appear in the output.

$ curl -H 'Accept: application/openmetrics-text; version=1.0.0; 
charset=utf-8' http://localhost:8081/metrics
# TYPE custommetricsdemo_histogram histogram
# HELP custommetricsdemo_histogram Test Prometheus Client Library latency 
histogram
custommetricsdemo_histogram_bucket{le="0.005"} 3.0
custommetricsdemo_histogram_bucket{le="0.01"} 3.0
custommetricsdemo_histogram_bucket{le="0.025"} 3.0
custommetricsdemo_histogram_bucket{le="0.05"} 4.0
custommetricsdemo_histogram_bucket{le="0.075"} 4.0
custommetricsdemo_histogram_bucket{le="0.1"} 4.0
custommetricsdemo_histogram_bucket{le="0.25"} 6.0
custommetricsdemo_histogram_bucket{le="0.5"} 9.0
custommetricsdemo_histogram_bucket{le="0.75"} 11.0
custommetricsdemo_histogram_bucket{le="1.0"} 11.0
custommetricsdemo_histogram_bucket{le="2.5"} 11.0
custommetricsdemo_histogram_bucket{le="5.0"} 11.0
custommetricsdemo_histogram_bucket{le="7.5"} 11.0
custommetricsdemo_histogram_bucket{le="10.0"} 11.0
custommetricsdemo_histogram_bucket{le="+Inf"} 11.0
custommetricsdemo_histogram_count 11.0
custommetricsdemo_histogram_sum 2.732210076
custommetricsdemo_histogram_created 1.632231018649E9

What am I missing here?  Is something interfering with the Spring Boot 
libraries perhaps?

Jack Neely

-- 
You received this message because you are subscribed to the Google Groups 
"Prometheus Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/prometheus-developers/7a09c0bc-a002-4643-a8fa-8cb6a24db87dn%40googlegroups.com.

Reply via email to