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á el estado del clima para el día.

Obtenga el clima para la día:

$ curl -X GET http://localhost:8080/mp-metrics-timed/weather/day/status

Respuesta:

Hi, today is a sunny day!

Usando @Timed

Las métricas de MicroProfile tienen una función que se puede usar para tracker el tiempo de un evento.

Para utilizar esta función, debe anotar los métodos de los recursos JAX-RS con @Timed.

@Path("/weather")
@ApplicationScoped
public class WeatherService {

    @Path("/day/status")
    @Timed(name = "weather_day_status", absolute = true,
            displayName = "Weather Day Status",
            description = "This metric shows the weather status of the day.")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String dayStatus() {
        return "Hi, today is a sunny day!";
    }
...
}

Hay algunas configuraciones, como parte de @Timed, 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. El valor por defecto para @Timed es nanosegundos.

Datos de la Métrica

Verifique la métrica del contador haciendo una solicitud GET:

Formato Prometheus:

$curl -X GET http://localhost:8080/mp-metrics-timed/metrics/application/weather_day_status

Respuesta Prometheus:

# TYPE application:weather_day_status_seconds summary timer
# TYPE application:weather_day_status_seconds_count timer
application:weather_day_status_seconds_count 1.0
# TYPE application:weather_day_status_rate_per_second timer
application:weather_day_status_rate_per_second 0.0
# TYPE application:weather_day_status_one_min_rate_per_second timer
application:weather_day_status_one_min_rate_per_second 0.0
# TYPE application:weather_day_status_five_min_rate_per_second timer
application:weather_day_status_five_min_rate_per_second 0.0
# TYPE application:weather_day_status_fifteen_min_rate_per_second timer
application:weather_day_status_fifteen_min_rate_per_second 0.0
# TYPE application:weather_day_status_min_seconds timer
application:weather_day_status_min_seconds 48352.0
# TYPE application:weather_day_status_max_seconds timer
application:weather_day_status_max_seconds 48352.0
# TYPE application:weather_day_status_mean_seconds timer
application:weather_day_status_mean_seconds 48352.0
# TYPE application:weather_day_status_stddev_seconds timer
application:weather_day_status_stddev_seconds 0.0
# TYPE application:weather_day_status_seconds timer
application:weather_day_status_seconds{quantile="0.5"} 48352.0
# TYPE application:weather_day_status_seconds timer
application:weather_day_status_seconds{quantile="0.75"} 48352.0
# TYPE application:weather_day_status_seconds timer
application:weather_day_status_seconds{quantile="0.95"} 48352.0
# TYPE application:weather_day_status_seconds timer
application:weather_day_status_seconds{quantile="0.98"} 48352.0
# TYPE application:weather_day_status_seconds timer
application:weather_day_status_seconds{quantile="0.99"} 48352.0
# TYPE application:weather_day_status_seconds timer
application:weather_day_status_seconds{quantile="0.999"} 48352.0

Formato JSON:

Para el formato json, agregue el encabezado Accept: application/json a la solicitud HTTP.

Respuesta JSON:

{
    "weather_day_status": {
        "count": 1,
        "fifteenMinRate": 0,
        "fiveMinRate": 0,
        "max": 48352,
        "mean": 48352,
        "meanRate": 0,
        "min": 48352,
        "oneMinRate": 0,
        "p50": 48352,
        "p75": 48352,
        "p95": 48352,
        "p98": 48352,
        "p99": 48352,
        "p999": 48352,
        "stddev": 0
    }
}

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-timed/metrics/application/weather_day_status

Respuesta:

{
    "weather_day_status": {
        "description": "This metric shows the weather status of the day.",
        "displayName": "Weather Day Status",
        "name": "weather_day_status",
        "reusable": false,
        "tags": "",
        "type": "timer",
        "typeRaw": "TIMER",
        "unit": "nanoseconds"
    }
}

También puede probarlo utilizando WeatherServiceTest.java disponible en el proyecto.