blob: 48bc662787cb0070d9e72ef87696eb9e94167cba [file] [log] [blame]
= Métricas com MicroProfile `@Metered`
:index-group: MicroProfile
:jbake-type: page
:jbake-status: published
Este é um exemplo sobre como utilizar as métricas do MicroProfile em TomEE.
== Executando a aplicação:
[source,bash]
----
$ 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:
[source,bash]
----
$ curl -X GET http://localhost:8080/mp-metrics-metered/weather/day/status
----
== Resposta:
[source,text]
----
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`.
[source,java]
----
@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:
[source,bash]
----
$ curl -X GET http://localhost:8080/mp-metrics-metered/metrics/application/dailyStatus
----
== Resposta Prometheus:
[source,text]
----
# 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
[source,javascript]
----
{
"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_
[source,bash]
----
$ curl -X OPTIONS http://localhost:8080/mp-metrics-metered/metrics/application/dailyStatus
----
== Resposta:
[source,javascript]
----
{
"dailyStatus": {
"description": "Metrics to daily weather status method",
"displayName": "",
"name": "dailyStatus",
"reusable": false,
"tags": "",
"type": "meter",
"typeRaw": "METERED",
"unit": "minutes"
}
}
----
== Teste o aplicativo:
[source,bash]
----
$ mvn test
----