blob: 08bbfd549423b9d50c3e7d8500e9993730883686 [file] [log] [blame]
= Métricas con MicroProfile `@Histogram`
:index-group: MicroProfile
:jbake-type: page
:jbake-status: published
Este es un ejemplo sobre cómo utilizar las métricas de MicroProfile en TomEE.
== Ejecute la aplicación:
[source,bash]
----
$ mvn clean install tomee:run
----
Dentro de la aplicación, hay un endpoint que te dará un histograma del clima de las más recientes temperaturas en la Ciudad de Nueva York.
== 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"
}
----
== Usando `@Histogram`
Las métricas de MicroProfile tienen una función que te permite crear un histograma datos.
Para utilizar esta función, injecta un objeto `MetricRegistry`, registra el Histograma, and agrega datos al histograma como se muestra a continuación.
[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;
}
----
Hay algunas configuraciones definidas en la anotación `@Histogram`:
*String name* Opcional. Establece el nombre de la métrica. Si no se proporciona
explícitamente, se utiliza el nombre del objeto anotado.
*String displayName* Opcional. Un nombre para mostrar legible para los metadatos.
*String description* Opcional. Una descripción de la métrica.
*String[] tags* Opcional. Matriz de cadenas en el formato = para suministrar
etiquetas especiales a una métrica.
*boolean reusable* Indica si una métrica con un nombre determinado se puede
registrar en más de un lugar. No se aplica a `@Histogram`.
=== GET /histogram/status:
[source,bash]
----
$ curl -X GET http://localhost:8080/mp-metrics-histogram/weather/histogram/status
----
=== Respuesta:
[source,bash]
----
Here are the most recent New York City temperatures.
----
=== Formato Prometheus:
[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
----
=== Formato JSON:
[source,bash]
----
$ curl -X GET http://localhost:8080/mp-metrics-histogram/metrics/application
----
=== Respuesta JSON:
[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"
}
}
----
== Metadatos de la Métrica:
Una métrica tendrá metadatos para que pueda conocer más información al
respecto, como `displayName`,`description`, `tags`, etc.
=== Solicitud HTTP _OPTIONS_:
[source,bash]
----
$ curl -X OPTIONS http://localhost:8080/mp-metrics-histogram/metrics/application
----
=== Respuesta:
[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"
}
}
----
=== Prueba la aplicación
[source,bash]
----
$ mvn test
----