Перейти до основного вмісту
OpenClaw експортує діагностику через офіційний Plugin diagnostics-otel за допомогою OTLP/HTTP (protobuf). Журнали також можна записувати як stdout JSONL для контейнерних і sandbox-конвеєрів журналів. Будь-який collector або backend, що приймає OTLP/HTTP, працює без змін у коді. Про локальні файлові журнали та як їх читати див. Журналювання.

Як це працює разом

  • Діагностичні події — це структуровані внутрішньопроцесні записи, які створюють Gateway і вбудовані Plugin-и для запусків моделей, потоку повідомлень, сеансів, черг і exec.
  • Plugin diagnostics-otel підписується на ці події та експортує їх як OpenTelemetry метрики, трейси і журнали через OTLP/HTTP. Він також може дублювати діагностичні записи журналу в stdout JSONL.
  • Виклики провайдера отримують W3C-заголовок traceparent від довіреного контексту span виклику моделі OpenClaw, коли транспорт провайдера приймає власні заголовки. Контекст трасування, створений Plugin-ом, не поширюється.
  • Exporter-и підключаються лише тоді, коли ввімкнені і діагностична поверхня, і Plugin, тому внутрішньопроцесна вартість за замовчуванням залишається майже нульовою.

Швидкий старт

Для пакетних інсталяцій спочатку встановіть Plugin:
openclaw plugins install clawhub:@openclaw/diagnostics-otel
{
  plugins: {
    allow: ["diagnostics-otel"],
    entries: {
      "diagnostics-otel": { enabled: true },
    },
  },
  diagnostics: {
    enabled: true,
    otel: {
      enabled: true,
      endpoint: "http://otel-collector:4318",
      protocol: "http/protobuf",
      serviceName: "openclaw-gateway",
      traces: true,
      metrics: true,
      logs: true,
      sampleRate: 0.2,
      flushIntervalMs: 60000,
    },
  },
}
Ви також можете ввімкнути Plugin із CLI:
openclaw plugins enable diagnostics-otel
protocol наразі підтримує лише http/protobuf. grpc ігнорується.

Експортовані сигнали

СигналЩо до нього входить
МетрикиЛічильники та гістограми для використання токенів, вартості, тривалості запуску, failover, використання Skills, потоку повідомлень, подій Talk, смуг черг, стану/відновлення сеансу, виконання інструментів, завеликих payload-ів, exec і тиску на пам’ять.
ТрейсиSpan-и для використання моделей, викликів моделей, життєвого циклу harness, використання Skills, виконання інструментів, exec, обробки webhook/повідомлень, складання контексту та циклів інструментів.
ЖурналиСтруктуровані записи logging.file, експортовані через OTLP або stdout JSONL, коли ввімкнено diagnostics.otel.logs; тіла журналів не передаються, якщо захоплення вмісту явно не ввімкнено.
Перемикайте traces, metrics і logs незалежно. Трейси та метрики за замовчуванням увімкнені, коли diagnostics.otel.enabled має значення true. Журнали за замовчуванням вимкнені й експортуються лише тоді, коли diagnostics.otel.logs явно має значення true. Експорт журналів за замовчуванням іде в OTLP; встановіть diagnostics.otel.logsExporter у stdout для JSONL у stdout або both, щоб надсилати кожен діагностичний запис журналу в OTLP і stdout.

Довідник конфігурації

{
  diagnostics: {
    enabled: true,
    otel: {
      enabled: true,
      endpoint: "http://otel-collector:4318",
      tracesEndpoint: "http://otel-collector:4318/v1/traces",
      metricsEndpoint: "http://otel-collector:4318/v1/metrics",
      logsEndpoint: "http://otel-collector:4318/v1/logs",
      protocol: "http/protobuf", // grpc is ignored
      serviceName: "openclaw-gateway",
      headers: { "x-collector-token": "..." },
      traces: true,
      metrics: true,
      logs: true,
      logsExporter: "otlp", // otlp | stdout | both
      sampleRate: 0.2, // root-span sampler, 0.0..1.0
      flushIntervalMs: 60000, // metric export interval (min 1000ms)
      captureContent: {
        enabled: false,
        inputMessages: false,
        outputMessages: false,
        toolInputs: false,
        toolOutputs: false,
        systemPrompt: false,
        toolDefinitions: false,
      },
    },
  },
}

