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();