Ir al contenido

Métricas de Prometheus

OpenClaw puede exponer métricas de diagnóstico a través del complemento oficial diagnostics-prometheus. Escucha diagnósticos de confianza más eventos de estabilidad de puerta de enlace emitidos por el núcleo y, a continuación, renderiza un endpoint de texto de Prometheus en:

GET /api/diagnostics/prometheus

El tipo de contenido es text/plain; version=0.0.4; charset=utf-8, el formato de exposición estándar de Prometheus.

Para traces, registros, push OTLP y atributos semánticos de GenAI de OpenTelemetry, consulte Exportación de OpenTelemetry.

  1. Instalar el complemento

    Ventana de terminal
    openclaw plugins install clawhub:@openclaw/diagnostics-prometheus
  2. Habilitar el complemento

    {
    plugins: {
    allow: ["diagnostics-prometheus"],
    entries: {
    "diagnostics-prometheus": { enabled: true },
    },
    },
    diagnostics: {
    enabled: true,
    },
    }
  3. Reiniciar el Gateway

    La ruta HTTP se registra al inicio del complemento, por lo que debe recargar después de habilitarlo.

  4. Extraer la ruta protegida

    Envíe la misma autenticación de puerta de enlace que utilizan sus clientes de operador:

    Ventana de terminal
    curl -H "Authorization: Bearer $OPENCLAW_GATEWAY_TOKEN" \
    http://127.0.0.1:18789/api/diagnostics/prometheus
  5. Conectar Prometheus

    prometheus.yml
    scrape_configs:
    - job_name: openclaw
    scrape_interval: 30s
    metrics_path: /api/diagnostics/prometheus
    authorization:
    credentials_file: /etc/prometheus/openclaw-gateway-token
    static_configs:
    - targets: ["openclaw-gateway:18789"]

MétricaTipoEtiquetas
openclaw_run_completed_totalcontadorchannel, model, outcome, provider, trigger
openclaw_run_duration_secondshistogramachannel, model, outcome, provider, trigger
openclaw_model_call_totalcontadorapi, error_category, model, outcome, provider, transport
openclaw_model_call_duration_secondshistogramaapi, error_category, model, outcome, provider, transport
openclaw_model_failover_totalcontadorfrom_model, from_provider, lane, reason, suspended, to_model, to_provider
openclaw_model_tokens_totalcontadoragent, channel, model, provider, token_type
openclaw_gen_ai_client_token_usagehistogramamodel, provider, token_type
openclaw_model_cost_usd_totalcontadoragent, channel, model, provider
openclaw_skill_used_totalcontadoractivation, agent, skill, source
openclaw_tool_execution_totalcontadorerror_category, outcome, params_kind, tool, tool_owner, tool_source
openclaw_tool_execution_duration_secondshistogramaerror_category, outcome, params_kind, tool, tool_owner, tool_source
openclaw_tool_execution_blocked_totalcontadordenied_reason, params_kind, tool, tool_owner, tool_source
openclaw_harness_run_totalcontadorchannel, error_category, harness, model, outcome, phase, plugin, provider
openclaw_harness_run_duration_secondshistogramchannel, error_category, harness, model, outcome, phase, plugin, provider
openclaw_webhook_received_totalcontadorchannel, webhook
openclaw_webhook_error_totalcounterchannel, webhook
openclaw_webhook_duration_secondshistogramchannel, webhook
openclaw_message_received_totalcounterchannel, source
openclaw_message_dispatch_started_totalcontadorchannel, source
openclaw_message_dispatch_completed_totalcontadorchannel, outcome, reason, source
openclaw_message_dispatch_duration_secondshistogramchannel, outcome, reason, source
openclaw_message_processed_totalcounterchannel, outcome, reason
openclaw_message_processed_duration_secondshistogramachannel, outcome, reason
openclaw_message_delivery_started_totalcounterchannel, delivery_kind
openclaw_message_delivery_totalcounterchannel, delivery_kind, error_category, outcome
openclaw_message_delivery_duration_secondshistogramachannel, delivery_kind, error_category, outcome
openclaw_talk_event_totalcontadorbrain, event_type, mode, provider, transport
openclaw_talk_event_duration_secondshistogrambrain, event_type, mode, provider, transport
openclaw_talk_audio_byteshistogrambrain, event_type, mode, provider, transport
openclaw_queue_lane_sizegaugelane
openclaw_queue_lane_wait_secondshistogramalane
openclaw_session_state_totalcounterreason, state
openclaw_session_queue_depthgaugestate
openclaw_session_turn_created_totalcontadoragent, channel, trigger
openclaw_session_stuck_totalcontadorreason, state
openclaw_session_stuck_age_secondshistogramreason, state
openclaw_session_recovery_totalcounteraction, active_work_kind, state, status
openclaw_session_recovery_age_secondshistogramaction, active_work_kind, state, status
openclaw_liveness_warning_totalcounterreason
openclaw_liveness_sessionsgaugestate
openclaw_liveness_event_loop_delay_p99_secondshistogramreason
openclaw_liveness_event_loop_delay_max_secondshistogramreason
openclaw_liveness_event_loop_utilization_ratiohistogramreason
openclaw_liveness_cpu_core_ratiohistogramreason
openclaw_payload_large_totalcontadoraction, channel, plugin, reason, surface
openclaw_payload_large_byteshistogramaction, channel, plugin, reason, surface
openclaw_memory_bytesindicadorkind
openclaw_memory_rss_byteshistogramninguno
openclaw_memory_pressure_totalcontadorlevel, reason
openclaw_telemetry_exporter_totalcontadorexporter, reason, signal, status
openclaw_prometheus_series_dropped_totalcontadorninguno
Etiquetas limitadas y de baja cardinalidad

