Preloader image

Este es un ejemplo sobre cómo utilizar las métricas de MicroProfile en TomEE.

Ejecute la aplicación:

$ 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:

$ 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.

@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:

$ curl -X GET http://localhost:8080/mp-metrics-gauge/metrics/application/weather_day_temperature

Respuesta Prometheus:

 # 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

 {
     "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

$ curl -X OPTIONS http://localhost:8080/mp-metrics-gauge/metrics/application/weather_day_temperature

Respuesta:

 {
     "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.