Class Histogram
- java.lang.Object
-
- io.prometheus.client.Collector
-
- io.prometheus.client.SimpleCollector<Histogram.Child>
-
- io.prometheus.client.Histogram
-
- All Implemented Interfaces:
Collector.Describable
public class Histogram extends SimpleCollector<Histogram.Child> implements Collector.Describable
Histogram metric, to track distributions of events.Example of uses for Histograms include:
- Response latency
- Request size
Note: Each bucket is one timeseries. Many buckets and/or many dimensions with labels can produce large amount of time series, that may cause performance problems.
The default buckets are intended to cover a typical web/rpc request from milliseconds to seconds.
Example Histograms:
class YourClass { static final Histogram requestLatency = Histogram.build() .name("requests_latency_seconds").help("Request latency in seconds.").register(); void processRequest(Request req) { Histogram.Timer requestTimer = requestLatency.startTimer(); try { // Your code here. } finally { requestTimer.observeDuration(); } } // Or if using Java 8 lambdas. void processRequestLambda(Request req) { requestLatency.time(() -> { // Your code here. }); } }
You can choose your own buckets:
static final Histogram requestLatency = Histogram.build() .buckets(.01, .02, .03, .04) .name("requests_latency_seconds").help("Request latency in seconds.").register();
linearBuckets
andexponentialBuckets
offer easy ways to set common bucket patterns.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
Histogram.Builder
static class
Histogram.Child
The value of a single Histogram.static class
Histogram.Timer
Represents an event being timed.-
Nested classes/interfaces inherited from class io.prometheus.client.Collector
Collector.Describable, Collector.MetricFamilySamples, Collector.Type
-
-
Field Summary
-
Fields inherited from class io.prometheus.client.SimpleCollector
children, fullname, help, labelNames, noLabelsChild, unit
-
Fields inherited from class io.prometheus.client.Collector
MILLISECONDS_PER_SECOND, NANOSECONDS_PER_SECOND
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static Histogram.Builder
build()
Return a Builder to allow configuration of a new Histogram.static Histogram.Builder
build(String name, String help)
Return a Builder to allow configuration of a new Histogram.List<Collector.MetricFamilySamples>
collect()
Return all metrics of this Collector.List<Collector.MetricFamilySamples>
describe()
Provide a list of metric families this Collector is expected to return.protected Histogram.Child
newChild()
Return a new child, workaround for Java generics limitations.void
observe(double amt)
Observe the given amount on the histogram with no labels.void
observeWithExemplar(double amt, String... exemplarLabels)
LikeHistogram.Child.observeWithExemplar(double, String...)
, but for the histogram without labels.void
observeWithExemplar(double amt, Map<String,String> exemplarLabels)
LikeHistogram.Child.observeWithExemplar(double, Map)
, but for the histogram without labels.Histogram.Timer
startTimer()
Start a timer to track a duration on the histogram with no labels.double
time(Runnable timeable)
Executes runnable code (e.g.<E> E
time(Callable<E> timeable)
Executes callable code (e.g.double
timeWithExemplar(Runnable timeable, String... exemplarLabels)
Liketime(Runnable)
, but additionally create an exemplar.double
timeWithExemplar(Runnable timeable, Map<String,String> exemplarLabels)
Liketime(Runnable)
, but additionally create an exemplar.<E> E
timeWithExemplar(Callable<E> timeable, String... exemplarLabels)
Liketime(Callable)
, but additionally create an exemplar.<E> E
timeWithExemplar(Callable<E> timeable, Map<String,String> exemplarLabels)
Liketime(Callable)
, but additionally create an exemplar.-
Methods inherited from class io.prometheus.client.SimpleCollector
clear, familySamplesList, initializeNoLabelsChild, labels, remove, setChild
-
Methods inherited from class io.prometheus.client.Collector
checkMetricLabelName, checkMetricName, collect, doubleToGoString, register, register, sanitizeMetricName
-
-
-
-
Method Detail
-
build
public static Histogram.Builder build(String name, String help)
Return a Builder to allow configuration of a new Histogram. Ensures required fields are provided.- Parameters:
name
- The name of the metrichelp
- The help string of the metric
-
build
public static Histogram.Builder build()
Return a Builder to allow configuration of a new Histogram.
-
newChild
protected Histogram.Child newChild()
Description copied from class:SimpleCollector
Return a new child, workaround for Java generics limitations.- Specified by:
newChild
in classSimpleCollector<Histogram.Child>
-
observe
public void observe(double amt)
Observe the given amount on the histogram with no labels.- Parameters:
amt
- in most cases amt should be >= 0. Negative values are supported, but you should read https://prometheus.io/docs/practices/histograms/#count-and-sum-of-observations for implications and alternatives.
-
observeWithExemplar
public void observeWithExemplar(double amt, String... exemplarLabels)
LikeHistogram.Child.observeWithExemplar(double, String...)
, but for the histogram without labels.
-
observeWithExemplar
public void observeWithExemplar(double amt, Map<String,String> exemplarLabels)
LikeHistogram.Child.observeWithExemplar(double, Map)
, but for the histogram without labels.
-
startTimer
public Histogram.Timer startTimer()
Start a timer to track a duration on the histogram with no labels.Call
Histogram.Timer.observeDuration()
at the end of what you want to measure the duration of.
-
time
public double time(Runnable timeable)
Executes runnable code (e.g. a Java 8 Lambda) and observes a duration of how long it took to run.- Parameters:
timeable
- Code that is being timed- Returns:
- Measured duration in seconds for timeable to complete.
-
timeWithExemplar
public double timeWithExemplar(Runnable timeable, String... exemplarLabels)
Liketime(Runnable)
, but additionally create an exemplar.See
Histogram.Child.observeWithExemplar(double, String...)
for documentation on theexemplarLabels
parameter.
-
timeWithExemplar
public double timeWithExemplar(Runnable timeable, Map<String,String> exemplarLabels)
Liketime(Runnable)
, but additionally create an exemplar.See
Histogram.Child.observeWithExemplar(double, Map)
for documentation on theexemplarLabels
parameter.
-
time
public <E> E time(Callable<E> timeable)
Executes callable code (e.g. a Java 8 Lambda) and observes a duration of how long it took to run.- Parameters:
timeable
- Code that is being timed- Returns:
- Result returned by callable.
-
timeWithExemplar
public <E> E timeWithExemplar(Callable<E> timeable, String... exemplarLabels)
Liketime(Callable)
, but additionally create an exemplar.See
Histogram.Child.observeWithExemplar(double, String...)
for documentation on theexemplarLabels
parameter.
-
timeWithExemplar
public <E> E timeWithExemplar(Callable<E> timeable, Map<String,String> exemplarLabels)
Liketime(Callable)
, but additionally create an exemplar.See
Histogram.Child.observeWithExemplar(double, Map)
for documentation on theexemplarLabels
parameter.
-
collect
public List<Collector.MetricFamilySamples> collect()
Description copied from class:Collector
Return all metrics of this Collector.
-
describe
public List<Collector.MetricFamilySamples> describe()
Description copied from interface:Collector.Describable
Provide a list of metric families this Collector is expected to return. These should exclude the samples. This is used by the registry to detect collisions and duplicate registrations. Usually custom collectors do not have to implement Describable. If Describable is not implemented and the CollectorRegistry was created with auto describe enabled (which is the case for the default registry) thenCollector.collect()
will be called at registration time instead of describe. If this could cause problems, either implement a proper describe, or if that's not practical have describe return an empty list.- Specified by:
describe
in interfaceCollector.Describable
-
-