Las etiquetas de Prometheus se mantienen limitadas y de baja cardinalidad. El exportador no emite identificadores de diagnóstico sin procesar, como runId, sessionKey, sessionId, callId, toolCallId, ID de mensaje, ID de chat o ID de solicitud del proveedor.

Los valores de las etiquetas se redactan y deben coincidir con la política de caracteres de baja cardinalidad de OpenClaw. Los valores que no cumplan con la política se reemplazan por unknown, other o none, dependiendo de la métrica. Las etiquetas que parezcan claves de sesión de agente con ámbito también se reemplazan por unknown.

Límite de series y contabilidad de desbordamiento

El exportador limita las series temporales retenidas en memoria a 2048 series combinando contadores, medidores e histogramas. Las nuevas series que superen ese límite se descartan y openclaw_prometheus_series_dropped_total se incrementa en uno cada vez.

Vigile este contador como una señal clara de que un atributo upstream está filtrando valores de alta cardinalidad. El exportador nunca levanta el límite automáticamente; si aumenta, solucione el origen en lugar de deshabilitar el límite.

Lo que nunca aparece en la salida de Prometheus
  • texto del prompt, texto de la respuesta, entradas de herramientas, salidas de herramientas, prompts del sistema
  • transcripciones de conversaciones, cargas de audio, ids de llamadas, ids de salas, tokens de traspaso, ids de turno e ids de sesión sin procesar
  • IDs de solicitud del proveedor sin procesar (solo hashes limitados, cuando corresponda, en los spans, nunca en métricas)
  • claves de sesión e IDs de sesión
  • nombres de host, rutas de archivo, valores secretos
# Tokens per minute, split by provider
sum by (provider) (rate(openclaw_model_tokens_total[1m]))
# Spend (USD) over the last hour, by model
sum by (model) (increase(openclaw_model_cost_usd_total[1h]))
# 95th percentile model run duration
histogram_quantile(
0.95,
sum by (le, provider, model)
(rate(openclaw_run_duration_seconds_bucket[5m]))
)
# Queue wait time SLO (95p under 2s)
histogram_quantile(
0.95,
sum by (le, lane) (rate(openclaw_queue_lane_wait_seconds_bucket[5m]))
) < 2
# Skill usage, split by bounded source
sum by (skill, source) (increase(openclaw_skill_used_total[24h]))
# Dropped Prometheus series (cardinality alarm)
increase(openclaw_prometheus_series_dropped_total[15m]) > 0

Elección entre exportación de Prometheus y OpenTelemetry

Sección titulada «Elección entre exportación de Prometheus y OpenTelemetry»

OpenClaw admite ambas superficies de forma independiente. Puede ejecutar una, ambas o ninguna.

  • Modelo Pull (extracción): Prometheus extrae /api/diagnostics/prometheus.
  • No se requiere un recopilador externo.
  • Autenticado a través de la autenticación normal del Gateway.
  • La superficie es solo métricas (sin rastros ni registros).
  • Mejor para pilas ya estandarizadas en Prometheus + Grafana.
Cuerpo de respuesta vacío
  • Comprueba diagnostics.enabled: true en la configuración.
  • Confirma que el complemento está habilitado y cargado con openclaw plugins list --enabled.
  • Genera algo de tráfico; los contadores e histogramas solo emiten líneas después de al menos un evento.
401 / no autorizado

El punto final requiere el ámbito de operador de Gateway (auth: "gateway" con gatewayRuntimeScopeSurface: "trusted-operator"). Usa el mismo token o contraseña que Prometheus usa para cualquier otra ruta de operador de Gateway. No hay ningún modo público no autenticado.

`openclaw_prometheus_series_dropped_total` está aumentando

Un nuevo atributo está superando el límite de 2048 series. Inspecciona las métricas recientes para encontrar una etiqueta de cardinalidad inesperadamente alta y corrígela en el origen. El exportador intencionalmente descarta nuevas series en lugar de reescribir etiquetas silenciosamente.

Prometheus muestra series obsoletas después de un reinicio

El complemento mantiene el estado solo en memoria. Después de un reinicio del Gateway, los contadores se restablecen a cero y los indicadores se reinician en su próximo valor reportado. Usa PromQL rate() y increase() para manejar los restablecimientos correctamente.