Todos os produtos
Search
Central de documentação

Application Real-Time Monitoring Service:Customize metrics with the OpenTelemetry Python SDK

Última atualização: Jun 27, 2026

O ARMS oferece métricas de monitoramento de aplicações comuns. Para criar e consultar métricas personalizadas no Grafana, use o OpenTelemetry Python SDK.

Pré-requisitos

  • Integre sua aplicação ao monitoramento de aplicações do ARMS. Para obter instruções, consulte Integração de aplicações.

  • A versão do probe Python do ARMS deve ser 2.8.0 ou superior.

Procedimento

Etapa 1: Adicionar métricas personalizadas ao código

Execute o comando a seguir para instale o OpenTelemetry Python SDK. Para mais informações, consulte a documentação oficial do OpenTelemetry.

pip install opentelemetry-api

O OpenTelemetry suporta quatro tipos de métricas. O ARMS é compatível com todas elas, mas processa histogramas de forma diferente.

  • Counter: contador que apenas incrementa.

  • Up-down counter: contador bidirecional que pode incrementar ou decrementar.

  • Gauge: medidor que registra um valor instantâneo.

  • Histogram: histograma que registra a distribuição de valores.

O exemplo a seguir simula um cenário de venda relâmpago e define duas métricas:

  • product_seckill_count: número de tentativas de venda relâmpago.

  • product_current_stock: estoque atual.

O meter é criado com o nome de escopo "product_seckill". Ele funciona como um grupo: todas as métricas definidas por meio deste meter pertencem a esse escopo, referenciado nas etapas posteriores de configuração.

from fastapi import FastAPI
from opentelemetry.metrics import get_meter, Observation

app = FastAPI()

# Simulate inventory
stock = {"count": 100}

# Get a meter. The scope name "product_seckill" is important for later configuration.
meter = get_meter("product_seckill", "1.0.0")

# Create a counter to record the number of flash sale attempts.
seckill_counter = meter.create_counter(
    name="product_seckill_count",
    unit="1",
    description="seckill product count",
)

# Create a gauge to represent the current stock level.
def stock_callback(options):
    # Record the current stock count.
    yield Observation(stock["count"])

observable_gauge = meter.create_observable_gauge(
    name="product_current_stock",
    callbacks=[stock_callback],
    unit="1",
    description="current stock of product",
)

@app.post("/seckill")
def seckill_product():
    if stock["count"] <= 0:
        seckill_counter.add(1, {"seckill_result": "failed"})
        return {"message": "Purchase failed. The item is sold out."}
    stock["count"] -= 1
    seckill_counter.add(1, {"seckill_result": "success"})
    return {"message": f"Purchase successful. Remaining stock: {stock['count']}"}

@app.post("/stock/{count}")
def set_stock(count: int):
    stock["count"] = count
    return {"message": f"Stock has been set to: {count}"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

Anexe o probe e inicie a aplicação:

aliyun-instrument python3 main.py

Etapa 2: Configurar a coleta de métricas no console

No console, modifique a configuração de coleta do probe e adicione o parâmetro product_seckill informado durante a criação do meter na etapa anterior.

Essa configuração entra em vigor apenas na versão 2.8.0 ou superior do probe e não exige reinicialização da aplicação. Após concluir a configuração, clique em Salve.

Se não for possível acessar o console do ARMS ou se a entrega da configuração dinâmica falhar, defina as configurações localmente usando as seguintes variáveis de ambiente:

export APSARA_APM_METRIC_CUSTOM_ENABLED=true
# Optional: Configure the allowlist for scopes. If not set, all scopes are collected by default.
export APSARA_APM_METRIC_CUSTOM_INCLUDE_SCOPE_LIST="my.scope,other.scope"

Etapa 3: Visualizar métricas e configurar alertas

  1. No console do ARMS, acesse a página Prometheus Monitoring > Instance List e selecione a região onde sua aplicação está conectada na barra de menus superior. Pesquise uma instância de armazenamento Prometheus cujo nome comece com metricstore-apm-metrics-custom e clique em Shared Edition para acessar o Grafana.

  2. Na página do Grafana, clique em Explore e selecione a instância de armazenamento Prometheus da etapa anterior como fonte de dados.

Caso a pasta do Grafana não contenha painéis, o sistema exibirá This folder doesn't have any dashboards yet. Clique em + Crie Dashboard para criar um novo painel ou use Gerencie dashboards para mover painéis existentes para essa pasta.

  1. Use PromQL para consultar suas métricas personalizadas, conforme ilustrado na figura a seguir. Também é possível personalizar a página de observabilidade no Grafana.

image.png

Após a configuração, as métricas personalizadas do OpenTelemetry são enviadas à instância de armazenamento Prometheus do ARMS. Em seguida, crie uma regra de alerta do Prometheus para elas.

Observações

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

  • Para métricas do tipo counter, o ARMS reporta o valor incremental de cada período de 15 segundos, e não o valor acumulado.

  • Como o modelo de métricas do ARMS não está totalmente alinhado ao modelo do OpenTelemetry, cada métrica de histograma é dividida nas seguintes métricas separadas:

    • {name}_count: número de amostras.

    • {name}_sum: soma de todos os valores amostrados.

    • {name}_min: menor valor entre todas as amostras (gerado apenas se houver dados mínimos disponíveis).

    • {name}_max: maior valor entre todas as amostras (gerado apenas se houver dados máximos disponíveis).

Por exemplo, a métrica custom.latency é dividida em:

  1. custom.latency_count: número de requisições.

  2. custom.latency_sum: soma das latências.

  3. custom.latency_min: latência mínima.

  4. custom.latency_max: latência máxima.