diagnostics-prometheus-Plugin bereitstellen. Es lauscht auf vertrauenswürdige Diagnosen sowie vom Core ausgegebene Gateway-Stabilitätsereignisse und stellt dann einen Prometheus-Textendpunkt unter folgender Adresse bereit:
text/plain; version=0.0.4; charset=utf-8, das standardmäßige Prometheus-Expositionsformat.
Für Traces, Logs, OTLP-Push und semantische OpenTelemetry-GenAI-Attribute siehe OpenTelemetry-Export.
Schnellstart
Gateway neu starten
Die HTTP-Route wird beim Start des Plugins registriert; laden Sie daher nach der Aktivierung neu.
Geschützte Route scrapen
Senden Sie dieselbe Gateway-Authentifizierung, die Ihre Operator-Clients verwenden:
diagnostics.enabled: true ist erforderlich. Ohne diese Einstellung registriert das Plugin weiterhin die HTTP-Route, aber es fließen keine Diagnoseereignisse in den Exporter, sodass die Antwort leer ist.Exportierte Metriken
| Metrik | Typ | Labels |
|---|---|---|
openclaw_run_completed_total | Counter | channel, model, outcome, provider, trigger |
openclaw_run_duration_seconds | Histogramm | channel, model, outcome, provider, trigger |
openclaw_model_call_total | Counter | api, error_category, model, outcome, provider, transport |
openclaw_model_call_duration_seconds | Histogramm | 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 | Histogramm | 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 | Histogramm | 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 | Histogramm | 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 | Histogramm | 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 | Histogramm | channel, outcome, reason, source |
openclaw_message_processed_total | Counter | channel, outcome, reason |
openclaw_message_processed_duration_seconds | Histogramm | 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 | Histogramm | channel, delivery_kind, error_category, outcome |
openclaw_talk_event_total | Counter | brain, event_type, mode, provider, transport |
openclaw_talk_event_duration_seconds | Histogramm | brain, event_type, mode, provider, transport |
openclaw_talk_audio_bytes | Histogramm | brain, event_type, mode, provider, transport |
openclaw_queue_lane_size | Gauge | lane |
openclaw_queue_lane_wait_seconds | Histogramm | 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 | Histogramm | reason, state |
openclaw_session_recovery_total | Counter | action, active_work_kind, state, status |
openclaw_session_recovery_age_seconds | Histogramm | action, active_work_kind, state, status |
openclaw_liveness_warning_total | Counter | reason |
openclaw_liveness_sessions | Gauge | state |
openclaw_liveness_event_loop_delay_p99_seconds | Histogramm | reason |
openclaw_liveness_event_loop_delay_max_seconds | Histogramm | reason |
openclaw_liveness_event_loop_utilization_ratio | Histogramm | reason |
openclaw_liveness_cpu_core_ratio | Histogramm | reason |
openclaw_payload_large_total | Counter | action, channel, plugin, reason, surface |
openclaw_payload_large_bytes | Histogramm | action, channel, plugin, reason, surface |
openclaw_memory_bytes | Gauge | kind |
openclaw_memory_rss_bytes | Histogramm | keine |
openclaw_memory_pressure_total | Counter | level, reason |
openclaw_telemetry_exporter_total | Counter | exporter, reason, signal, status |
openclaw_prometheus_series_dropped_total | Counter | keine |
Label-Richtlinie
Bounded, low-cardinality labels
Bounded, low-cardinality labels
Prometheus-Labels bleiben begrenzt und haben eine niedrige Kardinalität. Der Exporter gibt keine rohen Diagnosekennungen wie
runId, sessionKey, sessionId, callId, toolCallId, Nachrichten-IDs, Chat-IDs oder Provider-Anfrage-IDs aus.Labelwerte werden redigiert und müssen der OpenClaw-Zeichenrichtlinie für niedrige Kardinalität entsprechen. Werte, die die Richtlinie nicht erfüllen, werden je nach Metrik durch unknown, other oder none ersetzt. Labels, die wie bereichsbezogene Agent-Sitzungsschlüssel aussehen, werden ebenfalls durch unknown ersetzt.Series cap and overflow accounting
Series cap and overflow accounting
Der Exporter begrenzt die im Arbeitsspeicher vorgehaltenen Zeitreihen auf insgesamt 2048 Reihen über Counter, Gauges und Histogramme hinweg. Neue Reihen oberhalb dieser Grenze werden verworfen, und
openclaw_prometheus_series_dropped_total wird jedes Mal um eins erhöht.Beobachten Sie diesen Counter als eindeutiges Signal dafür, dass ein vorgelagertes Attribut Werte mit hoher Kardinalität weitergibt. Der Exporter hebt die Grenze nie automatisch an; wenn sie erreicht wird, beheben Sie die Quelle, statt die Begrenzung zu deaktivieren.What never appears in Prometheus output
What never appears in Prometheus output
- Prompt-Text, Antworttext, Tool-Eingaben, Tool-Ausgaben, System-Prompts
- Talk-Transkripte, Audio-Payloads, Call-IDs, Raum-IDs, Handoff-Tokens, Turn-IDs und rohe Session-IDs
- rohe Provider-Request-IDs (nur begrenzte Hashes, sofern zutreffend, auf Spans — niemals auf Metriken)
- Session-Schlüssel und Session-IDs
- Hostnamen, Dateipfade, geheime Werte
PromQL-Rezepte
Auswahl zwischen Prometheus- und OpenTelemetry-Export
OpenClaw unterstützt beide Oberflächen unabhängig voneinander. Sie können eine davon, beide oder keine ausführen.- diagnostics-prometheus
- diagnostics-otel
- Pull-Modell: Prometheus ruft
/api/diagnostics/prometheusab. - Kein externer Collector erforderlich.
- Authentifiziert über die normale Gateway-Authentifizierung.
- Die Oberfläche umfasst nur Metriken (keine Traces oder Logs).
- Am besten für Stacks geeignet, die bereits auf Prometheus + Grafana standardisiert sind.
Fehlerbehebung
Empty response body
Empty response body
- Prüfen Sie
diagnostics.enabled: truein der Konfiguration. - Bestätigen Sie mit
openclaw plugins list --enabled, dass das Plugin aktiviert und geladen ist. - Erzeugen Sie etwas Traffic; Counter und Histogramme geben erst nach mindestens einem Ereignis Zeilen aus.
`openclaw_prometheus_series_dropped_total` is climbing
`openclaw_prometheus_series_dropped_total` is climbing
Ein neues Attribut überschreitet die Obergrenze von 2048 Serien. Prüfen Sie aktuelle Metriken auf ein Label mit unerwartet hoher Kardinalität und beheben Sie es an der Quelle. Der Exporter verwirft neue Serien absichtlich, statt Labels stillschweigend umzuschreiben.
Prometheus shows stale series after a restart
Prometheus shows stale series after a restart
Das Plugin hält den Zustand nur im Arbeitsspeicher. Nach einem Gateway-Neustart werden Counter auf null zurückgesetzt, und Gauges starten wieder mit ihrem nächsten gemeldeten Wert. Verwenden Sie PromQL
rate() und increase(), um Zurücksetzungen sauber zu behandeln.Verwandte Themen
- Diagnoseexport — lokale Diagnose-ZIP-Datei für Support-Bundles
- Health und Readiness —
/healthz- und/readyz-Probes - Logging — dateibasiertes Logging
- OpenTelemetry-Export — OTLP-Push für Traces, Metriken und Logs