blob: b76b54120bf6198ac3dd3ff3c03346fc19a2fe53 [file] [log] [blame]
= MicroProfile Metrics `@Histogram`
:index-group: MicroProfile
:jbake-type: page
:jbake-status: published
This is an example on how to use microprofile metrics in TomEE.
== Run the application:
[source,bash]
----
$ mvn clean install tomee:run
----
Within the application, there is an enpoint that will give you a weather
histogram of the most recent New York City temperatures.
== Request:
[source,bash]
----
$ curl -X GET http://localhost:8080/mp-metrics-histogram/weather/histogram
----
== Response:
[source,javascript]
----
{
"count":15,
"max":55,
"mean":44.4,
"min":27,
"p50":45.0,
"p75":46.0,
"p95":54.0,
"p98":54.0,
"p99":54.0,
"p999":54.0,
"stddev":7.0710678118654755,
"unit":"degrees F"
}
----
== Histogram Feature
Microprofile metrics has a feature create a histogram of data.
To use this feature, inject a `MetricRegistry`, register the Histogram, and add
data to the histogram as shown below.
[source,java]
----
@Inject
private MetricRegistry registry;
@Inject
@Metric(name = "temperatures", description = "A histogram metrics example.",
displayName = "Histogram of Recent New York Temperatures")
private Histogram histogram;
@Path("/histogram")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Histogram getTemperatures() {
Metadata metadata = new Metadata("temperatures", MetricType.HISTOGRAM, "degrees F");
metadata.setDescription("A histogram of recent New York temperatures.");
final int[] RECENT_NEW_YORK_TEMPS = { 46, 45, 50, 46, 45, 27, 30, 48, 55, 54, 45, 41, 45, 43, 46 };
histogram = registry.histogram(metadata);
for(int temp : RECENT_NEW_YORK_TEMPS) {
histogram.update(temp);
}
return histogram;
}
----
There are some Histogram configurations defined in the `@Metric` annotation:
*String name* Optional. The name of the metric. If not explicitly given the
name of the annotated object is used.
*String displayName* Optional. A human readable display name for metadata.
*String description* Optional. A description of the metric.
*String[] tags* Optional. An array of Strings in the = format to supply special
tags to a metric.
*boolean reusable* Denotes if a metric with a certain name can be registered in
more than one place. Does not apply to gauges or histograms.
=== For the histogram status:
[source,bash]
----
$ curl -X GET http://localhost:8080/mp-metrics-histogram/weather/histogram/status
----
=== Reponse:
[source,bash]
----
Here are the most recent New York City temperatures.
----
=== Expected Prometheus format:
[source,text]
----
# TYPE application:temperatures_degrees F summary histogram
# TYPE application:temperatures_degrees F_count histogram
application:temperatures_degrees F_count 15.0
# TYPE application:temperatures_min_degrees F histogram
application:temperatures_min_degrees F 27.0
# TYPE application:temperatures_max_degrees F histogram
application:temperatures_max_degrees F 55.0
# TYPE application:temperatures_mean_degrees F histogram
application:temperatures_mean_degrees F 44.4
# TYPE application:temperatures_stddev_degrees F histogram
application:temperatures_stddev_degrees F 7.0710678118654755
# TYPE application:temperatures_degrees F histogram
application:temperatures_degrees F{quantile="0.5"} 45.0
# TYPE application:temperatures_degrees F histogram
application:temperatures_degrees F{quantile="0.75"} 46.0
# TYPE application:temperatures_degrees F histogram
application:temperatures_degrees F{quantile="0.95"} 54.0
# TYPE application:temperatures_degrees F histogram
application:temperatures_degrees F{quantile="0.98"} 54.0
# TYPE application:temperatures_degrees F histogram
application:temperatures_degrees F{quantile="0.99"} 54.0
# TYPE application:temperatures_degrees F histogram
application:temperatures_degrees F{quantile="0.999"} 54.0
# TYPE application:org_superbiz_histogram_weather_service_temperatures summary histogram
# TYPE application:org_superbiz_histogram_weather_service_temperatures_count histogram
application:org_superbiz_histogram_weather_service_temperatures_count 0.0
# TYPE application:org_superbiz_histogram_weather_service_temperatures_min histogram
application:org_superbiz_histogram_weather_service_temperatures_min 0.0
# TYPE application:org_superbiz_histogram_weather_service_temperatures_max histogram
application:org_superbiz_histogram_weather_service_temperatures_max 0.0
# TYPE application:org_superbiz_histogram_weather_service_temperatures_mean histogram
application:org_superbiz_histogram_weather_service_temperatures_mean NaN
# TYPE application:org_superbiz_histogram_weather_service_temperatures_stddev histogram
application:org_superbiz_histogram_weather_service_temperatures_stddev 0.0
# TYPE application:org_superbiz_histogram_weather_service_temperatures histogram
application:org_superbiz_histogram_weather_service_temperatures{quantile="0.5"} 0.0
# TYPE application:org_superbiz_histogram_weather_service_temperatures histogram
application:org_superbiz_histogram_weather_service_temperatures{quantile="0.75"} 0.0
# TYPE application:org_superbiz_histogram_weather_service_temperatures histogram
application:org_superbiz_histogram_weather_service_temperatures{quantile="0.95"} 0.0
# TYPE application:org_superbiz_histogram_weather_service_temperatures histogram
application:org_superbiz_histogram_weather_service_temperatures{quantile="0.98"} 0.0
# TYPE application:org_superbiz_histogram_weather_service_temperatures histogram
application:org_superbiz_histogram_weather_service_temperatures{quantile="0.99"} 0.0
# TYPE application:org_superbiz_histogram_weather_service_temperatures histogram
application:org_superbiz_histogram_weather_service_temperatures{quantile="0.999"} 0.0
----
=== Request:
[source,bash]
----
$ curl -X GET http://localhost:8080/mp-metrics-histogram/metrics/application
----
=== Response:
[source,javascript]
----
{
"org.superbiz.histogram.WeatherService.temperatures": {
"count":0,
"max":0,
"min":0,
"p50":0.0,
"p75":0.0,
"p95":0.0,
"p98":0.0,
"p99":0.0,
"p999":0.0,
"stddev":0.0,
"unit":"none"
}
}
----
== Metric Metadata:
A metric will have a metadata to provide information about it such as
`displayName`, `description`, `tags`, etc.
=== Request:
[source,bash]
----
$ curl -X OPTIONS http://localhost:8080/mp-metrics-histogram/metrics/application
----
=== Response:
[source,javascript]
----
{
"org.superbiz.histogram.WeatherService.temperatures": {
"description": "A histogram metrics example.",
"displayName":"Histogram of Recent New York Temperatures",
"name":"org.superbiz.histogram.WeatherService.temperatures",
"reusable":false,
"tags":"",
"type":"histogram",
"typeRaw":"HISTOGRAM",
"unit":"none"
}
}
----
=== Test the application:
[source,bash]
----
$ mvn test
----