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 y la semana.

Obtenga el clima para la semana:

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

Response:

Hi, today is a sunny day!

Usando @Metered

Las métricas de MicroProfile tienen una función que se puede usar para medir solicitudes a un servicio.

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

@Path("/weather")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@ApplicationScoped
public class WeatherService {

    @Path("/day/status")
    @Timed(name = "dailyStatus",
             unit = MetricUnits.MINUTES,
             description = "Metrics to daily weather status method",
             absolute = true)
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String dayStatus() {
        return "Hi, today is a sunny day!";
    }
...
}

Hay algunas configuraciones, como parte de @Metered, 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 <key>=<value> 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 @Gauges (medidores).

String unit Unidad de la métrica. El valor predeterminado para @Metered es nanosegundos.

Datos de la Métrica

Verifique la métrica @Metered haciendo una solicitud GET:

Formato Prometheus:

$ curl -X GET http://localhost:8080/mp-metrics-metered/metrics/application/dailyStatus

Respuesta Prometheus:

# TYPE application:daily_status_seconds_count meter
application:daily_status_seconds_count 1.2E-7
# TYPE application:daily_status_rate_per_second meter
application:daily_status_rate_per_second 0.0
# TYPE application:daily_status_one_min_rate_per_second meter
application:daily_status_one_min_rate_per_second 1.3376002644204984E-19
# TYPE application:daily_status_five_min_rate_per_second meter
application:daily_status_five_min_rate_per_second 3.5942838529305413E-20
# TYPE application:daily_status_fifteen_min_rate_per_second meter
application:daily_status_fifteen_min_rate_per_second 3.4665766454142955E-21

Formato JSON:

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

Respuesta JSON

{
	"dailyStatus": {
		"count": 2,
		"fifteenMinRate": 5.77762774235716e-14,
		"fiveMinRate": 5.990473088217569e-13,
		"meanRate": 0,
		"oneMinRate": 2.229333774034164e-12,
		"unit": "minutes"
	}
}

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-metered/metrics/application/dailyStatus

Respuesta:

{
	"dailyStatus": {
		"description": "Metrics to daily weather status method",
		"displayName": "",
		"name": "dailyStatus",
		"reusable": false,
		"tags": "",
		"type": "meter",
		"typeRaw": "METERED",
		"unit": "minutes"
	}
}

Pruebe la aplicación:

$ mvn test