Змінні середовища

ЗміннаПризначення
OTEL_EXPORTER_OTLP_ENDPOINTПеревизначає diagnostics.otel.endpoint. Якщо значення вже містить /v1/traces, /v1/metrics або /v1/logs, воно використовується як є.
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT / OTEL_EXPORTER_OTLP_METRICS_ENDPOINT / OTEL_EXPORTER_OTLP_LOGS_ENDPOINTПеревизначення endpoint для конкретних сигналів, які використовуються, коли відповідний ключ конфігурації diagnostics.otel.*Endpoint не задано. Конфігурація для конкретного сигналу має пріоритет над env для конкретного сигналу, а та має пріоритет над спільним endpoint.
OTEL_SERVICE_NAMEПеревизначає diagnostics.otel.serviceName.
OTEL_EXPORTER_OTLP_PROTOCOLПеревизначає мережевий протокол (сьогодні враховується лише http/protobuf).
OTEL_SEMCONV_STABILITY_OPT_INУстановіть gen_ai_latest_experimental, щоб створювати найновішу експериментальну форму span GenAI inference, зокрема назви span {gen_ai.operation.name} {gen_ai.request.model}, тип span CLIENT і gen_ai.provider.name замість застарілого gen_ai.system. Метрики GenAI завжди використовують обмежені семантичні атрибути з низькою кардинальністю.
OPENCLAW_OTEL_PRELOADEDУстановіть 1, коли інший preload або host-процес уже зареєстрував глобальний OpenTelemetry SDK. Тоді Plugin пропускає власний життєвий цикл NodeSDK, але все одно підключає діагностичні listener-и та враховує traces/metrics/logs.

Приватність і захоплення вмісту

Сирий вміст моделі/інструментів не експортується за замовчуванням. Span-и містять обмежені ідентифікатори (канал, провайдер, модель, категорія помилки, ідентифікатори запитів лише як hash, джерело інструмента, власник інструмента та назва/джерело Skills) і ніколи не містять текст prompt, текст відповіді, inputs інструментів, outputs інструментів, шляхи до файлів Skills або ключі сеансів. Записи журналу OTLP за замовчуванням зберігають severity, logger, розташування коду, довірений контекст трасування і санітизовані атрибути, але сире тіло повідомлення журналу експортується лише коли diagnostics.otel.captureContent встановлено в boolean true. Деталізовані підключі captureContent.* не вмикають тіла журналів. Мітки, що виглядають як ключі scoped agent session, замінюються на unknown. Метрики Talk експортують лише обмежені метадані подій, як-от mode, transport, provider і event type. Вони не містять transcripts, audio payloads, session ids, turn ids, call ids, room ids або handoff tokens. Вихідні запити моделі можуть містити W3C-заголовок traceparent. Цей заголовок створюється лише з діагностичного контексту трасування, що належить OpenClaw, для активного виклику моделі. Наявні заголовки traceparent, надані викликачем, замінюються, тому Plugin-и або власні опції провайдера не можуть підробити походження трасування між сервісами. Установлюйте diagnostics.otel.captureContent.* у true лише тоді, коли ваш collector і політика зберігання схвалені для тексту prompt, відповіді, інструмента або system-prompt. Кожен підключ вмикається незалежно:
  • inputMessages - вміст prompt користувача.
  • outputMessages - вміст відповіді моделі.
  • toolInputs - payload-и аргументів інструмента.
  • toolOutputs - payload-и результатів інструмента.
  • systemPrompt - зібраний system/developer prompt.
  • toolDefinitions - назви, описи та схеми інструментів моделі.
