ARMS proporciona application monitoring metrics comunes. Si requiere métricas personalizadas, utilice el SDK de Python de OpenTelemetry para crearlas y consultarlas en Grafana.
Requisitos previos
Ha integrado su aplicación con el monitoreo de aplicaciones de ARMS. Para obtener instrucciones, consulte Application integration.
La versión del agente de Python de ARMS es 2.8.0 o posterior.
Procedimiento
Paso 1: Agregar métricas personalizadas a su código
Ejecute el siguiente comando para instalar el SDK de Python de OpenTelemetry. Para obtener más información, consulte la documentación oficial de OpenTelemetry.
pip install opentelemetry-api
OpenTelemetry admite cuatro tipos de métricas. ARMS es compatible con todas ellas, aunque procesa los histogramas de manera diferente.
Counter: Un contador que solo aumenta.
Up-down counter: Un contador bidireccional que puede aumentar o disminuir.
Gauge: Un medidor que registra un valor instantáneo.
Histogram: Un histograma que registra la distribución de valores.
El siguiente ejemplo simula un escenario de venta relámpago y define dos métricas:
product_seckill_count: El número de intentos de venta relámpago.
product_current_stock: El inventario actual.
El meter se crea con el nombre de ámbito "product_seckill". Este actúa como un grupo: todas las métricas definidas mediante este meter pertenecen a dicho ámbito, al cual hará referencia en pasos posteriores de la configuración.
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)
Vincule el agente e inicie la aplicación:
aliyun-instrument python3 main.py
Paso 2: Configurar la recopilación de métricas en la consola
En la consola, modifique probe collection configuration y agregue el parámetro product_seckill que ingresó al crear el medidor en el paso anterior.
Esta configuración surte efecto únicamente en la versión 2.8.0 o posterior del agente y no requiere reiniciar la aplicación. Una vez completada la configuración, haga clic en Save.
Si no puede acceder a la consola de ARMS o si la entrega de la configuración dinámica falla, configure los ajustes localmente mediante las siguientes variables de entorno:
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"
Paso 3: Consultar métricas y configurar alarmas
En la consola de ARMS, dentro de la página Prometheus Monitoring > Instance List, seleccione la región donde está conectada su aplicación desde la barra de menú superior. Busque una instancia de almacenamiento de Prometheus cuyo nombre comience con
metricstore-apm-metrics-customy luego haga clic en Shared Edition para ir a Grafana.En la página de Grafana, haga clic en Explore y seleccione la instancia de almacenamiento de Prometheus del paso anterior como origen de datos.
Si la carpeta de Grafana no contiene paneles, se mostrará el mensaje This folder doesn't have any dashboards yet. Haga clic en + Create Dashboard para crear uno nuevo, o bien utilice Manage dashboards para mover paneles existentes a dicha carpeta.
Puede utilizar PromQL para consultar sus métricas personalizadas, como se muestra en la siguiente figura. También puede customize the observability page en Grafana.

Tras completar la configuración, sus métricas personalizadas de OpenTelemetry se reportan a la instancia de almacenamiento de Prometheus de ARMS. Posteriormente, puede create a Prometheus alarm rule para dichas métricas.
Notas
ARMS reporta métricas en intervalos de 15 segundos.
Para las métricas de tipo contador, ARMS reporta el valor incremental durante cada periodo de reporte de 15 segundos, no el valor acumulado.
-
Dado que el modelo de métricas de ARMS no está completamente alineado con el modelo de OpenTelemetry, cada métrica de histograma se divide en las siguientes métricas independientes:
{name}_count: El número de muestras.{name}_sum: La suma de todos los valores muestreados.{name}_min: El valor mínimo entre todas las muestras (se genera solo si hay datos mínimos disponibles).{name}_max: El valor máximo entre todas las muestras (se genera solo si hay datos máximos disponibles).
Por ejemplo, la métrica custom.latency se divide en:
custom.latency_count: El número de solicitudes.custom.latency_sum: La suma de las latencias.custom.latency_min: La latencia mínima.custom.latency_max: La latencia máxima.