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
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-custome clique em Shared Edition para acessar o Grafana.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.
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.

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:
custom.latency_count: número de requisições.custom.latency_sum: soma das latências.custom.latency_min: latência mínima.custom.latency_max: latência máxima.