Preloader image

Este é um exemplo sobre como utilizar as métricas do MicroProfile em TomEE.

Executando a aplicação:

$ mvn clean install tomee:run

Dentro da aplicação, há um endpoint que vai fornecer o estado do clima para o dia e a semana.

Obtendo o clima para semana:

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

Resposta:

Hi, today is a sunny day!

Usando @Metered

As métricas do MicroProfile tem uma função que se pode usar para medir solicitações para um serviço.

Para utilizar esta função, você deve anotar os métodos dos recursos JAX-RS com @Metered.

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

    @Path("/day/status")
    @Metered(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!";
    }
}

Existem algumas configurações, como parte do @Metered, que você precisa saber:

String name Opcional. Define o nome da métrica. Se não for fornecido explicitamente, o nome do objeto anotado é usado.

boolean absolute Se verdadeiro, use o nome fornecido como o nome absoluto da métrica. Se falso, ele prefixa o nome do pacote e o nome da classe antes do nome fornecido. O valor padrão é falso.

String displayName Opcional. Um nome de exibição legível para metadados.

String description Opcional. Uma descrição da métrica.

String[] tags Opcional. Matriz de cadeia no formato = para fornecer etiquetas especiais para uma métrica.

boolean reusable Indica se uma métrica com um determinado nome pode ser registrado em mais de um local. Não se aplica a gauges.

String unit Unidade da métrica. O valor padrão para @Metered é nanossegundos.

Dados Métricos

Verifique a métrica @Metered fazendo uma solicitação GET:

Formato Prometheus:

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

Resposta 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 o formato json, adicione o cabeçalho Accept: application/json ao diretório Solicitação HTTP.

Resposta JSON

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

Metadatos Métrica

Uma métrica terá metadados para que você possa aprender mais sobre ela, como displayName,description, tags, etc.

Verifique os metadados da métrica fazendo uma solicitação HTTP OPTIONS:

Solicitação HTTP OPTIONS

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

Resposta:

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

Teste o aplicativo:

$ mvn test