public abstract class MeterRegistry
extends java.lang.Object
MeterRegistry may be used in a reactive context. As such, implementations must not negatively impact the calling thread, e.g. it should respond immediately by avoiding IO call, deep stack recursion or any coordination.
Modifier and Type | Class and Description |
---|---|
class |
MeterRegistry.Config
Access to configuration options for this registry.
|
class |
MeterRegistry.More
Additional, less commonly used meter types.
|
Modifier | Constructor and Description |
---|---|
protected |
MeterRegistry(Clock clock) |
Modifier and Type | Method and Description |
---|---|
MeterRegistry.Config |
config() |
Counter |
counter(java.lang.String name,
java.lang.Iterable<Tag> tags)
Tracks a monotonically increasing value.
|
Counter |
counter(java.lang.String name,
java.lang.String... tags)
Tracks a monotonically increasing value.
|
protected abstract HistogramConfig |
defaultHistogramConfig()
Every custom registry implementation should define a default histogram expiry:
|
Search |
find(java.lang.String name)
Initiate a search beginning with a metric name.
|
void |
forEachMeter(java.util.function.Consumer<? super Meter> consumer)
Iterate over each meter in the registry.
|
<T extends java.lang.Number> |
gauge(java.lang.String name,
java.lang.Iterable<Tag> tags,
T number)
Register a gauge that reports the value of the
Number . |
<T> T |
gauge(java.lang.String name,
java.lang.Iterable<Tag> tags,
T obj,
java.util.function.ToDoubleFunction<T> valueFunction)
Register a gauge that reports the value of the object after the function
f is applied. |
<T extends java.lang.Number> |
gauge(java.lang.String name,
T number)
Register a gauge that reports the value of the
Number . |
<T> T |
gauge(java.lang.String name,
T obj,
java.util.function.ToDoubleFunction<T> valueFunction)
Register a gauge that reports the value of the object.
|
<T extends java.util.Collection<?>> |
gaugeCollectionSize(java.lang.String name,
java.lang.Iterable<Tag> tags,
T collection)
Register a gauge that reports the size of the
Collection . |
<T extends java.util.Map<?,?>> |
gaugeMapSize(java.lang.String name,
java.lang.Iterable<Tag> tags,
T map)
Register a gauge that reports the size of the
Map . |
RequiredSearch |
get(java.lang.String name)
Initiate a search beginning with a metric name.
|
protected abstract java.util.concurrent.TimeUnit |
getBaseTimeUnit() |
protected java.lang.String |
getConventionName(Meter.Id id) |
protected java.util.List<Tag> |
getConventionTags(Meter.Id id) |
java.util.List<Meter> |
getMeters() |
MeterRegistry.More |
more()
Access to less frequently used meter types and patterns.
|
protected abstract Counter |
newCounter(Meter.Id id)
Build a new counter to be added to the registry.
|
protected abstract DistributionSummary |
newDistributionSummary(Meter.Id id,
HistogramConfig histogramConfig)
Build a new distribution summary to be added to the registry.
|
protected abstract <T> FunctionCounter |
newFunctionCounter(Meter.Id id,
T obj,
java.util.function.ToDoubleFunction<T> valueFunction)
Build a new function counter to be added to the registry.
|
protected abstract <T> FunctionTimer |
newFunctionTimer(Meter.Id id,
T obj,
java.util.function.ToLongFunction<T> countFunction,
java.util.function.ToDoubleFunction<T> totalTimeFunction,
java.util.concurrent.TimeUnit totalTimeFunctionUnits)
Build a new function timer to be added to the registry.
|
protected abstract <T> Gauge |
newGauge(Meter.Id id,
T obj,
java.util.function.ToDoubleFunction<T> valueFunction)
Build a new gauge to be added to the registry.
|
protected abstract LongTaskTimer |
newLongTaskTimer(Meter.Id id)
Build a new long task timer to be added to the registry.
|
protected abstract Meter |
newMeter(Meter.Id id,
Meter.Type type,
java.lang.Iterable<Measurement> measurements)
Build a new custom meter to be added to the registry.
|
protected <T> TimeGauge |
newTimeGauge(Meter.Id id,
T obj,
java.util.concurrent.TimeUnit valueFunctionUnit,
java.util.function.ToDoubleFunction<T> valueFunction)
Build a new time gauge to be added to the registry.
|
protected abstract Timer |
newTimer(Meter.Id id,
HistogramConfig histogramConfig,
PauseDetector pauseDetector)
Build a new timer to be added to the registry.
|
DistributionSummary |
summary(java.lang.String name,
java.lang.Iterable<Tag> tags)
Measures the distribution of samples.
|
DistributionSummary |
summary(java.lang.String name,
java.lang.String... tags)
Measures the distribution of samples.
|
Timer |
timer(java.lang.String name,
java.lang.Iterable<Tag> tags)
Measures the time taken for short tasks and the count of these tasks.
|
Timer |
timer(java.lang.String name,
java.lang.String... tags)
Measures the time taken for short tasks and the count of these tasks.
|
protected final Clock clock
protected MeterRegistry(Clock clock)
protected abstract <T> Gauge newGauge(Meter.Id id, @Nullable T obj, java.util.function.ToDoubleFunction<T> valueFunction)
T
- The type of the state object from which the gauge value is extracted.id
- The id that uniquely identifies the gauge.obj
- State object used to compute a value.valueFunction
- Function that is applied on the value for the number.protected abstract Counter newCounter(Meter.Id id)
id
- The id that uniquely identifies the counter.protected abstract LongTaskTimer newLongTaskTimer(Meter.Id id)
id
- The id that uniquely identifies the long task timer.protected abstract Timer newTimer(Meter.Id id, HistogramConfig histogramConfig, PauseDetector pauseDetector)
id
- The id that uniquely identifies the timer.protected abstract DistributionSummary newDistributionSummary(Meter.Id id, HistogramConfig histogramConfig)
id
- The id that uniquely identifies the distribution summary.protected abstract Meter newMeter(Meter.Id id, Meter.Type type, java.lang.Iterable<Measurement> measurements)
id
- The id that uniquely identifies the custom meter.protected <T> TimeGauge newTimeGauge(Meter.Id id, T obj, java.util.concurrent.TimeUnit valueFunctionUnit, java.util.function.ToDoubleFunction<T> valueFunction)
id
- The id that uniquely identifies the time gauge.protected abstract <T> FunctionTimer newFunctionTimer(Meter.Id id, T obj, java.util.function.ToLongFunction<T> countFunction, java.util.function.ToDoubleFunction<T> totalTimeFunction, java.util.concurrent.TimeUnit totalTimeFunctionUnits)
id
- The id that uniquely identifies the function timer.protected abstract <T> FunctionCounter newFunctionCounter(Meter.Id id, T obj, java.util.function.ToDoubleFunction<T> valueFunction)
id
- The id that uniquely identifies the function counter.protected java.lang.String getConventionName(Meter.Id id)
protected abstract java.util.concurrent.TimeUnit getBaseTimeUnit()
protected abstract HistogramConfig defaultHistogramConfig()
histogramConfig.builder() .histogramExpiry(defaultStep) .build() .merge(HistogramConfig.DEFAULT);
public java.util.List<Meter> getMeters()
public void forEachMeter(java.util.function.Consumer<? super Meter> consumer)
consumer
- Consumer of each meter during iteration.public MeterRegistry.Config config()
public Search find(java.lang.String name)
null
.name
- The meter name to locate.public RequiredSearch get(java.lang.String name)
MeterNotFoundException
is thrown.name
- The meter name to locate.public Counter counter(java.lang.String name, java.lang.Iterable<Tag> tags)
name
- The base metric nametags
- Sequence of dimensions for breaking down the name.public Counter counter(java.lang.String name, java.lang.String... tags)
name
- The base metric nametags
- MUST be an even number of arguments representing key/value pairs of tags.public DistributionSummary summary(java.lang.String name, java.lang.Iterable<Tag> tags)
name
- The base metric nametags
- Sequence of dimensions for breaking down the name.public DistributionSummary summary(java.lang.String name, java.lang.String... tags)
name
- The base metric nametags
- MUST be an even number of arguments representing key/value pairs of tags.public Timer timer(java.lang.String name, java.lang.Iterable<Tag> tags)
name
- The base metric nametags
- Sequence of dimensions for breaking down the name.public Timer timer(java.lang.String name, java.lang.String... tags)
name
- The base metric nametags
- MUST be an even number of arguments representing key/value pairs of tags.public MeterRegistry.More more()
@Nullable public <T> T gauge(java.lang.String name, java.lang.Iterable<Tag> tags, @Nullable T obj, java.util.function.ToDoubleFunction<T> valueFunction)
f
is applied. The registration will keep a weak reference to the object so it will
not prevent garbage collection. Applying f
on the object should be thread safe.
If multiple gauges are registered with the same id, then the values will be aggregated and the sum will be reported. For example, registering multiple gauges for active threads in a thread pool with the same id would produce a value that is the overall number of active threads. For other behaviors, manage it on the user side and avoid multiple registrations.
T
- The type of the state object from which the gauge value is extracted.name
- Name of the gauge being registered.tags
- Sequence of dimensions for breaking down the name.obj
- State object used to compute a value.valueFunction
- Function that produces an instantaneous gauge value from the state object.@Nullable public <T extends java.lang.Number> T gauge(java.lang.String name, java.lang.Iterable<Tag> tags, T number)
Number
.T
- The type of the number from which the gauge value is extracted.name
- Name of the gauge being registered.tags
- Sequence of dimensions for breaking down the name.number
- Thread-safe implementation of Number
used to access the value.@Nullable public <T extends java.lang.Number> T gauge(java.lang.String name, T number)
Number
.T
- The type of the state object from which the gauge value is extracted.name
- Name of the gauge being registered.number
- Thread-safe implementation of Number
used to access the value.@Nullable public <T> T gauge(java.lang.String name, T obj, java.util.function.ToDoubleFunction<T> valueFunction)
T
- The type of the state object from which the gauge value is extracted.name
- Name of the gauge being registered.obj
- State object used to compute a value.valueFunction
- Function that produces an instantaneous gauge value from the state object.@Nullable public <T extends java.util.Collection<?>> T gaugeCollectionSize(java.lang.String name, java.lang.Iterable<Tag> tags, T collection)
Collection
. The registration
will keep a weak reference to the collection so it will not prevent garbage collection.
The collection implementation used should be thread safe. Note that calling
Collection.size()
can be expensive for some collection implementations
and should be considered before registering.T
- The type of the state object from which the gauge value is extracted.name
- Name of the gauge being registered.tags
- Sequence of dimensions for breaking down the name.collection
- Thread-safe implementation of Collection
used to access the value.@Nullable public <T extends java.util.Map<?,?>> T gaugeMapSize(java.lang.String name, java.lang.Iterable<Tag> tags, T map)
Map
. The registration
will keep a weak reference to the collection so it will not prevent garbage collection.
The collection implementation used should be thread safe. Note that calling
Map.size()
can be expensive for some collection implementations
and should be considered before registering.T
- The type of the state object from which the gauge value is extracted.name
- Name of the gauge being registered.tags
- Sequence of dimensions for breaking down the name.map
- Thread-safe implementation of Map
used to access the value.