diagnostics-prometheus Plugin を通じて診断メトリクスを公開できます。信頼済み診断に加えて、内部でタグ付けされたディスパッチャー所有の診断イベント(キュー、メモリ、セッションリカバリ信号)をリッスンし、次の場所で Prometheus テキストエンドポイントをレンダリングします。
text/plain; version=0.0.4; charset=utf-8 で、標準の
Prometheus 公開形式です。
トレース、ログ、OTLP プッシュ、OpenTelemetry GenAI セマンティック属性については、OpenTelemetry エクスポートを参照してください。
クイックスタート
diagnostics.enabled のデフォルトは true です。厳しく制約された環境でのみ false に設定してください。false の場合でも、Plugin は HTTP ルートを登録しますが、診断イベントは exporter に流れないため、レスポンスは空になります。エクスポートされるメトリクス
| メトリクス | 種類 | ラベル |
|---|---|---|
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_model_usage_duration_seconds | histogram | 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 | なし |
openclaw_memory_pressure_total | counter | level, reason |
openclaw_telemetry_exporter_total | counter | exporter, reason, signal, status |
openclaw_prometheus_series_dropped_total | counter | なし |
openclaw_diagnostic_async_queue_dropped_total | counter | drop_class |
openclaw_diagnostic_async_queue_length | gauge | なし |
ラベルポリシー
境界があり低カーディナリティのラベル
境界があり低カーディナリティのラベル
Prometheus のラベルは境界があり、低カーディナリティに保たれます。exporter は
runId、sessionKey、sessionId、callId、toolCallId、メッセージ ID、チャット ID、プロバイダーリクエスト ID などの生の診断識別子を出力しません。ラベル値は秘匿化され、OpenClaw の低カーディナリティ文字ポリシーに一致する必要があります。ポリシーに失敗した値は、メトリクスに応じて unknown、other、または none に置き換えられます。スコープ付きエージェントセッションキーのように見えるラベルも unknown に置き換えられます。シリーズ上限とオーバーフロー計上
シリーズ上限とオーバーフロー計上
エクスポーターは、カウンター、ゲージ、ヒストグラムを合わせて、メモリ内に保持する時系列を 2048 シリーズに制限します。その上限を超える新しいシリーズは破棄され、そのたびに
openclaw_prometheus_series_dropped_total が 1 増加します。このカウンターは、上流の属性が高カーディナリティ値を漏らしていることを示す明確なシグナルとして監視してください。エクスポーターが上限を自動的に引き上げることはありません。増加する場合は、上限を無効にするのではなく発生元を修正してください。Prometheus 出力に決して現れないもの
Prometheus 出力に決して現れないもの
- プロンプト本文、応答本文、ツール入力、ツール出力、システムプロンプト
- Talk の文字起こし、音声ペイロード、通話 ID、ルーム ID、ハンドオフトークン、ターン ID、生のセッション ID
- 生のプロバイダーリクエスト ID(該当する場合はスパン上の境界付きハッシュのみ。メトリクス上には決して出ません)
- セッションキーとセッション ID
- ホスト名、ファイルパス、シークレット値
PromQL レシピ
Prometheus エクスポートと OpenTelemetry エクスポートの選択
OpenClaw は両方のサーフェスを独立してサポートします。どちらか一方、両方、またはどちらも使わない構成で実行できます。- diagnostics-prometheus
- diagnostics-otel
- プルモデル: Prometheus が
/api/diagnostics/prometheusをスクレイプします。 - 外部コレクターは不要です。
- 通常の Gateway 認証を通じて認証されます。
- サーフェスはメトリクスのみです(トレースやログはありません)。
- すでに Prometheus + Grafana で標準化されているスタックに最適です。
トラブルシューティング
レスポンスボディが空
レスポンスボディが空
- config で
diagnostics.enabledがfalseに設定されていないことを確認してください(デフォルトはtrueです)。 - Plugin が有効化され、
openclaw plugins list --enabledで読み込まれていることを確認してください。 - いくらかのトラフィックを生成してください。カウンターとヒストグラムは、少なくとも 1 件のイベントが発生した後にのみ行を出力します。
401 / 未認可
401 / 未認可
エンドポイントには Gateway オペレータースコープ(
gatewayRuntimeScopeSurface: "trusted-operator" を伴う auth: "gateway")が必要です。他の Gateway オペレータールートで Prometheus が使用するものと同じトークンまたはパスワードを使用してください。公開の未認証モードはありません。`openclaw_prometheus_series_dropped_total` が増加している
`openclaw_prometheus_series_dropped_total` が増加している
新しい属性が 2048 シリーズの上限を超えています。最近のメトリクスを調べて、想定外に高カーディナリティなラベルを見つけ、発生元で修正してください。エクスポーターは、ラベルを黙って書き換えるのではなく、意図的に新しいシリーズを破棄します。
再起動後に Prometheus が古いシリーズを表示する
再起動後に Prometheus が古いシリーズを表示する
Plugin はメモリ内にのみ状態を保持します。Gateway の再起動後、カウンターはゼロにリセットされ、ゲージは次に報告された値から再開します。リセットをきれいに扱うには、PromQL の
rate() と increase() を使用してください。関連
- 診断エクスポート — サポートバンドル用のローカル診断 zip
- ヘルスと準備状態 —
/healthzと/readyzプローブ - ログ記録 — ファイルベースのログ記録
- OpenTelemetry エクスポート — トレース、メトリクス、ログ向けの OTLP プッシュ