client_java
GitHub Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Callbacks

The section on metric types showed how to use metrics that actively maintain their state.

This section shows how to create callback-based metrics, i.e. metrics that invoke a callback at scrape time to get the current values.

For example, let’s assume we have two instances of a Cache, a coldCache and a hotCache. The following implements a callback-based cache_size_bytes metric:

Cache coldCache = new Cache(); Cache hotCache = new Cache();  GaugeWithCallback.builder()  .name("cache_size_bytes")  .help("Size of the cache in Bytes.")  .unit(Unit.BYTES)  .labelNames("state")  .callback(callback -> {  callback.call(coldCache.sizeInBytes(), "cold");  callback.call(hotCache.sizeInBytes(), "hot");  })  .register(); 

The resulting text format looks like this:

# TYPE cache_size_bytes gauge # UNIT cache_size_bytes bytes # HELP cache_size_bytes Size of the cache in Bytes. cache_size_bytes{state="cold"} 78.0 cache_size_bytes{state="hot"} 83.0 

Better examples of callback metrics can be found in the prometheus-metrics-instrumentation-jvm module.

The available callback metric types are:

  • GaugeWithCallback for gauges.
  • CounterWithCallback for counters.
  • SummaryWithCallback for summaries.

The API for gauges and counters is very similar. For summaries the callback has a few more parameters, because it accepts a count, a sum, and quantiles:

SummaryWithCallback.builder()  .name("example_callback_summary")  .help("help message.")  .labelNames("status")  .callback(callback -> {  callback.call(cache.getCount(), cache.getSum(), Quantiles.EMPTY, "ok");  })  .register();