Todos os produtos
Search
Central de documentação

Application Real-Time Monitoring Service:Personalizar métricas com o OpenTelemetry Java SDK

Última atualização: Aug 27, 2026

O ARMS inclui Application Monitoring metrics integradas. Para definir suas próprias métricas, use o OpenTelemetry Java SDK. Este tópico mostra como criar métricas personalizadas e consultá-las no Grafana.

Pré-requisitos

  • Conecte sua aplicação ao ARMS Application Monitoring. Para mais informações, consulte Application access.

  • A versão do agente do ARMS deve ser 4.5.0 ou superior.

Adicionar dependências

Adicione as seguintes dependências Maven para importar o OpenTelemetry Java SDK. Para mais detalhes, consulte a documentação oficial do OpenTelemetry.

<dependencies>
    <dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-api</artifactId>
    </dependency>
    <dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-sdk-trace</artifactId>
    </dependency>
    <dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-sdk</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>io.opentelemetry</groupId>
      <artifactId>opentelemetry-bom</artifactId>
      <version>1.23.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

Procedimento

O OpenTelemetry oferece suporte a quatro tipos principais de instrumentos de métrica:

  • Counter: Registra um valor que só aumenta ao longo do tempo. Use este instrumento para rastrear dados cumulativos, como o número total de requisições HTTP ou erros.

  • UpDownCounter: Registra um valor que pode aumentar ou diminuir. Use um UpDownCounter para rastrear valores não monotônicos, como a quantidade de conexões ativas ou tarefas em uma fila.

  • Histogram (Sem suporte): Registra a distribuição estatística de um conjunto de valores, como latência de requisição ou tamanho de resposta. Permite calcular quantis (por exemplo, P90 ou P95).

  • Gauge: Captura um valor instantâneo em um momento específico. Use um gauge para acompanhar valores que mudam arbitrariamente, como utilização de CPU ou uso de memória.

Etapa 1: Adicionar uma métrica personalizada

O código a seguir apresenta um exemplo simples de aplicação de venda relâmpago e define duas métricas:

  • product_seckill_count: Quantidade de tentativas de venda relâmpago.

  • product_current_stock: Estoque atual do product.

Ao obter a classe factory meter para definir métricas, transmita o parâmetro product_seckill. Esse parâmetro funciona como identificador de grupo. Todas as métricas definidas posteriormente com esse meter pertencem a esse grupo, utilizado nas configurações seguintes.

import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.metrics.LongCounter;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.metrics.ObservableLongGauge;

import javax.annotation.PreDestroy;
import java.util.concurrent.atomic.AtomicInteger;

class ProductService {

    // Static inventory counter.
    public final AtomicInteger stock = new AtomicInteger(0);

    private LongCounter seckillCounter;
    private ObservableLongGauge observableLongGauge;
    private final AttributeKey<String> seckillResult = AttributeKey.stringKey("seckill_result");

    public ProductService() {
        OpenTelemetry agentOpenTelemetry = GlobalOpenTelemetry.get();

        // Define the metric factory class. The 'product_seckill' name is important.
        Meter meter = agentOpenTelemetry.getMeter("product_seckill");
        // Define a counter to record the number of flash sale attempts.
        seckillCounter = meter.counterBuilder("product_seckill_count")
                .setUnit("1")
                .setDescription("seckill product count")
                .build();

        // Define a gauge to represent the current product inventory.
        observableLongGauge = meter.gaugeBuilder("product_current_stock").ofLongs().buildWithCallback((measurement -> {
            // Record the current product quantity.
            measurement.record(stock.get());
        }));

    }
    
    @PreDestroy
    public void clear() {
        observableLongGauge.close(); 
    }
    
    public void setKillProductCount(int count) {
        stock.set(count);
    }

    public String seckillProduct() {
        int currentStock = stock.get();
        if (currentStock <= 0) {
            seckillCounter.add(1, Attributes.of(seckillResult, "failed"));
            return "Flash sale failed. The product is sold out.";
        }
        // Try to decrement the stock.
        if (stock.decrementAndGet() >= 0) {
            seckillCounter.add(1, Attributes.of(seckillResult, "success"));
            return "Flash sale successful. Remaining stock: " + stock.get();
        } else {
            stock.incrementAndGet(); // Rollback.
            seckillCounter.add(1, Attributes.of(seckillResult, "failed"));
            return "Flash sale failed. The product is sold out.";
        }
    }
}

Etapa 2: Configure a coleta de métricas

No console, modifique a Custom Metric Collection Configuration adicionando o nome do grupo especificado durante a criação do Meter na etapa anterior.

Essa configuração aplica-se apenas às versões 4.5.0 ou superiores do agente e não exige reinicialização da aplicação. Ao concluir, clique em Salve.

Etapa 3: Visualize métricas e configure alertas

  1. No console do ARMS, acesse a página Managed Service for Prometheus > Instances. Na barra de menu superior, selecione a região onde sua aplicação está implantada. Pesquise a instância de armazenamento do Prometheus cujo nome começa com metricstore-apm-metrics-custom e clique em Shared Edition para abrir o Grafana.

  2. Na página do Grafana, clique em Explore. Na lista suspensa de source de dados, selecione a instância de armazenamento do Prometheus identificada na etapa anterior.

    Na página de pastas do Grafana, caso a pasta esteja vazia, a mensagem This folder doesn't have any dashboards yet será exibida. Clique em + Crie Dashboard para adicionar um novo painel ou em Gerencie dashboards para mover um painel existente para essa pasta.

  3. Use PromQL para consultar as métricas personalizadas definidas no seu código, conforme ilustrado na figura a seguir. Também é possível criar um custom observability dashboard no Grafana.

    image

O ARMS reporta e armazena as métricas personalizadas definidas com o OpenTelemetry SDK na sua instância de armazenamento do Prometheus. Em seguida, crie alert rules para essas métricas.

Observações de uso

  • O ARMS reporta métricas em intervalos de 15 segundos.

  • Para métricas do tipo counter, o ARMS reporta o valor incremental dentro de cada intervalo, e não o total acumulado.