Коли будь-який підключ увімкнено, span-и моделі та інструментів отримують обмежені, відредаговані атрибути openclaw.content.* лише для цього класу. Використовуйте boolean captureContent: true лише для широких діагностичних захоплень, де тіла повідомлень журналів OTLP також схвалені для експорту. Вміст toolInputs/toolOutputs захоплюється для виконань інструментів вбудованого агентного runtime (openclaw.content.tool_input на completed/error span-ах, openclaw.content.tool_output на completed span-ах). Виклики інструментів зовнішніх harness-ів (Codex, Claude CLI) створюють span-и tool.execution.* без content payloads. Захоплений вміст передається довіреним каналом лише для listener-ів і ніколи не потрапляє в публічну шину діагностичних подій.

Семплінг і скидання

  • Траси: diagnostics.otel.sampleRate (лише кореневий span, 0.0 відкидає всі, 1.0 зберігає всі).
  • Метрики: diagnostics.otel.flushIntervalMs (мінімум 1000).
  • Логи: логи OTLP враховують logging.level (рівень файлового журналу). Вони використовують шлях редагування діагностичних записів журналу, а не форматування консолі. Інсталяціям із великим обсягом даних варто надавати перевагу семплінгу/фільтруванню в колекторі OTLP замість локального семплінгу. Установіть diagnostics.otel.logsExporter: "stdout", коли ваша платформа вже надсилає stdout/stderr до обробника логів і у вас немає колектора логів OTLP. Записи stdout — це один об’єкт JSON на рядок із ts, signal, service.name, серйозністю, тілом, відредагованими атрибутами та довіреними полями траси, коли вони доступні.
  • Кореляція файлових логів: файлові логи JSONL містять поля верхнього рівня traceId, spanId, parentSpanId і traceFlags, коли виклик журналювання передає чинний діагностичний контекст траси, що дає змогу обробникам логів поєднувати локальні рядки журналу з експортованими spans.
  • Кореляція запитів: HTTP-запити Gateway і WebSocket-кадри створюють внутрішню область траси запиту. Логи й діагностичні події в цій області типово успадковують трасу запиту, а spans запуску агента й виклику моделі створюються як дочірні, щоб заголовки traceparent провайдера залишалися в тій самій трасі.
  • Кореляція викликів моделі: spans openclaw.model.call типово містять безпечні розміри компонентів промпта й містять атрибути токенів для кожного виклику, коли результат провайдера надає дані використання. openclaw.model.usage залишається span обліку на рівні запуску для агрегованої вартості, контексту й панелей каналу; він залишається в тій самій діагностичній трасі, коли середовище виконання, що його створює, має довірений контекст траси.

Експортовані метрики

Використання моделі

  • openclaw.tokens (лічильник, атрибути: openclaw.token, openclaw.channel, openclaw.provider, openclaw.model, openclaw.agent)
  • openclaw.cost.usd (лічильник, атрибути: openclaw.channel, openclaw.provider, openclaw.model)
  • openclaw.run.duration_ms (гістограма, атрибути: openclaw.channel, openclaw.provider, openclaw.model)
  • openclaw.context.tokens (гістограма, атрибути: openclaw.context, openclaw.channel, openclaw.provider, openclaw.model)
  • gen_ai.client.token.usage (гістограма, метрика семантичних конвенцій GenAI, атрибути: gen_ai.token.type = input/output, gen_ai.provider.name, gen_ai.operation.name, gen_ai.request.model)
  • gen_ai.client.operation.duration (гістограма, секунди, метрика семантичних конвенцій GenAI, атрибути: gen_ai.provider.name, gen_ai.operation.name, gen_ai.request.model, необов’язковий error.type)
  • openclaw.model_call.duration_ms (гістограма, атрибути: openclaw.provider, openclaw.model, openclaw.api, openclaw.transport, а також openclaw.errorCategory і openclaw.failureKind для класифікованих помилок)
  • openclaw.model_call.request_bytes (гістограма, розмір остаточного payload запиту до моделі в байтах UTF-8; без вмісту сирого payload)
  • openclaw.model_call.response_bytes (гістограма, розмір payload фрагментів потокової відповіді в байтах UTF-8; високочастотний текст, міркування й дельти викликів інструментів рахують лише інкрементні байти delta; без вмісту сирої відповіді)
  • openclaw.model_call.time_to_first_byte_ms (гістограма, час, що минув до першої події потокової відповіді)
  • openclaw.model.failover (лічильник, атрибути: openclaw.provider, openclaw.model, openclaw.failover.to_provider, openclaw.failover.to_model, openclaw.failover.reason, openclaw.failover.suspended, openclaw.lane)
  • openclaw.skill.used (лічильник, атрибути: openclaw.skill.name, openclaw.skill.source, openclaw.skill.activation, необов’язковий openclaw.agent, необов’язковий openclaw.toolName)

