blob: a5e1865aee7679c3f18a4c77304f7db3704fda62 [file] [log] [blame]
= Métricas con MicroProfile `@Gauge` (Medida)
: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á la temperatura en celsios
para el día.
== Obtenga la temperatura para el día:
[source,bash]
----
$ curl -X GET http://localhost:8080/mp-metrics-gauge/weather/day/temperature
----
== Response:
30
== Usando `@Gauge`
Las métricas de MicroProfile tienen una función para medir. El valor y tipo
de la medida son iguales al valor y tipo del método anotado.
Para utilizar esta función, debe anotar los métodos de los recursos JAX-RS con
`@Gauge`.
[source,java]
----
@Path("/weather")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@ApplicationScoped
public class WeatherService {
@Path("/day/temperature")
@Gauge(name = "weather_day_temperature", absolute = true, unit = "celsius",
displayName = "Weather Day Temperature",
description = "This metric shows the day temperature.",
tags = {"weather=temperature"})
@GET
@Produces(MediaType.TEXT_PLAIN)
public Integer dayTemperature() {
return 30;
}
}
----
Hay algunas configuraciones, como parte de `@Gauge`, que necesita saber:
*String name*
Opcional. Establece el nombre de la métrica. Si no se proporciona
explícitamente, se utiliza el nombre del objeto anotado.
*boolean absolute*
Si es verdadero, usa el nombre dado como el nombre absoluto de la métrica. Si
es falso, antepone el nombre del paquete y el nombre de la clase antes del
nombre dado. El valor predeterminado es falso.
*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.
*String unit*
Unidad de la métrica. Mira la clase MetricUnits para una lista de unidades
predeterminadas.
== Datos de la Métrica
Verifique la medida haciendo una solicitud _GET_:
=== Formato Prometheus:
[source,bash]
----
$ curl -X GET http://localhost:8080/mp-metrics-gauge/metrics/application/weather_day_temperature
----
=== Respuesta Prometheus:
[source]
----
# TYPE application:weather_day_temperature_celsius gauge
application:weather_day_temperature_celsius{weather="temperature"} 30.0
----
=== Formato JSON:
For json format add the header _Accept=application/json_ to the request.
=== Respuesta JSON
[source,javascript]
----
{
"weather_day_temperature": 30
}
----
== Metadatos Métrica
Una métrica tendrá metadatos para que pueda conocer más información al
respecto, como `displayName`,`description`, `tags`, etc.
Verifique los metadatos de la métrica haciendo una solicitud HTTP _OPTIONS_:
=== Solicitud HTTP _OPTIONS_
[source,bash]
----
$ curl -X OPTIONS http://localhost:8080/mp-metrics-gauge/metrics/application/weather_day_temperature
----
=== Respuesta:
[source,javascript]
----
{
"weather_day_temperature": {
"unit": "celsius",
"displayName": "Weather Day Temperature",
"name": "weather_day_temperature",
"typeRaw": "GAUGE",
"description": "This metric shows the day temperature.",
"type": "gauge",
"value": {
"unit": "celsius",
"displayName": "Weather Day Temperature",
"name": "weather_day_temperature",
"tagsAsString": "weather=\"temperature\"",
"typeRaw": "GAUGE",
"description": "This metric shows the day temperature.",
"type": "gauge",
"reusable": false,
"tags": {
"weather": "temperature"
}
},
"reusable": false,
"tags": "weather=temperature"
}
}
----
También puede probarlo utilizando WeatherServiceTest.java disponible en el
proyecto.