$ mvn clean install tomee:run
Métricas com MicroProfile @Counted
(Contado)
Este é um exemplo sobre como utilizar as métricas de MicroProfile no Tomee. O projeto inclui um perfil de Docker que se pode usar para criar uma imagem de Docker.
Executando a aplicação:
Como alternativa, compile e execute o aplicativo através do Docker (observe o uso do perfil docker): |
$ mvn -Pdocker docker:build
$ docker run -it --rm -p 8080:8080 --name=tomee-mp-metrics-counted tomee/mp-metrics-counted
Dentro do aplicativo, há um endpoint que fornecerá o estado do tempo para o dia e a semana.
Veja o clima da semana:
$ curl -X GET http://localhost:8080/mp-metrics-counted/weather/week/status
IMPORTANTE: Se você executar usando o Docker, porque o aplicativo está instalado como o aplicativo ROOT, remova o nome do aplicativo do URL:
$ curl -X GET http://localhost:8080/weather/week/status
Resposta:
Hi, today is a sunny day!
Usando @Counted
As métricas do MicroProfile têm uma função que pode ser usada para contar requisições para um serviço.
Para usar esta função, você deve anotar os métodos dos recursos JAX-RS com @Counted
.
@Path("/weather")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@ApplicationScoped
public class WeatherService {
@Path("/day/status")
@Counted(monotonic = true, name = "weather_day_status", absolute = true)
@GET
@Produces(MediaType.TEXT_PLAIN)
public String dayStatus() {
return "Hi, today is a sunny day!";
}
...
}
Existem algumas configurações, como parte do @Counted
, 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, coloque 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
(metros).
Dados Métricos
Verifique a métrica do contador, fazendo uma solicitação GET:
Formato Prometheus:
$ curl -X GET http://localhost:8080/mp-metrics-counted/metrics/application/weather_day_status
Resposta Prometheus:
# TYPE application:weather_day_status counter
application:weather_day_status 1.0
Formato JSON:
Para o formato json, adicione o cabeçalho Accept:application/json
à requisição HTTP.
$ curl -X GET -H "Accept: application/json" http://localhost:8080/mp-metrics-counted/metrics/application/weather_day_status
Resposta JSON:
{
"weather_day_status": {
"delegate": {},
"unit": "none",
"count": 1
}
}
Metadatos Métrica
Uma métrica terá metadados para que você possa saber mais sobre ela, como displayName
,descrição
, tags
etc.
Verifique os metadados da métrica fazendo uma requisição HTTP OPTIONS:
Requisição HTTP OPTIONS
$ curl -X OPTIONS http://localhost:8080/mp-metrics-counted/metrics/application/weather_day_status
Resposta:
{
"weather_day_status": {
"unit": "none",
"displayName": "Weather Day Status",
"name": "weather_day_status",
"typeRaw": "COUNTER",
"description": "This metric shows the weather status of the day.",
"type": "counter",
"value": {
"unit": "none",
"displayName": "Weather Day Status",
"name": "weather_day_status",
"tagsAsString": "",
"typeRaw": "COUNTER",
"description": "This metric shows the weather status of the day.",
"type": "counter",
"reusable": false,
"tags": {}
},
"reusable": false,
"tags": ""
}
}
Você também pode testá-lo usando WeatherServiceTest.java disponível no projeto.