Потік повідомлень

  • openclaw.webhook.received (лічильник, атрибути: openclaw.channel, openclaw.webhook)
  • openclaw.webhook.error (лічильник, атрибути: openclaw.channel, openclaw.webhook)
  • openclaw.webhook.duration_ms (гістограма, атрибути: openclaw.channel, openclaw.webhook)
  • openclaw.message.queued (лічильник, атрибути: openclaw.channel, openclaw.source)
  • openclaw.message.received (лічильник, атрибути: openclaw.channel, openclaw.source)
  • openclaw.message.dispatch.started (лічильник, атрибути: openclaw.channel, openclaw.source)
  • openclaw.message.dispatch.completed (лічильник, атрибути: openclaw.channel, openclaw.outcome, openclaw.reason, openclaw.source)
  • openclaw.message.dispatch.duration_ms (гістограма, атрибути: openclaw.channel, openclaw.outcome, openclaw.reason, openclaw.source)
  • openclaw.message.processed (лічильник, атрибути: openclaw.channel, openclaw.outcome)
  • openclaw.message.duration_ms (гістограма, атрибути: openclaw.channel, openclaw.outcome)
  • openclaw.message.delivery.started (лічильник, атрибути: openclaw.channel, openclaw.delivery.kind)
  • openclaw.message.delivery.duration_ms (гістограма, атрибути: openclaw.channel, openclaw.delivery.kind, openclaw.outcome, openclaw.errorCategory)

Розмова

  • openclaw.talk.event (лічильник, атрибути: openclaw.talk.event_type, openclaw.talk.mode, openclaw.talk.transport, openclaw.talk.brain, openclaw.talk.provider)
  • openclaw.talk.event.duration_ms (гістограма, атрибути: ті самі, що й у openclaw.talk.event; створюється, коли подія розмови повідомляє тривалість)
  • openclaw.talk.audio.bytes (гістограма, атрибути: ті самі, що й у openclaw.talk.event; створюється для подій аудіокадрів розмови, які повідомляють довжину в байтах)

Черги та сеанси

  • openclaw.queue.lane.enqueue (лічильник, атрибути: openclaw.lane)
  • openclaw.queue.lane.dequeue (лічильник, атрибути: openclaw.lane)
  • openclaw.queue.depth (гістограма, атрибути: openclaw.lane або openclaw.channel=heartbeat)
  • openclaw.queue.wait_ms (гістограма, атрибути: openclaw.lane)
  • openclaw.session.state (лічильник, атрибути: openclaw.state, openclaw.reason)
  • openclaw.session.stuck (лічильник, атрибути: openclaw.state; створюється для відновлюваного застарілого обліку сеансів)
  • openclaw.session.stuck_age_ms (гістограма, атрибути: openclaw.state; створюється для відновлюваного застарілого обліку сеансів)
  • openclaw.session.turn.created (лічильник, атрибути: openclaw.agent, openclaw.channel, openclaw.trigger)
  • openclaw.session.recovery.requested (лічильник, атрибути: openclaw.state, openclaw.action, openclaw.active_work_kind, openclaw.reason)
  • openclaw.session.recovery.completed (лічильник, атрибути: openclaw.state, openclaw.action, openclaw.status, openclaw.active_work_kind, openclaw.reason)
  • openclaw.session.recovery.age_ms (гістограма, атрибути: ті самі, що й у відповідного лічильника відновлення)
  • openclaw.run.attempt (лічильник, атрибути: openclaw.attempt)

