Skip navigation links

Package org.eclipse.microprofile.metrics

MicroProfile Metrics

See: Description

Package org.eclipse.microprofile.metrics Description

MicroProfile Metrics

Rational

To ensure reliable operation of software it is necessary to monitor essential system parameters. There is already JMX as standard to expose metrics, but remote-JMX is not easy to deal with and especially does not fit well in a polyglot environment where other services are not running on the JVM. To enable monitoring in an easy fashion, the MicroProfile Metrics specification provides a standard to instrument an application with metrics and provides a simple REST endpoint for integration with monitoring services.

Adding Metrics

MicroProfile Metrics provides 5 different metric types that can be used to instrument an application. Developers can create an accompanying Metadata object to supply the metric's name, description, display name, tags, and units. Once the metric and the metadata are registered against the application MetricRegistry, the metrics will be available in the REST endpoints.

Metric Types

Counter is used to measure an increasing/decreasing value.

Example usage:

 
     Counter count = metricRegistry.counter(metadata);
     count.inc();
 
 
Gauge is used to provide the immediate measurement of a value.

Example usage:

 
     Gauge<Double> temperature = new Gauge<Double>() {
         public Double getValue() {
             return getTemperature();
         }
     };
     metricRegistry.register(metadata, temperature);
 
 
Meter is used to measure the frequency of an event.

Example usage:

 
     Meter meter = metricRegistry.meter(metadata);
     meter.mark();
 
 
Histogram is used to sample and compute the distribution of values

Example usage:

 
     Histogram histogram = metricRegistry.histogram(metadata);
     histogram.update(score);
 
 
Timer is used to measure the duration of an event as well as the frequency of occurrence.

Example usage:

 
     Timer timer = metricRegistry.timer(metadata);
     Timer.Context context = timer.time();
     
     ... // code that will be timed
     
     context.close();
 
 
Skip navigation links