Gateway
Метрики Prometheus
OpenClaw може надавати діагностичні метрики через офіційний
Plugin diagnostics-prometheus. Він прослуховує довірену діагностику, а також
внутрішньо позначені діагностичні події, якими керує диспетчер (сигнали черги, пам’яті та
відновлення сеансів), і надає текстову кінцеву точку Prometheus за адресою:
GET /api/diagnostics/prometheusТип вмісту — text/plain; version=0.0.4; charset=utf-8, стандартний
формат представлення Prometheus.
Відомості про трасування, журнали, надсилання через OTLP та семантичні атрибути OpenTelemetry GenAI див. у розділі Експорт OpenTelemetry.
Швидкий початок
Установіть Plugin
openclaw plugins install clawhub:@openclaw/diagnostics-prometheusУвімкніть Plugin
Конфігурація
{ plugins: { allow: ["diagnostics-prometheus"], entries: { "diagnostics-prometheus": { enabled: true }, }, }, diagnostics: { enabled: true, },}CLI
openclaw plugins enable diagnostics-prometheusПерезапустіть Gateway
HTTP-маршрут реєструється під час запуску Plugin, тому після ввімкнення перезавантажте Gateway.
Збирайте метрики із захищеного маршруту
Надсилайте ті самі дані автентифікації Gateway, які використовують ваші клієнти оператора:
curl -H "Authorization: Bearer $OPENCLAW_GATEWAY_TOKEN" \ http://127.0.0.1:18789/api/diagnostics/prometheusПідключіть 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"]Експортовані метрики
| Метрика | Тип | Мітки |
|---|---|---|
openclaw_run_completed_total |
лічильник | channel, model, outcome, provider, trigger |
openclaw_run_duration_seconds |
гістограма | channel, model, outcome, provider, trigger |
openclaw_model_call_total |
лічильник | api, error_category, model, outcome, provider, transport |
openclaw_model_call_duration_seconds |
гістограма | api, error_category, model, outcome, provider, transport |
openclaw_model_failover_total |
лічильник | from_model, from_provider, lane, reason, suspended, to_model, to_provider |
openclaw_model_tokens_total |
лічильник | agent, channel, model, provider, token_type |
openclaw_gen_ai_client_token_usage |
гістограма | model, provider, token_type |
openclaw_model_cost_usd_total |
лічильник | agent, channel, model, provider |
openclaw_model_usage_duration_seconds |
гістограма | agent, channel, model, provider |
openclaw_skill_used_total |
лічильник | activation, agent, skill, source |
openclaw_tool_execution_total |
лічильник | error_category, outcome, params_kind, tool, tool_owner, tool_source |
openclaw_tool_execution_duration_seconds |
гістограма | error_category, outcome, params_kind, tool, tool_owner, tool_source |
openclaw_tool_execution_blocked_total |
лічильник | denied_reason, params_kind, tool, tool_owner, tool_source |
openclaw_harness_run_total |
лічильник | channel, error_category, harness, model, outcome, phase, plugin, provider |
openclaw_harness_run_duration_seconds |
гістограма | channel, error_category, harness, model, outcome, phase, plugin, provider |
openclaw_webhook_received_total |
лічильник | channel, webhook |
openclaw_webhook_error_total |
лічильник | channel, webhook |
openclaw_webhook_duration_seconds |
гістограма | channel, webhook |
openclaw_message_received_total |
лічильник | channel, source |
openclaw_message_dispatch_started_total |
лічильник | channel, source |
openclaw_message_dispatch_completed_total |
лічильник | channel, outcome, reason, source |
openclaw_message_dispatch_duration_seconds |
гістограма | channel, outcome, reason, source |
openclaw_message_processed_total |
лічильник | channel, outcome, reason |
openclaw_message_processed_duration_seconds |
гістограма | channel, outcome, reason |
openclaw_message_delivery_started_total |
лічильник | channel, delivery_kind |
openclaw_message_delivery_total |
лічильник | channel, delivery_kind, error_category, outcome |
openclaw_message_delivery_duration_seconds |
гістограма | channel, delivery_kind, error_category, outcome |
openclaw_talk_event_total |
лічильник | brain, event_type, mode, provider, transport |
openclaw_talk_event_duration_seconds |
гістограма | brain, event_type, mode, provider, transport |
openclaw_talk_audio_bytes |
гістограма | brain, event_type, mode, provider, transport |
openclaw_queue_lane_size |
індикатор | lane |
openclaw_queue_lane_wait_seconds |
гістограма | lane |
openclaw_session_state_total |
лічильник | reason, state |
openclaw_session_queue_depth |
індикатор | state |
openclaw_session_turn_created_total |
лічильник | agent, channel, trigger |
openclaw_session_stuck_total |
лічильник | reason, state |
openclaw_session_stuck_age_seconds |
гістограма | reason, state |
openclaw_session_recovery_total |
лічильник | action, active_work_kind, state, status |
openclaw_session_recovery_age_seconds |
гістограма | action, active_work_kind, state, status |
openclaw_liveness_warning_total |
лічильник | reason |
openclaw_liveness_sessions |
індикатор | state |
openclaw_liveness_event_loop_delay_p99_seconds |
гістограма | reason |
openclaw_liveness_event_loop_delay_max_seconds |
гістограма | reason |
openclaw_liveness_event_loop_utilization_ratio |
гістограма | reason |
openclaw_liveness_cpu_core_ratio |
гістограма | reason |
openclaw_payload_large_total |
лічильник | action, channel, plugin, reason, surface |
openclaw_payload_large_bytes |
гістограма | action, channel, plugin, reason, surface |
openclaw_memory_bytes |
індикатор | kind |
openclaw_memory_rss_bytes |
гістограма | немає |
openclaw_memory_pressure_total |
лічильник | level, reason |
openclaw_telemetry_exporter_total |
лічильник | exporter, reason, signal, status |
openclaw_prometheus_series_dropped_total |
лічильник | немає |
openclaw_diagnostic_async_queue_dropped_total |
лічильник | drop_class |
openclaw_diagnostic_async_queue_length |
індикатор | немає |
Політика міток
Обмежені мітки з низькою кардинальністю
Мітки Prometheus залишаються обмеженими та мають низьку кардинальність. Експортер не виводить необроблені діагностичні ідентифікатори, як-от runId, sessionKey, sessionId, callId, toolCallId, ідентифікатори повідомлень, чатів або запитів до постачальника.
Значення міток редагуються та мають відповідати політиці OpenClaw щодо символів із низькою кардинальністю. Значення, які не відповідають політиці, замінюються на unknown, other або none залежно від метрики. Мітки, схожі на ключі сеансів агентів з областю видимості, також замінюються на unknown.
Обмеження кількості часових рядів і облік перевищення
Експортер обмежує кількість часових рядів, що зберігаються в пам’яті, до 2048 для лічильників, індикаторів і гістограм разом. Нові ряди понад це обмеження відкидаються, а openclaw_prometheus_series_dropped_total щоразу збільшується на одиницю.
Відстежуйте цей лічильник як однозначний сигнал того, що атрибут вище за потоком пропускає значення з високою кардинальністю. Експортер ніколи не підвищує обмеження автоматично; якщо значення лічильника зростає, виправте джерело, а не вимикайте обмеження.
Що ніколи не потрапляє до виводу Prometheus
- текст запиту, текст відповіді, вхідні дані інструментів, вихідні дані інструментів, системні запити
- транскрипти Talk, аудіодані, ідентифікатори викликів, ідентифікатори кімнат, токени передавання, ідентифікатори ходів і необроблені ідентифікатори сеансів
- необроблені ідентифікатори запитів постачальника (лише обмежені хеші, де це застосовно, у span — ніколи в метриках)
- ключі та ідентифікатори сеансів
- імена хостів, шляхи до файлів, значення секретів
Рецепти PromQL
# Кількість токенів за хвилину, розподілена за постачальникамиsum by (provider) (rate(openclaw_model_tokens_total[1m])) # Витрати (USD) за останню годину, за моделямиsum by (model) (increase(openclaw_model_cost_usd_total[1h])) # 95-й процентиль тривалості виконання моделіhistogram_quantile( 0.95, sum by (le, provider, model) (rate(openclaw_run_duration_seconds_bucket[5m]))) # SLO часу очікування в черзі (95-й процентиль менше ніж 2 с)histogram_quantile( 0.95, sum by (le, lane) (rate(openclaw_queue_lane_wait_seconds_bucket[5m]))) < 2 # Використання Skills, розподілене за обмеженим джереломsum by (skill, source) (increase(openclaw_skill_used_total[24h])) # Відкинуті ряди Prometheus (сигнал тривоги щодо кардинальності)increase(openclaw_prometheus_series_dropped_total[15m]) > 0Вибір між експортом Prometheus і OpenTelemetry
OpenClaw підтримує обидва інтерфейси незалежно. Можна використовувати будь-який із них, обидва або жодного.
diagnostics-prometheus
- Модель отримання: Prometheus опитує
/api/diagnostics/prometheus. - Зовнішній збирач не потрібен.
- Автентифікація виконується через звичайний механізм автентифікації Gateway.
- Інтерфейс містить лише метрики (без трасувань і журналів).
- Найкраще підходить для стеків, уже стандартизованих на Prometheus + Grafana.
diagnostics-otel
- Модель надсилання: OpenClaw надсилає OTLP/HTTP до збирача або сумісної з OTLP серверної системи.
- Інтерфейс містить метрики, трасування та журнали.
- Забезпечує інтеграцію з Prometheus через OpenTelemetry Collector (експортер
prometheusабоprometheusremotewrite), коли потрібні обидва інтерфейси. - Повний каталог див. у розділі Експорт OpenTelemetry.
Усунення несправностей
Порожнє тіло відповіді
- Переконайтеся, що для
diagnostics.enabledу конфігурації не встановлено значенняfalse(типове значення —true). - Переконайтеся, що Plugin увімкнено та завантажено, за допомогою
openclaw plugins list --enabled. - Створіть певний трафік; лічильники та гістограми виводять рядки лише після принаймні однієї події.
401 / немає авторизації
Кінцева точка потребує області дії оператора Gateway (auth: "gateway" із gatewayRuntimeScopeSurface: "trusted-operator"). Використовуйте той самий токен або пароль, який Prometheus використовує для будь-якого іншого маршруту оператора Gateway. Загальнодоступного режиму без автентифікації немає.
Значення `openclaw_prometheus_series_dropped_total` зростає
Новий атрибут перевищує обмеження в 2048 рядів. Перевірте останні метрики на наявність мітки з неочікувано високою кардинальністю та виправте її в джерелі. Експортер навмисно відкидає нові ряди замість непомітного переписування міток.
Prometheus показує застарілі ряди після перезапуску
Plugin зберігає стан лише в пам’яті. Після перезапуску Gateway лічильники скидаються до нуля, а індикатори відновлюються з наступного переданого значення. Використовуйте функції PromQL rate() та increase(), щоб коректно обробляти скидання.
Пов’язані матеріали
- Експорт діагностики — локальний ZIP-архів діагностики для пакетів підтримки
- Стан і готовність — проби
/healthzі/readyz - Ведення журналів — ведення журналів у файлах
- Експорт OpenTelemetry — надсилання через OTLP трасувань, метрик і журналів