Телеметрія життєздатності сеансу

diagnostics.stuckSessionWarnMs — це поріг віку без прогресу для діагностики життєздатності сеансу. Сеанс processing не наближається до цього порога, поки OpenClaw спостерігає прогрес відповіді, інструмента, статусу, блока або середовища виконання ACP. Keepalive-події введення не рахуються як прогрес, тому мовчазну модель або harness все одно можна виявити. OpenClaw класифікує сеанси за роботою, яку він ще може спостерігати:
  • session.long_running: активна вбудована робота, виклики моделі або виклики інструментів усе ще прогресують. Власні виклики моделі, які мовчать довше за diagnostics.stuckSessionWarnMs, також повідомляються як довготривалі перед diagnostics.stuckSessionAbortMs, щоб повільні або непотокові провайдери моделей не виглядали як завислі сеанси Gateway, доки для них усе ще можна спостерігати скасування.
  • session.stalled: активна робота існує, але активний запуск не повідомляв нещодавнього прогресу. Власні виклики моделі переходять із session.long_running до session.stalled на або після diagnostics.stuckSessionAbortMs; застаріла активність моделі/інструмента без власника не вважається нешкідливою довготривалою роботою. Завислі вбудовані запуски спершу залишаються лише для спостереження, а потім abort-drain після diagnostics.stuckSessionAbortMs без прогресу, щоб ходи в черзі позаду цього lane могли відновитися. Якщо не задано, поріг скасування типово дорівнює безпечнішому розширеному вікну щонайменше 5 хвилин і 3x diagnostics.stuckSessionWarnMs.
  • session.stuck: застарілий облік сеансів без активної роботи або простоюючий сеанс у черзі із застарілою активністю моделі/інструмента без власника. Це звільняє відповідний lane сеансу одразу після проходження шлюзів відновлення.
Відновлення створює структуровані події session.recovery.requested і session.recovery.completed. Діагностичний стан сеансу позначається як idle лише після мутувального результату відновлення (aborted або released) і лише якщо та сама generation обробки все ще є поточною. Лише session.stuck створює лічильник openclaw.session.stuck, гістограму openclaw.session.stuck_age_ms і span openclaw.session.stuck. Повторні діагностики session.stuck відступають, поки сеанс залишається незмінним, тому панелі мають сигналізувати про сталі зростання, а не про кожен тик Heartbeat. Для параметра конфігурації та типових значень див. Довідник конфігурації. Попередження життєздатності також створюють:
  • openclaw.liveness.warning (лічильник, атрибути: openclaw.liveness.reason)
  • openclaw.liveness.event_loop_delay_p99_ms (гістограма, атрибути: openclaw.liveness.reason)
  • openclaw.liveness.event_loop_delay_max_ms (гістограма, атрибути: openclaw.liveness.reason)
  • openclaw.liveness.event_loop_utilization (гістограма, атрибути: openclaw.liveness.reason)
  • openclaw.liveness.cpu_core_ratio (гістограма, атрибути: openclaw.liveness.reason)

Життєвий цикл harness

  • openclaw.harness.duration_ms (гістограма, атрибути: openclaw.harness.id, openclaw.harness.plugin, openclaw.outcome, openclaw.harness.phase для помилок)

Виконання інструментів

  • openclaw.tool.execution.duration_ms (гістограма, атрибути: gen_ai.tool.name, openclaw.toolName, openclaw.tool.source, openclaw.tool.owner, openclaw.tool.params.kind, а також openclaw.errorCategory для помилок)
  • openclaw.tool.execution.blocked (лічильник, атрибути: gen_ai.tool.name, openclaw.toolName, openclaw.tool.source, openclaw.tool.owner, openclaw.tool.params.kind, openclaw.deniedReason)

