| = 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 |
| ---- |