Gateway
Métricas de Prometheus
OpenClaw puede exponer métricas de diagnóstico mediante el plugin oficial
diagnostics-prometheus. Este escucha diagnósticos de confianza, además de
eventos de diagnóstico etiquetados internamente y gestionados por el despachador
(señales de cola, memoria y recuperación de sesiones), y presenta un endpoint de
texto de Prometheus en:
GET /api/diagnostics/prometheusEl tipo de contenido es text/plain; version=0.0.4; charset=utf-8, el formato estándar
de exposición de Prometheus.
Para trazas, registros, envío mediante OTLP y atributos semánticos de IA generativa de OpenTelemetry, consulte Exportación de OpenTelemetry.
Inicio rápido
Instalar el plugin
openclaw plugins install clawhub:@openclaw/diagnostics-prometheusHabilitar el plugin
Configuración
{ plugins: { allow: ["diagnostics-prometheus"], entries: { "diagnostics-prometheus": { enabled: true }, }, }, diagnostics: { enabled: true, },}CLI
openclaw plugins enable diagnostics-prometheusReiniciar el Gateway
La ruta HTTP se registra al iniciar el plugin, por lo que debe recargarse después de habilitarlo.
Recopilar datos de la ruta protegida
Envíe la misma autenticación del Gateway que utilizan sus clientes de operador:
curl -H "Authorization: Bearer $OPENCLAW_GATEWAY_TOKEN" \ http://127.0.0.1:18789/api/diagnostics/prometheusConectar Prometheus
# prometheus.ymlscrape_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étricas exportadas
| Métrica | Tipo | Etiquetas |
|---|---|---|
openclaw_run_completed_total |
contador | channel, model, outcome, provider, trigger |
openclaw_run_duration_seconds |
histograma | channel, model, outcome, provider, trigger |
openclaw_model_call_total |
contador | api, error_category, model, observation_unit, outcome, provider, transport |
openclaw_model_call_duration_seconds |
histograma | api, error_category, model, observation_unit, outcome, provider, transport |
openclaw_model_failover_total |
contador | from_model, from_provider, lane, reason, suspended, to_model, to_provider |
openclaw_model_tokens_total |
contador | agent, channel, model, provider, token_type |
openclaw_gen_ai_client_token_usage |
histograma | model, provider, token_type |
openclaw_model_cost_usd_total |
contador | agent, channel, model, provider |
openclaw_model_usage_duration_seconds |
histograma | agent, channel, model, provider |
openclaw_skill_used_total |
contador | activation, agent, skill, source |
openclaw_tool_execution_total |
contador | error_category, outcome, params_kind, tool, tool_owner, tool_source |
openclaw_tool_execution_duration_seconds |
histograma | error_category, outcome, params_kind, tool, tool_owner, tool_source |
openclaw_tool_execution_blocked_total |
contador | denied_reason, params_kind, tool, tool_owner, tool_source |
openclaw_harness_run_total |
contador | channel, error_category, harness, model, outcome, phase, plugin, provider |
openclaw_harness_run_duration_seconds |
histograma | channel, error_category, harness, model, outcome, phase, plugin, provider |
openclaw_webhook_received_total |
contador | channel, webhook |
openclaw_webhook_error_total |
contador | channel, webhook |
openclaw_webhook_duration_seconds |
histograma | channel, webhook |
openclaw_message_received_total |
contador | channel, source |
openclaw_message_dispatch_started_total |
contador | channel, source |
openclaw_message_dispatch_completed_total |
contador | channel, outcome, reason, source |
openclaw_message_dispatch_duration_seconds |
histograma | channel, outcome, reason, source |
openclaw_message_processed_total |
contador | channel, outcome, reason |
openclaw_message_processed_duration_seconds |
histograma | channel, outcome, reason |
openclaw_message_delivery_started_total |
contador | channel, delivery_kind |
openclaw_message_delivery_total |
contador | channel, delivery_kind, error_category, outcome |
openclaw_message_delivery_duration_seconds |
histograma | channel, delivery_kind, error_category, outcome |
openclaw_talk_event_total |
contador | brain, event_type, mode, provider, transport |
openclaw_talk_event_duration_seconds |
histograma | brain, event_type, mode, provider, transport |
openclaw_talk_audio_bytes |
histograma | brain, event_type, mode, provider, transport |
openclaw_queue_lane_size |
medidor | lane |
openclaw_queue_lane_wait_seconds |
histograma | lane |
openclaw_session_state_total |
contador | reason, state |
openclaw_session_queue_depth |
medidor | state |
openclaw_session_turn_created_total |
contador | agent, channel, trigger |
openclaw_session_stuck_total |
contador | reason, state |
openclaw_session_stuck_age_seconds |
histograma | reason, state |
openclaw_session_recovery_total |
contador | action, active_work_kind, state, status |
openclaw_session_recovery_age_seconds |
histograma | action, active_work_kind, state, status |
openclaw_liveness_warning_total |
contador | reason |
openclaw_liveness_sessions |
medidor | state |
openclaw_liveness_event_loop_delay_p99_seconds |
histograma | reason |
openclaw_liveness_event_loop_delay_max_seconds |
histograma | reason |
openclaw_liveness_event_loop_utilization_ratio |
histograma | reason |
openclaw_liveness_cpu_core_ratio |
histograma | reason |
openclaw_payload_large_total |
contador | action, channel, plugin, reason, surface |
openclaw_payload_large_bytes |
histograma | action, channel, plugin, reason, surface |
openclaw_memory_bytes |
medidor | kind |
openclaw_memory_rss_bytes |
histograma | ninguna |
openclaw_memory_pressure_total |
contador | level, reason |
openclaw_telemetry_exporter_total |
contador | exporter, reason, signal, status |
openclaw_prometheus_series_dropped_total |
contador | ninguna |
openclaw_diagnostic_async_queue_dropped_total |
contador | drop_class |
openclaw_diagnostic_async_queue_length |
medidor | ninguna |
Para las métricas de llamadas a modelos, observation_unit="request" mide una solicitud observable
al proveedor. observation_unit="turn" mide un turno sintético de agente de Claude Code
o Codex CLI que puede contener varias solicitudes ocultas al proveedor.
Mantenga esas series separadas al comparar la latencia.
Política de etiquetas
Etiquetas acotadas y de baja cardinalidad
Las etiquetas de Prometheus se mantienen acotadas y con baja cardinalidad. El exportador no emite identificadores de diagnóstico sin procesar como runId, sessionKey, sessionId, callId, toolCallId, identificadores de mensajes, identificadores de chats ni identificadores de solicitudes al proveedor.
Los valores de las etiquetas se ocultan y deben cumplir la política de caracteres de baja cardinalidad de OpenClaw. Los valores que no cumplen la política se sustituyen por unknown, other o none, según la métrica. Las etiquetas que parecen claves de sesión de agente con ámbito también se sustituyen por unknown.
Límite de series y contabilización del desbordamiento
El exportador limita a 2048 las series temporales conservadas en memoria entre contadores, medidores e histogramas combinados. Las nuevas series que superan ese límite se descartan y openclaw_prometheus_series_dropped_total se incrementa en uno cada vez.
Supervise este contador como una señal inequívoca de que algún atributo anterior está filtrando valores de alta cardinalidad. El exportador nunca aumenta el límite automáticamente; si el contador aumenta, corrija el origen en lugar de desactivar el límite.
Qué no aparece nunca en la salida de Prometheus
- texto de solicitudes, texto de respuestas, entradas de herramientas, salidas de herramientas, solicitudes del sistema
- transcripciones de conversaciones, cargas útiles de audio, identificadores de llamadas, identificadores de salas, tokens de traspaso, identificadores de turnos e identificadores de sesión sin procesar
- identificadores de solicitudes al proveedor sin procesar (solo hashes acotados, cuando corresponda, en los tramos; nunca en las métricas)
- claves de sesión e identificadores de sesión
- nombres de host, rutas de archivos, valores secretos
Recetas de PromQL
# Tokens por minuto, desglosados por proveedorsum by (provider) (rate(openclaw_model_tokens_total[1m])) # Gasto (USD) durante la última hora, por modelosum by (model) (increase(openclaw_model_cost_usd_total[1h])) # Percentil 95 de la duración de ejecución del modelohistogram_quantile( 0.95, sum by (le, provider, model) (rate(openclaw_run_duration_seconds_bucket[5m]))) # SLO del tiempo de espera en cola (percentil 95 inferior a 2 s)histogram_quantile( 0.95, sum by (le, lane) (rate(openclaw_queue_lane_wait_seconds_bucket[5m]))) < 2 # Uso de Skills, desglosado por origen acotadosum by (skill, source) (increase(openclaw_skill_used_total[24h])) # Series de Prometheus descartadas (alarma de cardinalidad)increase(openclaw_prometheus_series_dropped_total[15m]) > 0Elección entre la exportación de Prometheus y OpenTelemetry
OpenClaw admite ambas superficies de forma independiente. Es posible ejecutar una, ambas o ninguna.
diagnostics-prometheus
- Modelo pull: Prometheus extrae datos de
/api/diagnostics/prometheus. - No se requiere ningún recopilador externo.
- La autenticación se realiza mediante la autenticación normal del Gateway.
- La superficie solo incluye métricas (sin trazas ni registros).
- Es la mejor opción para pilas ya estandarizadas en Prometheus + Grafana.
diagnostics-otel
- Modelo push: OpenClaw envía OTLP/HTTP a un recopilador o backend compatible con OTLP.
- La superficie incluye métricas, trazas y registros.
- Se conecta con Prometheus mediante un recopilador de OpenTelemetry (exportador
prometheusoprometheusremotewrite) cuando se necesitan ambos. - Consulte Exportación de OpenTelemetry para ver el catálogo completo.
Solución de problemas
Cuerpo de respuesta vacío
- Compruebe que
diagnostics.enabledno esté establecido enfalseen la configuración (el valor predeterminado estrue). - Confirme que el plugin esté habilitado y cargado mediante
openclaw plugins list --enabled. - Genere algo de tráfico; los contadores e histogramas solo emiten líneas después de al menos un evento.
401 / no autorizado
El endpoint requiere el ámbito de operador del Gateway (auth: "gateway" con gatewayRuntimeScopeSurface: "trusted-operator"). Utilice el mismo token o contraseña que usa Prometheus para cualquier otra ruta de operador del Gateway. No existe ningún modo público sin autenticación.
`openclaw_prometheus_series_dropped_total` está aumentando
Un atributo nuevo está superando el límite de 2048 series. Inspeccione las métricas recientes para detectar una etiqueta de cardinalidad inesperadamente alta y corríjala en el origen. El exportador descarta intencionadamente las nuevas series en lugar de reescribir las etiquetas silenciosamente.
Prometheus muestra series obsoletas después de un reinicio
El plugin solo mantiene el estado en memoria. Tras reiniciar el Gateway, los contadores vuelven a cero y los medidores se reinician con su siguiente valor notificado. Utilice rate() y increase() de PromQL para gestionar correctamente los reinicios.
Contenido relacionado
- Exportación de diagnósticos — archivo zip de diagnósticos locales para paquetes de soporte
- Estado y disponibilidad — sondas
/healthzy/readyz - Registro — registro basado en archivos
- Exportación de OpenTelemetry — envío mediante OTLP de trazas, métricas y registros