Виконання

  • openclaw.exec.duration_ms (гістограма, атрибути: openclaw.exec.target, openclaw.exec.mode, openclaw.outcome, openclaw.failureKind)

Внутрішня діагностика (пам’ять і цикл інструментів)

  • openclaw.payload.large (лічильник, атрибути: openclaw.payload.surface, openclaw.payload.action, openclaw.channel, openclaw.plugin, openclaw.reason)
  • openclaw.payload.large_bytes (гістограма, атрибути: ті самі, що й у openclaw.payload.large)
  • openclaw.memory.heap_used_bytes (гістограма, атрибути: openclaw.memory.kind)
  • openclaw.memory.rss_bytes (гістограма)
  • openclaw.memory.pressure (лічильник, атрибути: openclaw.memory.level)
  • openclaw.tool.loop.iterations (лічильник, атрибути: openclaw.toolName, openclaw.outcome)
  • openclaw.tool.loop.duration_ms (гістограма, атрибути: openclaw.toolName, openclaw.outcome)

Експортовані spans

  • openclaw.model.usage
    • openclaw.channel, openclaw.provider, openclaw.model
    • openclaw.tokens.* (input/output/cache_read/cache_write/total)
    • gen_ai.system за замовчуванням або gen_ai.provider.name, коли ввімкнено найновіші семантичні конвенції GenAI
    • gen_ai.request.model, gen_ai.operation.name, gen_ai.usage.*
  • openclaw.run
    • openclaw.outcome, openclaw.channel, openclaw.provider, openclaw.model, openclaw.errorCategory
  • openclaw.model.call
    • gen_ai.system за замовчуванням або gen_ai.provider.name, коли ввімкнено найновіші семантичні конвенції GenAI
    • gen_ai.request.model, gen_ai.operation.name, openclaw.provider, openclaw.model, openclaw.api, openclaw.transport
    • openclaw.errorCategory і необов’язковий openclaw.failureKind у разі помилок
    • openclaw.model_call.request_bytes, openclaw.model_call.response_bytes, openclaw.model_call.time_to_first_byte_ms
    • openclaw.model_call.prompt.input_messages_count, openclaw.model_call.prompt.input_messages_chars, openclaw.model_call.prompt.system_prompt_chars, openclaw.model_call.prompt.tool_definitions_count, openclaw.model_call.prompt.tool_definitions_chars, openclaw.model_call.prompt.total_chars (лише безпечні розміри компонентів, без тексту prompt)
    • openclaw.model_call.usage.* і gen_ai.usage.*, коли результат виклику моделі містить дані використання провайдера для цього окремого виклику
    • openclaw.provider.request_id_hash (обмежений SHA-хеш ідентифікатора запиту до upstream-провайдера; необроблені ідентифікатори не експортуються)
    • З OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental spans викликів моделі використовують найновішу назву inference span GenAI {gen_ai.operation.name} {gen_ai.request.model} і span kind CLIENT замість openclaw.model.call.
  • openclaw.harness.run
    • openclaw.harness.id, openclaw.harness.plugin, openclaw.outcome, openclaw.provider, openclaw.model, openclaw.channel
    • Після завершення: openclaw.harness.result_classification, openclaw.harness.yield_detected, openclaw.harness.items.started, openclaw.harness.items.completed, openclaw.harness.items.active
    • У разі помилки: openclaw.harness.phase, openclaw.errorCategory, необов’язковий openclaw.harness.cleanup_failed
  • openclaw.tool.execution
    • gen_ai.tool.name, openclaw.toolName, openclaw.errorCategory, openclaw.tool.params.*
  • openclaw.exec
    • openclaw.exec.target, openclaw.exec.mode, openclaw.outcome, openclaw.failureKind, openclaw.exec.command_length, openclaw.exec.exit_code, openclaw.exec.timed_out
  • openclaw.webhook.processed
    • openclaw.channel, openclaw.webhook
  • openclaw.webhook.error
    • openclaw.channel, openclaw.webhook, openclaw.error
  • openclaw.message.processed
    • openclaw.channel, openclaw.outcome, openclaw.reason
  • openclaw.message.delivery
    • openclaw.channel, openclaw.delivery.kind, openclaw.outcome, openclaw.errorCategory, openclaw.delivery.result_count
  • openclaw.session.stuck
    • openclaw.state, openclaw.ageMs, openclaw.queueDepth
  • openclaw.context.assembled
    • openclaw.prompt.size, openclaw.history.size, openclaw.context.tokens, openclaw.errorCategory (без вмісту prompt, історії, відповіді або ключа сесії)
  • openclaw.tool.loop
    • openclaw.toolName, openclaw.outcome, openclaw.iterations, openclaw.errorCategory (без повідомлень циклу, параметрів або виводу інструмента)
  • openclaw.memory.pressure
    • openclaw.memory.level, openclaw.memory.heap_used_bytes, openclaw.memory.rss_bytes
