diagnostics-prometheus. Ele escuta diagnósticos confiáveis e eventos de estabilidade do Gateway emitidos pelo núcleo, depois renderiza um endpoint de texto do Prometheus em:
text/plain; version=0.0.4; charset=utf-8, o formato de exposição padrão do Prometheus.
Para traces, logs, envio por OTLP e atributos semânticos GenAI do OpenTelemetry, consulte Exportação do OpenTelemetry.
Início rápido
Reinicie o Gateway
A rota HTTP é registrada na inicialização do plugin, então recarregue após habilitá-lo.
diagnostics.enabled: true é obrigatório. Sem isso, o plugin ainda registra a rota HTTP, mas nenhum evento de diagnóstico flui para o exportador, então a resposta fica vazia.Métricas exportadas
| Métrica | Tipo | Rótulos |
|---|---|---|
openclaw_run_completed_total | counter | channel, model, outcome, provider, trigger |
openclaw_run_duration_seconds | histogram | channel, model, outcome, provider, trigger |
openclaw_model_call_total | counter | api, error_category, model, outcome, provider, transport |
openclaw_model_call_duration_seconds | histogram | api, error_category, model, outcome, provider, transport |
openclaw_model_failover_total | counter | from_model, from_provider, lane, reason, suspended, to_model, to_provider |
openclaw_model_tokens_total | counter | agent, channel, model, provider, token_type |
openclaw_gen_ai_client_token_usage | histogram | model, provider, token_type |
openclaw_model_cost_usd_total | counter | agent, channel, model, provider |
openclaw_skill_used_total | counter | activation, agent, skill, source |
openclaw_tool_execution_total | counter | error_category, outcome, params_kind, tool, tool_owner, tool_source |
openclaw_tool_execution_duration_seconds | histogram | error_category, outcome, params_kind, tool, tool_owner, tool_source |
openclaw_tool_execution_blocked_total | counter | denied_reason, params_kind, tool, tool_owner, tool_source |
openclaw_harness_run_total | counter | channel, error_category, harness, model, outcome, phase, plugin, provider |
openclaw_harness_run_duration_seconds | histogram | channel, error_category, harness, model, outcome, phase, plugin, provider |
openclaw_webhook_received_total | counter | channel, webhook |
openclaw_webhook_error_total | counter | channel, webhook |
openclaw_webhook_duration_seconds | histogram | channel, webhook |
openclaw_message_received_total | counter | channel, source |
openclaw_message_dispatch_started_total | counter | channel, source |
openclaw_message_dispatch_completed_total | counter | channel, outcome, reason, source |
openclaw_message_dispatch_duration_seconds | histogram | channel, outcome, reason, source |
openclaw_message_processed_total | counter | channel, outcome, reason |
openclaw_message_processed_duration_seconds | histogram | channel, outcome, reason |
openclaw_message_delivery_started_total | counter | channel, delivery_kind |
openclaw_message_delivery_total | counter | channel, delivery_kind, error_category, outcome |
openclaw_message_delivery_duration_seconds | histogram | channel, delivery_kind, error_category, outcome |
openclaw_talk_event_total | counter | brain, event_type, mode, provider, transport |
openclaw_talk_event_duration_seconds | histogram | brain, event_type, mode, provider, transport |
openclaw_talk_audio_bytes | histogram | brain, event_type, mode, provider, transport |
openclaw_queue_lane_size | gauge | lane |
openclaw_queue_lane_wait_seconds | histogram | lane |
openclaw_session_state_total | counter | reason, state |
openclaw_session_queue_depth | gauge | state |
openclaw_session_turn_created_total | counter | agent, channel, trigger |
openclaw_session_stuck_total | counter | reason, state |
openclaw_session_stuck_age_seconds | histogram | reason, state |
openclaw_session_recovery_total | counter | action, active_work_kind, state, status |
openclaw_session_recovery_age_seconds | histogram | action, active_work_kind, state, status |
openclaw_liveness_warning_total | counter | reason |
openclaw_liveness_sessions | gauge | state |
openclaw_liveness_event_loop_delay_p99_seconds | histogram | reason |
openclaw_liveness_event_loop_delay_max_seconds | histogram | reason |
openclaw_liveness_event_loop_utilization_ratio | histogram | reason |
openclaw_liveness_cpu_core_ratio | histogram | reason |
openclaw_payload_large_total | counter | action, channel, plugin, reason, surface |
openclaw_payload_large_bytes | histogram | action, channel, plugin, reason, surface |
openclaw_memory_bytes | gauge | kind |
openclaw_memory_rss_bytes | histogram | nenhum |
openclaw_memory_pressure_total | counter | level, reason |
openclaw_telemetry_exporter_total | counter | exporter, reason, signal, status |
openclaw_prometheus_series_dropped_total | counter | nenhum |
Política de rótulos
Rótulos delimitados e de baixa cardinalidade
Rótulos delimitados e de baixa cardinalidade
Os rótulos do Prometheus permanecem delimitados e com baixa cardinalidade. O exportador não emite identificadores brutos de diagnóstico, como
runId, sessionKey, sessionId, callId, toolCallId, IDs de mensagens, IDs de chats ou IDs de solicitação de provedores.Os valores dos rótulos são redigidos e devem corresponder à política de caracteres de baixa cardinalidade do OpenClaw. Valores que não passam na política são substituídos por unknown, other ou none, dependendo da métrica. Rótulos que parecem chaves de sessão de agente com escopo também são substituídos por unknown.Limite de séries e contabilização de excedente
Limite de séries e contabilização de excedente
O exportador limita as séries temporais mantidas na memória a 2048 séries no total entre contadores, medidores e histogramas. Novas séries além desse limite são descartadas, e
openclaw_prometheus_series_dropped_total é incrementado em um a cada vez.Monitore esse contador como um sinal forte de que um atributo upstream está vazando valores de alta cardinalidade. O exportador nunca aumenta o limite automaticamente; se ele subir, corrija a origem em vez de desabilitar o limite.O que nunca aparece na saída do Prometheus
O que nunca aparece na saída do Prometheus
- texto de prompt, texto de resposta, entradas de ferramentas, saídas de ferramentas, prompts de sistema
- transcrições de conversa, payloads de áudio, IDs de chamadas, IDs de sala, tokens de transferência, IDs de turno e IDs de sessão brutos
- IDs de solicitação brutos do provedor (apenas hashes limitados, quando aplicável, em spans — nunca em métricas)
- chaves de sessão e IDs de sessão
- nomes de host, caminhos de arquivos, valores secretos
Receitas de PromQL
Como escolher entre exportação Prometheus e OpenTelemetry
O OpenClaw oferece suporte às duas superfícies de forma independente. Você pode executar uma delas, as duas ou nenhuma.- diagnostics-prometheus
- diagnostics-otel
- Modelo pull: o Prometheus faz scrape de
/api/diagnostics/prometheus. - Nenhum coletor externo é necessário.
- Autenticado pela autenticação normal do Gateway.
- A superfície é apenas de métricas (sem traces nem logs).
- Melhor para stacks já padronizadas em Prometheus + Grafana.
Solução de problemas
Corpo de resposta vazio
Corpo de resposta vazio
- Verifique
diagnostics.enabled: truena configuração. - Confirme que o Plugin está habilitado e carregado com
openclaw plugins list --enabled. - Gere algum tráfego; contadores e histogramas só emitem linhas após pelo menos um evento.
401 / não autorizado
401 / não autorizado
O endpoint exige o escopo de operador do Gateway (
auth: "gateway" com gatewayRuntimeScopeSurface: "trusted-operator"). Use o mesmo token ou senha que o Prometheus usa para qualquer outra rota de operador do Gateway. Não há modo público não autenticado.`openclaw_prometheus_series_dropped_total` está subindo
`openclaw_prometheus_series_dropped_total` está subindo
Um novo atributo está excedendo o limite de 2048 séries. Inspecione as métricas recentes em busca de um rótulo com cardinalidade inesperadamente alta e corrija-o na origem. O exportador descarta intencionalmente novas séries em vez de reescrever rótulos silenciosamente.
O Prometheus mostra séries obsoletas após uma reinicialização
O Prometheus mostra séries obsoletas após uma reinicialização
O Plugin mantém estado apenas em memória. Após uma reinicialização do Gateway, os contadores voltam a zero e os gauges reiniciam no próximo valor relatado. Use
rate() e increase() do PromQL para lidar com resets de forma limpa.Relacionado
- Exportação de diagnósticos — zip de diagnósticos local para pacotes de suporte
- Integridade e prontidão — probes
/healthze/readyz - Logging — logging baseado em arquivo
- Exportação OpenTelemetry — push OTLP para traces, métricas e logs