Коли захоплення вмісту явно ввімкнено, spans моделі та інструментів також можуть містити обмежені, відредаговані атрибути openclaw.content.* для конкретних класів вмісту, які ви ввімкнули.

Каталог діагностичних подій

Наведені нижче події підтримують метрики та spans вище. Plugins також можуть підписуватися на них безпосередньо без експорту OTLP. Використання моделі
  • model.usage - токени, вартість, тривалість, контекст, провайдер/модель/канал, ідентифікатори сесії. usage — це облік провайдера/turn для вартості й телеметрії; context.used — це поточний знімок prompt/контексту, і він може бути нижчим за usage.total провайдера, коли залучено кешований ввід або виклики tool-loop.
Потік повідомлень
  • webhook.received / webhook.processed / webhook.error
  • message.queued / message.processed
  • message.delivery.started / message.delivery.completed / message.delivery.error
Черга та сесія
  • queue.lane.enqueue / queue.lane.dequeue
  • session.state / session.long_running / session.stalled / session.stuck
  • run.attempt / run.progress
  • diagnostic.heartbeat (агреговані лічильники: webhooks/черга/сесія)
Життєвий цикл harness
  • harness.run.started / harness.run.completed / harness.run.error - життєвий цикл кожного запуску для agent harness. Містить harnessId, необов’язковий pluginId, провайдер/модель/канал і ідентифікатор запуску. Завершення додає durationMs, outcome, необов’язкові resultClassification, yieldDetected, і лічильники itemLifecycle. Помилки додають phase (prepare/start/send/resolve/cleanup), errorCategory і необов’язковий cleanupFailed.
Exec
  • exec.process.completed - термінальний результат, тривалість, ціль, режим, код виходу та тип збою. Текст команди й робочі каталоги не включаються.
  • exec.approval.followup_suppressed - застарілий подальший запит на схвалення відкинуто після відновлення сесії. Містить approvalId, reason (session_rebound), phase (direct_delivery або gateway_preflight) і timestamp диспетчера. Ключі сесії, маршрути й текст команди не включаються.

Без експортера

Ви можете залишити діагностичні події доступними для plugins або власних приймачів без запуску diagnostics-otel:
{
  diagnostics: { enabled: true },
}
Для цільового debug-виводу без підвищення logging.level використовуйте діагностичні прапорці. Прапорці не чутливі до регістру та підтримують wildcards (наприклад, telegram.* або *):
{
  diagnostics: { flags: ["telegram.http"] },
}
Або як одноразове перевизначення env:
OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gateway
Вивід прапорців надходить до стандартного log-файлу (logging.file) і все одно редагується через logging.redactSensitive. Повний посібник: Діагностичні прапорці.

Вимкнення

{
  diagnostics: { otel: { enabled: false } },
}
Ви також можете не додавати diagnostics-otel до plugins.allow або виконати openclaw plugins disable diagnostics-otel.

Пов’язане