chore(i18n): refresh uk translations
This commit is contained in:
parent
4f6e92f19c
commit
0712ac0fe9
@ -1,180 +1,180 @@
|
||||
---
|
||||
read_when:
|
||||
- Вам потрібен точний покроковий опис циклу агента або подій життєвого циклу
|
||||
- Ви змінюєте постановку сеансів у чергу, запис транскриптів або поведінку блокування запису сеансу
|
||||
- Ви змінюєте поведінку постановки сеансів у чергу, записування транскриптів або блокування запису сеансу.
|
||||
summary: Життєвий цикл циклу агента, потоки та семантика очікування
|
||||
title: Цикл агента
|
||||
x-i18n:
|
||||
generated_at: "2026-05-03T17:25:12Z"
|
||||
generated_at: "2026-05-05T03:06:20Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 1bdd8e98710dce6412f499c37d2d74445f44f93142364c30993de517fdea6c56
|
||||
source_hash: 1c7031a2b70e7a891f51fa127df6f04663db81400715717f50dd840a3fa5b745
|
||||
source_path: concepts/agent-loop.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Агентний цикл — це повний «реальний» запуск агента: приймання → складання контексту → інференс моделі →
|
||||
виконання інструментів → потокові відповіді → збереження стану. Це авторитетний шлях, який перетворює повідомлення
|
||||
на дії та фінальну відповідь, водночас підтримуючи узгодженість стану сеансу.
|
||||
Агентний цикл — це повний «реальний» запуск агента: приймання → збирання контексту → інференс моделі →
|
||||
виконання інструментів → потокові відповіді → збереження. Це авторитетний шлях, який перетворює повідомлення
|
||||
на дії та фінальну відповідь, водночас підтримуючи узгоджений стан сеансу.
|
||||
|
||||
В OpenClaw цикл — це один серіалізований запуск на сеанс, який видає події життєвого циклу й потоку,
|
||||
поки модель думає, викликає інструменти та потоково передає вивід. Цей документ пояснює, як цей автентичний цикл
|
||||
з’єднано наскрізно.
|
||||
В OpenClaw цикл — це один серіалізований запуск на сеанс, який випускає події життєвого циклу та потоку,
|
||||
поки модель думає, викликає інструменти й передає вивід потоково. У цьому документі пояснено, як цей автентичний цикл
|
||||
з’єднано від початку до кінця.
|
||||
|
||||
## Точки входу
|
||||
|
||||
- Gateway RPC: `agent` і `agent.wait`.
|
||||
- CLI: команда `agent`.
|
||||
|
||||
## Як це працює (на високому рівні)
|
||||
## Як це працює (загальний огляд)
|
||||
|
||||
1. RPC `agent` перевіряє параметри, визначає сеанс (sessionKey/sessionId), зберігає метадані сеансу, негайно повертає `{ runId, acceptedAt }`.
|
||||
2. `agentCommand` запускає агента:
|
||||
- визначає модель + типові значення для thinking/verbose/trace
|
||||
- завантажує знімок skills
|
||||
- визначає модель і стандартні значення thinking/verbose/trace
|
||||
- завантажує знімок Skills
|
||||
- викликає `runEmbeddedPiAgent` (середовище виконання pi-agent-core)
|
||||
- видає **end/error життєвого циклу**, якщо вбудований цикл не видає жодної з цих подій
|
||||
- випускає **завершення/помилку життєвого циклу**, якщо вбудований цикл не випускає таку подію
|
||||
3. `runEmbeddedPiAgent`:
|
||||
- серіалізує запуски через черги на сеанс + глобальні черги
|
||||
- визначає модель + профіль автентифікації та будує сеанс pi
|
||||
- підписується на події pi й потоково передає дельти асистента/інструментів
|
||||
- застосовує тайм-аут -> перериває запуск у разі перевищення
|
||||
- для ходів сервера застосунку Codex перериває прийнятий хід, який перестає створювати прогрес сервера застосунку до термінальної події
|
||||
- повертає payloads + метадані використання
|
||||
4. `subscribeEmbeddedPiSession` мостить події pi-agent-core до потоку `agent` OpenClaw:
|
||||
- серіалізує запуски через черги на рівні сеансу та глобальні черги
|
||||
- визначає модель і профіль автентифікації та створює сеанс Pi
|
||||
- підписується на події Pi й передає дельти асистента/інструментів потоково
|
||||
- забезпечує тайм-аут -> перериває запуск, якщо його перевищено
|
||||
- для ходів app-server Codex перериває прийнятий хід, який перестає видавати прогрес app-server до термінальної події
|
||||
- повертає payload-и та метадані використання
|
||||
4. `subscribeEmbeddedPiSession` з’єднує події pi-agent-core з потоком OpenClaw `agent`:
|
||||
- події інструментів => `stream: "tool"`
|
||||
- дельти асистента => `stream: "assistant"`
|
||||
- події життєвого циклу => `stream: "lifecycle"` (`phase: "start" | "end" | "error"`)
|
||||
5. `agent.wait` використовує `waitForAgentRun`:
|
||||
- чекає на **end/error життєвого циклу** для `runId`
|
||||
- очікує **завершення/помилки життєвого циклу** для `runId`
|
||||
- повертає `{ status: ok|error|timeout, startedAt, endedAt, error? }`
|
||||
|
||||
## Черги + конкурентність
|
||||
## Черги + паралельність
|
||||
|
||||
- Запуски серіалізуються за ключем сеансу (лінія сеансу) і, за потреби, через глобальну лінію.
|
||||
- Це запобігає гонкам інструментів/сеансу та підтримує узгодженість історії сеансу.
|
||||
- Канали повідомлень можуть вибирати режими черг (collect/steer/followup), які подаються в цю систему ліній.
|
||||
- Це запобігає перегонам інструментів/сеансів і підтримує узгоджену історію сеансу.
|
||||
- Канали повідомлень можуть вибирати режими черги (collect/steer/followup), які подають роботу в цю систему ліній.
|
||||
Див. [Черга команд](/uk/concepts/queue).
|
||||
- Записи транскрипту також захищені блокуванням запису сеансу на файлі сеансу. Блокування
|
||||
враховує процеси й базується на файлах, тому воно перехоплює записувачі, які обходять внутрішньопроцесну чергу або надходять
|
||||
з іншого процесу. Записувачі транскрипту сеансу чекають до `session.writeLock.acquireTimeoutMs`
|
||||
перед тим, як повідомити, що сеанс зайнятий; типове значення — `60000` мс.
|
||||
- Блокування запису сеансу типово не є реентерабельними. Якщо допоміжна функція навмисно вкладає отримання
|
||||
того самого блокування, зберігаючи одного логічного записувача, вона має явно ввімкнути це через
|
||||
- Записи транскрипту також захищені блокуванням запису сеансу у файлі сеансу. Блокування
|
||||
враховує процеси й базується на файлах, тому воно виявляє записувачів, які обходять внутрішньопроцесну чергу або надходять
|
||||
з іншого процесу. Записувачі транскрипту сеансу очікують до `session.writeLock.acquireTimeoutMs`
|
||||
перед тим, як повідомити, що сеанс зайнятий; стандартне значення — `60000` мс.
|
||||
- Блокування запису сеансу за замовчуванням не є повторно вхідними. Якщо допоміжний компонент навмисно вкладає отримання
|
||||
того самого блокування, зберігаючи одного логічного записувача, він має явно ввімкнути це через
|
||||
`allowReentrant: true`.
|
||||
|
||||
## Підготовка сеансу + робочого простору
|
||||
|
||||
- Робочий простір визначається та створюється; ізольовані запуски можуть перенаправлятися до кореня робочого простору пісочниці.
|
||||
- Skills завантажуються (або повторно використовуються зі знімка) та вводяться в env і prompt.
|
||||
- Файли bootstrap/context визначаються та вводяться у звіт системного prompt.
|
||||
- Отримується блокування запису сеансу; `SessionManager` відкривається та готується до потокової передачі. Будь-який
|
||||
подальший шлях переписування транскрипту, Compaction або обрізання має взяти те саме блокування перед відкриттям або
|
||||
змінюванням файлу транскрипту.
|
||||
- Робочий простір визначається й створюється; ізольовані запуски можуть перенаправлятися до кореня робочого простору пісочниці.
|
||||
- Skills завантажуються (або повторно використовуються зі знімка) та ін’єктуються в середовище і prompt.
|
||||
- Bootstrap/context-файли визначаються та ін’єктуються у звіт системного prompt.
|
||||
- Отримується блокування запису сеансу; `SessionManager` відкривається й готується до початку потокової передачі. Будь-який
|
||||
подальший шлях переписування транскрипту, Compaction або обрізання має отримати те саме блокування перед відкриттям або
|
||||
зміною файлу транскрипту.
|
||||
|
||||
## Складання prompt + системний prompt
|
||||
## Збирання prompt + системний prompt
|
||||
|
||||
- Системний prompt будується з базового prompt OpenClaw, prompt skills, bootstrap-контексту та перевизначень для окремого запуску.
|
||||
- Застосовуються специфічні для моделі ліміти й резерв токенів для Compaction.
|
||||
- Системний prompt будується з базового prompt OpenClaw, prompt Skills, bootstrap-контексту та перевизначень для конкретного запуску.
|
||||
- Застосовуються модельні ліміти та резерв токенів для Compaction.
|
||||
- Див. [Системний prompt](/uk/concepts/system-prompt), щоб дізнатися, що бачить модель.
|
||||
|
||||
## Точки hook (де можна перехопити)
|
||||
## Точки хуків (де можна перехопити)
|
||||
|
||||
OpenClaw має дві системи hook:
|
||||
OpenClaw має дві системи хуків:
|
||||
|
||||
- **Внутрішні hooks** (Gateway hooks): подієво-керовані скрипти для команд і подій життєвого циклу.
|
||||
- **Plugin hooks**: точки розширення всередині життєвого циклу агента/інструментів і конвеєра Gateway.
|
||||
- **Внутрішні хуки** (хуки Gateway): подієво-керовані скрипти для команд і подій життєвого циклу.
|
||||
- **Хуки Plugin**: точки розширення всередині життєвого циклу агента/інструмента та конвеєра gateway.
|
||||
|
||||
### Внутрішні hooks (Gateway hooks)
|
||||
### Внутрішні хуки (хуки Gateway)
|
||||
|
||||
- **`agent:bootstrap`**: виконується під час побудови bootstrap-файлів до фіналізації системного prompt.
|
||||
Використовуйте це, щоб додавати/видаляти bootstrap-контекстні файли.
|
||||
- **Командні hooks**: `/new`, `/reset`, `/stop` та інші події команд (див. документ Hooks).
|
||||
- **`agent:bootstrap`**: виконується під час створення bootstrap-файлів до фіналізації системного prompt.
|
||||
Використовуйте це, щоб додавати/видаляти файли bootstrap-контексту.
|
||||
- **Командні хуки**: `/new`, `/reset`, `/stop` та інші події команд (див. документ про хуки).
|
||||
|
||||
Див. [Hooks](/uk/automation/hooks) для налаштування та прикладів.
|
||||
Див. [Хуки](/uk/automation/hooks) для налаштування та прикладів.
|
||||
|
||||
### Plugin hooks (життєвий цикл агента + gateway)
|
||||
### Хуки Plugin (життєвий цикл агента + gateway)
|
||||
|
||||
Вони виконуються всередині циклу агента або конвеєра gateway:
|
||||
|
||||
- **`before_model_resolve`**: виконується перед сеансом (без `messages`), щоб детерміновано перевизначити provider/model перед визначенням моделі.
|
||||
- **`before_prompt_build`**: виконується після завантаження сеансу (з `messages`), щоб вставити `prependContext`, `systemPrompt`, `prependSystemContext` або `appendSystemContext` перед надсиланням prompt. Використовуйте `prependContext` для динамічного тексту на хід і поля системного контексту для стабільних вказівок, які мають перебувати в просторі системного prompt.
|
||||
- **`before_agent_start`**: застарілий hook сумісності, який може виконуватися в будь-якій фазі; надавайте перевагу явним hooks вище.
|
||||
- **`before_agent_reply`**: виконується після inline-дій і перед викликом LLM, даючи plugin змогу взяти хід на себе й повернути синтетичну відповідь або повністю заглушити хід.
|
||||
- **`before_model_resolve`**: виконується перед сеансом (без `messages`), щоб детерміновано перевизначити провайдера/модель до визначення моделі.
|
||||
- **`before_prompt_build`**: виконується після завантаження сеансу (з `messages`), щоб ін’єктувати `prependContext`, `systemPrompt`, `prependSystemContext` або `appendSystemContext` до надсилання prompt. Використовуйте `prependContext` для динамічного тексту на хід і поля системного контексту для стабільних настанов, які мають бути в просторі системного prompt.
|
||||
- **`before_agent_start`**: застарілий хук сумісності, який може виконуватися в будь-якій фазі; віддавайте перевагу явним хукам вище.
|
||||
- **`before_agent_reply`**: виконується після inline-дій і перед викликом LLM, даючи Plugin змогу забрати хід і повернути синтетичну відповідь або повністю заглушити хід.
|
||||
- **`agent_end`**: перевіряє фінальний список повідомлень і метадані запуску після завершення.
|
||||
- **`before_compaction` / `after_compaction`**: спостерігають за циклами Compaction або анотують їх.
|
||||
- **`before_compaction` / `after_compaction`**: спостерігають або анотують цикли Compaction.
|
||||
- **`before_tool_call` / `after_tool_call`**: перехоплюють параметри/результати інструментів.
|
||||
- **`before_install`**: перевіряє вбудовані результати сканування й за потреби блокує встановлення skill або plugin.
|
||||
- **`tool_result_persist`**: синхронно трансформує результати інструментів перед записом у транскрипт сеансу, що належить OpenClaw.
|
||||
- **`message_received` / `message_sending` / `message_sent`**: hooks вхідних + вихідних повідомлень.
|
||||
- **`before_install`**: перевіряє результати вбудованого сканування та за потреби блокує встановлення Skills або Plugin.
|
||||
- **`tool_result_persist`**: синхронно трансформує результати інструментів перед записом у транскрипт сеансу, яким володіє OpenClaw.
|
||||
- **`message_received` / `message_sending` / `message_sent`**: хуки вхідних і вихідних повідомлень.
|
||||
- **`session_start` / `session_end`**: межі життєвого циклу сеансу.
|
||||
- **`gateway_start` / `gateway_stop`**: події життєвого циклу gateway.
|
||||
|
||||
Правила ухвалення рішень hook для outbound/tool guards:
|
||||
Правила рішень хуків для вихідних/інструментальних запобіжників:
|
||||
|
||||
- `before_tool_call`: `{ block: true }` є термінальним і зупиняє обробники нижчого пріоритету.
|
||||
- `before_tool_call`: `{ block: false }` нічого не робить і не скасовує попереднє блокування.
|
||||
- `before_install`: `{ block: true }` є термінальним і зупиняє обробники нижчого пріоритету.
|
||||
- `before_install`: `{ block: false }` нічого не робить і не скасовує попереднє блокування.
|
||||
- `message_sending`: `{ cancel: true }` є термінальним і зупиняє обробники нижчого пріоритету.
|
||||
- `message_sending`: `{ cancel: false }` нічого не робить і не скасовує попереднє скасування.
|
||||
- `before_tool_call`: `{ block: true }` є термінальним і зупиняє обробники з нижчим пріоритетом.
|
||||
- `before_tool_call`: `{ block: false }` не виконує дій і не скасовує попереднє блокування.
|
||||
- `before_install`: `{ block: true }` є термінальним і зупиняє обробники з нижчим пріоритетом.
|
||||
- `before_install`: `{ block: false }` не виконує дій і не скасовує попереднє блокування.
|
||||
- `message_sending`: `{ cancel: true }` є термінальним і зупиняє обробники з нижчим пріоритетом.
|
||||
- `message_sending`: `{ cancel: false }` не виконує дій і не скасовує попереднє скасування.
|
||||
|
||||
Див. [Plugin hooks](/uk/plugins/hooks) для API hook і деталей реєстрації.
|
||||
Див. [Хуки Plugin](/uk/plugins/hooks) для API хуків і деталей реєстрації.
|
||||
|
||||
Harnesses можуть адаптувати ці hooks інакше. Harness сервера застосунку Codex зберігає
|
||||
OpenClaw plugin hooks як контракт сумісності для документованих дзеркальних
|
||||
поверхонь, тоді як нативні hooks Codex залишаються окремим нижчорівневим механізмом Codex.
|
||||
Harness-и можуть адаптувати ці хуки по-різному. Harness app-server Codex зберігає
|
||||
хуки Plugin OpenClaw як контракт сумісності для документованих дзеркальних
|
||||
поверхонь, тоді як нативні хуки Codex залишаються окремим низькорівневим механізмом Codex.
|
||||
|
||||
## Потокова передача + часткові відповіді
|
||||
|
||||
- Дельти асистента потоково передаються з pi-agent-core і видаються як події `assistant`.
|
||||
- Блокова потокова передача може видавати часткові відповіді або на `text_end`, або на `message_end`.
|
||||
- Потокова передача міркувань може видаватися як окремий потік або як блокові відповіді.
|
||||
- Див. [Потокова передача](/uk/concepts/streaming) для поведінки фрагментації та блокових відповідей.
|
||||
- Дельти асистента передаються потоково з pi-agent-core і випускаються як події `assistant`.
|
||||
- Потокова передача блоків може випускати часткові відповіді або на `text_end`, або на `message_end`.
|
||||
- Потокова передача reasoning може випускатися як окремий потік або як блокові відповіді.
|
||||
- Див. [Потокова передача](/uk/concepts/streaming) щодо фрагментації та поведінки блокових відповідей.
|
||||
|
||||
## Виконання інструментів + інструменти повідомлень
|
||||
|
||||
- Події початку/оновлення/завершення інструментів видаються в потоці `tool`.
|
||||
- Результати інструментів очищуються за розміром і payloads зображень перед журналюванням/видаванням.
|
||||
- Надсилання інструментів повідомлень відстежуються, щоб придушувати дубльовані підтвердження асистента.
|
||||
- Події старту/оновлення/завершення інструмента випускаються в потік `tool`.
|
||||
- Результати інструментів очищуються за розміром і image-payload-ами перед логуванням/випуском.
|
||||
- Надсилання інструментами повідомлень відстежується, щоб пригнічувати дублікати підтверджень асистента.
|
||||
|
||||
## Формування відповіді + придушення
|
||||
## Формування відповідей + пригнічення
|
||||
|
||||
- Фінальні payloads складаються з:
|
||||
- тексту асистента (і необов’язкового міркування)
|
||||
- Фінальні payload-и збираються з:
|
||||
- тексту асистента (і необов’язкового reasoning)
|
||||
- inline-підсумків інструментів (коли verbose + дозволено)
|
||||
- тексту помилки асистента, коли модель завершується з помилкою
|
||||
- Точний тихий токен `NO_REPLY` / `no_reply` фільтрується з вихідних
|
||||
payloads.
|
||||
- Дублікати інструментів повідомлень видаляються з фінального списку payload.
|
||||
- Якщо не залишається жодного придатного до рендерингу payload і інструмент завершився з помилкою, видається резервна відповідь про помилку інструмента
|
||||
- тексту помилки асистента, коли модель завершується помилкою
|
||||
- Точний silent token `NO_REPLY` / `no_reply` фільтрується з вихідних
|
||||
payload-ів.
|
||||
- Дублікати інструментів повідомлень вилучаються з фінального списку payload-ів.
|
||||
- Якщо не залишається payload-ів, які можна відрендерити, і інструмент завершився помилкою, випускається fallback-відповідь з помилкою інструмента
|
||||
(якщо інструмент повідомлень уже не надіслав видиму для користувача відповідь).
|
||||
|
||||
## Compaction + повторні спроби
|
||||
|
||||
- Автоматична Compaction видає потокові події `compaction` і може запускати повторну спробу.
|
||||
- Під час повторної спроби буфери в пам’яті та підсумки інструментів скидаються, щоб уникнути дубльованого виводу.
|
||||
- Див. [Compaction](/uk/concepts/compaction) для конвеєра Compaction.
|
||||
- Автоматична Compaction випускає події потоку `compaction` і може запустити повторну спробу.
|
||||
- Під час повторної спроби буфери в пам’яті та підсумки інструментів скидаються, щоб уникнути дублювання виводу.
|
||||
- Див. [Compaction](/uk/concepts/compaction) щодо конвеєра Compaction.
|
||||
|
||||
## Потоки подій (сьогодні)
|
||||
|
||||
- `lifecycle`: видається `subscribeEmbeddedPiSession` (і як резервний варіант `agentCommand`)
|
||||
- `lifecycle`: випускається `subscribeEmbeddedPiSession` (і як fallback через `agentCommand`)
|
||||
- `assistant`: потокові дельти з pi-agent-core
|
||||
- `tool`: потокові події інструментів з pi-agent-core
|
||||
|
||||
## Обробка чат-каналу
|
||||
## Обробка чат-каналів
|
||||
|
||||
- Дельти асистента буферизуються в чат-повідомлення `delta`.
|
||||
- Чат `final` видається на **end/error життєвого циклу**.
|
||||
- Чат `final` випускається на **завершення/помилку життєвого циклу**.
|
||||
|
||||
## Тайм-аути
|
||||
|
||||
- Типове значення `agent.wait`: 30 с (лише очікування). Параметр `timeoutMs` перевизначає.
|
||||
- Середовище виконання агента: типове значення `agents.defaults.timeoutSeconds` — 172800 с (48 годин); застосовується таймером переривання в `runEmbeddedPiAgent`.
|
||||
- Середовище виконання Cron: ізольований agent-turn `timeoutSeconds` належить cron. Планувальник запускає цей таймер, коли починається виконання, перериває базовий запуск у налаштований крайній термін, а потім виконує обмежене очищення перед записом тайм-ауту, щоб застарілий дочірній сеанс не міг утримувати лінію заблокованою.
|
||||
- Діагностика активності сеансу: коли діагностику ввімкнено, `diagnostics.stuckSessionWarnMs` класифікує довгі сеанси `processing`, у яких не спостерігається відповідь, інструмент, статус, блок або прогрес ACP. Активні вбудовані запуски, виклики моделі та виклики інструментів повідомляються як `session.long_running`; активна робота без нещодавнього прогресу повідомляється як `session.stalled`; `session.stuck` зарезервовано для застарілого обліку сеансу без активної роботи. Застарілий облік сеансу негайно звільняє відповідну лінію сеансу; зупинені вбудовані запуски перериваються зі зливанням лише після розширеного вікна без прогресу (щонайменше 10 хвилин і 5x поріг попередження), щоб робота в черзі могла відновитися без обривання просто повільних запусків. Повторні діагностичні повідомлення `session.stuck` застосовують backoff, доки сеанс залишається незмінним.
|
||||
- Тайм-аут простою моделі: OpenClaw перериває запит до моделі, коли до завершення вікна простою не надходять фрагменти відповіді. `models.providers.<id>.timeoutSeconds` розширює цей idle watchdog для повільних локальних/самостійно розгорнутих providers; інакше OpenClaw використовує `agents.defaults.timeoutSeconds`, коли налаштовано, типово обмежуючи до 120 с. Запуски, ініційовані Cron, без явного тайм-ауту моделі або агента вимикають idle watchdog і покладаються на зовнішній тайм-аут cron.
|
||||
- Тайм-аут HTTP-запиту provider: `models.providers.<id>.timeoutSeconds` застосовується до HTTP-запитів моделі цього provider, включно з connect, headers, body, тайм-аутом запиту SDK, загальною обробкою переривання guarded-fetch і idle watchdog потоку моделі. Використовуйте це для повільних локальних/самостійно розгорнутих providers, як-от Ollama, перед підвищенням тайм-ауту всього середовища виконання агента.
|
||||
- Стандартне значення `agent.wait`: 30 с (лише очікування). Параметр `timeoutMs` перевизначає його.
|
||||
- Середовище виконання агента: стандартне значення `agents.defaults.timeoutSeconds` — 172800 с (48 годин); застосовується таймером переривання в `runEmbeddedPiAgent`.
|
||||
- Середовище виконання Cron: `timeoutSeconds` ізольованого ходу агента належить cron. Планувальник запускає цей таймер, коли починається виконання, перериває базовий запуск у налаштований deadline, а потім виконує обмежене очищення перед записом тайм-ауту, щоб застарілий дочірній сеанс не міг залишити лінію заблокованою.
|
||||
- Діагностика життєздатності сеансу: коли діагностику ввімкнено, `diagnostics.stuckSessionWarnMs` класифікує довгі сеанси `processing`, у яких не спостерігається відповіді, інструмента, статусу, блоку або прогресу ACP. Активні вбудовані запуски, виклики моделі та виклики інструментів повідомляються як `session.long_running`; активна робота без нещодавнього прогресу повідомляється як `session.stalled`; `session.stuck` зарезервовано для застарілого обліку сеансів без активної роботи. Застарілий облік сеансів негайно звільняє відповідну лінію сеансу; завислі вбудовані запуски перериваються з дренуванням лише після `diagnostics.stuckSessionAbortMs` (стандартно: щонайменше 10 хвилин і 5x порогу попередження), щоб робота в черзі могла відновитися без обривання просто повільних запусків. Відновлення випускає структуровані запитані/завершені результати, а діагностичний стан позначається як idle лише якщо те саме покоління processing усе ще актуальне. Повторні діагностики `session.stuck` застосовують backoff, доки сеанс залишається незмінним.
|
||||
- Тайм-аут простою моделі: OpenClaw перериває запит до моделі, коли до завершення idle-вікна не надходять фрагменти відповіді. `models.providers.<id>.timeoutSeconds` розширює цей idle-watchdog для повільних local/self-hosted провайдерів; інакше OpenClaw використовує `agents.defaults.timeoutSeconds`, коли його налаштовано, із лімітом 120 с за замовчуванням. Запуски, ініційовані Cron, без явного тайм-ауту моделі або агента вимикають idle-watchdog і покладаються на зовнішній тайм-аут cron.
|
||||
- Тайм-аут HTTP-запиту провайдера: `models.providers.<id>.timeoutSeconds` застосовується до HTTP-fetch-ів моделі цього провайдера, включно з connect, headers, body, SDK request timeout, total guarded-fetch abort handling та model stream idle watchdog. Використовуйте це для повільних local/self-hosted провайдерів, таких як Ollama, перш ніж підвищувати тайм-аут усього середовища виконання агента.
|
||||
|
||||
## Де все може завершитися раніше
|
||||
|
||||
@ -186,7 +186,7 @@ OpenClaw plugin hooks як контракт сумісності для доку
|
||||
## Пов’язане
|
||||
|
||||
- [Інструменти](/uk/tools) — доступні інструменти агента
|
||||
- [Hooks](/uk/automation/hooks) — подієво-керовані скрипти, що запускаються подіями життєвого циклу агента
|
||||
- [Хуки](/uk/automation/hooks) — подієво-керовані скрипти, які запускаються подіями життєвого циклу агента
|
||||
- [Compaction](/uk/concepts/compaction) — як підсумовуються довгі розмови
|
||||
- [Схвалення Exec](/uk/tools/exec-approvals) — брами схвалення для shell-команд
|
||||
- [Thinking](/uk/tools/thinking) — налаштування рівня мислення/міркування
|
||||
- [Схвалення Exec](/uk/tools/exec-approvals) — шлюзи схвалення для shell-команд
|
||||
- [Thinking](/uk/tools/thinking) — конфігурація рівня thinking/reasoning
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,36 +1,36 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете надсилати дані про використання моделі OpenClaw, потік повідомлень або метрики сеансів до колектора OpenTelemetry
|
||||
- Ви підключаєте трейси, метрики або журнали до Grafana, Datadog, Honeycomb, New Relic, Tempo або іншого OTLP-бекенду
|
||||
- Вам потрібні точні назви метрик, назви спанів або структури атрибутів для створення панелей моніторингу чи сповіщень
|
||||
- Ви підключаєте трейси, метрики або логи до Grafana, Datadog, Honeycomb, New Relic, Tempo або іншого OTLP-бекенду
|
||||
- Вам потрібні точні назви метрик, назви спанів або структури атрибутів, щоб створювати панелі моніторингу чи сповіщення.
|
||||
summary: Експортуйте діагностику OpenClaw до будь-якого колектора OpenTelemetry через Plugin diagnostics-otel (OTLP/HTTP)
|
||||
title: Експорт OpenTelemetry
|
||||
x-i18n:
|
||||
generated_at: "2026-05-04T02:07:41Z"
|
||||
generated_at: "2026-05-05T03:06:28Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: d0b5be99b29fe5f13132b03cfeaf3ce978ee16f29e307aa76769bc414b5ca35f
|
||||
source_hash: b5030b8b16624f114e31838d3a055c24e8a23a6c77d63495a445cb9f2e227b6a
|
||||
source_path: gateway/opentelemetry.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
OpenClaw експортує діагностику через офіційний Plugin `diagnostics-otel`
|
||||
OpenClaw експортує діагностику через офіційний `diagnostics-otel` Plugin
|
||||
за допомогою **OTLP/HTTP (protobuf)**. Будь-який колектор або бекенд, що приймає OTLP/HTTP,
|
||||
працює без змін у коді. Про локальні файлові журнали та як їх читати див.
|
||||
працює без змін у коді. Про локальні файлові журнали та те, як їх читати, див.
|
||||
[Журналювання](/uk/logging).
|
||||
|
||||
## Як це працює разом
|
||||
|
||||
- **Діагностичні події** — це структуровані внутрішньопроцесні записи, які
|
||||
Gateway і вбудовані Plugins створюють для запусків моделей, потоку повідомлень, сесій, черг
|
||||
та exec.
|
||||
- **Plugin `diagnostics-otel`** підписується на ці події та експортує їх як
|
||||
OpenTelemetry **метрики**, **трейси** та **журнали** через OTLP/HTTP.
|
||||
- **Виклики провайдера** отримують заголовок W3C `traceparent` від довіреного
|
||||
контексту span виклику моделі OpenClaw, коли транспорт провайдера приймає користувацькі
|
||||
Gateway і вбудовані plugins створюють для запусків моделей, потоку повідомлень, сесій, черг
|
||||
і exec.
|
||||
- **`diagnostics-otel` Plugin** підписується на ці події та експортує їх як
|
||||
OpenTelemetry **метрики**, **трейси** і **журнали** через OTLP/HTTP.
|
||||
- **Виклики провайдера** отримують W3C-заголовок `traceparent` із довіреного
|
||||
контексту span виклику моделі OpenClaw, коли транспорт провайдера приймає власні
|
||||
заголовки. Контекст трасування, створений Plugin, не поширюється.
|
||||
- Експортери підключаються лише тоді, коли ввімкнено і діагностичну поверхню, і Plugin,
|
||||
тому внутрішньопроцесна вартість за замовчуванням залишається близькою до нуля.
|
||||
тому внутрішньопроцесні витрати за замовчуванням залишаються майже нульовими.
|
||||
|
||||
## Швидкий старт
|
||||
|
||||
@ -65,7 +65,7 @@ openclaw plugins install clawhub:@openclaw/diagnostics-otel
|
||||
}
|
||||
```
|
||||
|
||||
Ви також можете ввімкнути Plugin з CLI:
|
||||
Ви також можете ввімкнути Plugin із CLI:
|
||||
|
||||
```bash
|
||||
openclaw plugins enable diagnostics-otel
|
||||
@ -77,9 +77,9 @@ openclaw plugins enable diagnostics-otel
|
||||
|
||||
## Експортовані сигнали
|
||||
|
||||
| Сигнал | Що до нього потрапляє |
|
||||
| Сигнал | Що до нього входить |
|
||||
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| **Метрики** | Лічильники та гістограми для використання токенів, вартості, тривалості запуску, потоку повідомлень, смуг черг, стану сесій, exec і тиску памʼяті. |
|
||||
| **Метрики** | Лічильники та гістограми для використання токенів, вартості, тривалості запуску, потоку повідомлень, смуг черг, стану сесії, exec і тиску на пам’ять. |
|
||||
| **Трейси** | Spans для використання моделі, викликів моделі, життєвого циклу harness, виконання інструментів, exec, обробки webhook/повідомлень, складання контексту та циклів інструментів. |
|
||||
| **Журнали** | Структуровані записи `logging.file`, експортовані через OTLP, коли ввімкнено `diagnostics.otel.logs`. |
|
||||
|
||||
@ -124,53 +124,53 @@ openclaw plugins enable diagnostics-otel
|
||||
| Змінна | Призначення |
|
||||
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `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_EXPORTER_OTLP_TRACES_ENDPOINT` / `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` / `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` | Перевизначення кінцевих точок для окремих сигналів, які використовуються, коли відповідний ключ конфігурації `diagnostics.otel.*Endpoint` не задано. Конфігурація для окремого сигналу має пріоритет над env для окремого сигналу, а той має пріоритет над спільною кінцевою точкою. |
|
||||
| `OTEL_SERVICE_NAME` | Перевизначає `diagnostics.otel.serviceName`. |
|
||||
| `OTEL_EXPORTER_OTLP_PROTOCOL` | Перевизначає протокол передавання (сьогодні враховується лише `http/protobuf`). |
|
||||
| `OTEL_SEMCONV_STABILITY_OPT_IN` | Установіть `gen_ai_latest_experimental`, щоб створювати найновіший експериментальний атрибут GenAI span (`gen_ai.provider.name`) замість застарілого `gen_ai.system`. Метрики GenAI завжди використовують обмежені семантичні атрибути з низькою кардинальністю. |
|
||||
| `OPENCLAW_OTEL_PRELOADED` | Установіть `1`, коли інший preload або хост-процес уже зареєстрував глобальний OpenTelemetry SDK. Тоді Plugin пропускає власний життєвий цикл NodeSDK, але все одно підключає діагностичних слухачів і враховує `traces`/`metrics`/`logs`. |
|
||||
| `OTEL_EXPORTER_OTLP_PROTOCOL` | Перевизначає мережевий протокол (сьогодні враховується лише `http/protobuf`). |
|
||||
| `OTEL_SEMCONV_STABILITY_OPT_IN` | Установіть `gen_ai_latest_experimental`, щоб надсилати найновіший експериментальний атрибут span GenAI (`gen_ai.provider.name`) замість застарілого `gen_ai.system`. Метрики GenAI завжди використовують обмежені семантичні атрибути з низькою кардинальністю незалежно від цього. |
|
||||
| `OPENCLAW_OTEL_PRELOADED` | Установіть `1`, коли інше попереднє завантаження або хост-процес уже зареєстрував глобальний OpenTelemetry SDK. Тоді Plugin пропускає власний життєвий цикл NodeSDK, але все одно підключає діагностичні слухачі та враховує `traces`/`metrics`/`logs`. |
|
||||
|
||||
## Приватність і захоплення вмісту
|
||||
|
||||
Сирий вміст моделі/інструмента **не** експортується за замовчуванням. Spans містять обмежені
|
||||
ідентифікатори (канал, провайдер, модель, категорія помилки, ідентифікатори запитів лише у вигляді хешу)
|
||||
і ніколи не включають текст prompt, текст відповіді, вхідні дані інструмента, вихідні дані інструмента або
|
||||
Необроблений вміст моделі/інструменту **не** експортується за замовчуванням. Spans містять обмежені
|
||||
ідентифікатори (канал, провайдер, модель, категорія помилки, ідентифікатори запитів лише у вигляді хешів)
|
||||
і ніколи не містять текст запиту, текст відповіді, вхідні дані інструменту, вихідні дані інструменту або
|
||||
ключі сесії.
|
||||
|
||||
Вихідні запити моделі можуть включати заголовок W3C `traceparent`. Цей заголовок
|
||||
Вихідні запити до моделі можуть містити W3C-заголовок `traceparent`. Цей заголовок
|
||||
створюється лише з діагностичного контексту трасування, що належить OpenClaw, для активного виклику моделі.
|
||||
Наявні заголовки `traceparent`, надані викликачем, замінюються, тому Plugins або
|
||||
користувацькі параметри провайдера не можуть підробити міжсервісне походження трейсу.
|
||||
Наявні заголовки `traceparent`, передані викликачем, замінюються, тому plugins або
|
||||
власні параметри провайдера не можуть підробити походження міжсервісного трасування.
|
||||
|
||||
Установлюйте `diagnostics.otel.captureContent.*` у `true` лише тоді, коли ваш колектор і
|
||||
політика зберігання схвалені для тексту prompt, відповіді, інструмента або системного prompt.
|
||||
політика зберігання схвалені для тексту запитів, відповідей, інструментів або системних запитів.
|
||||
Кожен підключ є окремим opt-in:
|
||||
|
||||
- `inputMessages` — вміст prompt користувача.
|
||||
- `inputMessages` — вміст запиту користувача.
|
||||
- `outputMessages` — вміст відповіді моделі.
|
||||
- `toolInputs` — payload аргументів інструмента.
|
||||
- `toolOutputs` — payload результатів інструмента.
|
||||
- `systemPrompt` — зібраний системний/developer prompt.
|
||||
- `toolInputs` — payload аргументів інструменту.
|
||||
- `toolOutputs` — payload результатів інструменту.
|
||||
- `systemPrompt` — зібраний системний/developer-запит.
|
||||
|
||||
Коли будь-який підключ увімкнено, spans моделі та інструментів отримують обмежені, відредаговані
|
||||
Коли ввімкнено будь-який підключ, spans моделі та інструментів отримують обмежені, відредаговані
|
||||
атрибути `openclaw.content.*` лише для цього класу.
|
||||
|
||||
## Семплування та скидання
|
||||
## Семплювання та скидання
|
||||
|
||||
- **Трейси:** `diagnostics.otel.sampleRate` (лише root-span, `0.0` відкидає всі,
|
||||
`1.0` зберігає всі).
|
||||
- **Метрики:** `diagnostics.otel.flushIntervalMs` (мінімум `1000`).
|
||||
- **Журнали:** журнали OTLP враховують `logging.level` (рівень файлового журналу). Вони використовують
|
||||
шлях редагування діагностичних log-record, а не форматування консолі. Інсталяціям із великим обсягом
|
||||
слід надавати перевагу семплуванню/фільтрації в колекторі OTLP замість локального семплування.
|
||||
- **Кореляція файлових журналів:** JSONL файлові журнали містять top-level `traceId`,
|
||||
`spanId`, `parentSpanId` і `traceFlags`, коли виклик журналу має дійсний
|
||||
діагностичний контекст трасування, що дає змогу процесорам журналів поєднувати локальні рядки журналу з
|
||||
варто віддавати перевагу семплюванню/фільтрації в OTLP-колекторі замість локального семплювання.
|
||||
- **Кореляція файлових журналів:** файлові журнали JSONL містять поля верхнього рівня `traceId`,
|
||||
`spanId`, `parentSpanId` і `traceFlags`, коли виклик журналу несе валідний
|
||||
діагностичний контекст трасування, що дає змогу обробникам журналів поєднувати локальні рядки журналу з
|
||||
експортованими spans.
|
||||
- **Кореляція запитів:** HTTP-запити Gateway і кадри WebSocket створюють
|
||||
внутрішню область трасування запиту. Журнали та діагностичні події в цій області
|
||||
успадковують трасування запиту за замовчуванням, а spans запуску агента та виклику моделі
|
||||
створюються як дочірні, щоб заголовки `traceparent` провайдера залишалися в тому самому трейсi.
|
||||
за замовчуванням успадковують трасування запиту, тоді як spans запуску агента та виклику моделі
|
||||
створюються як дочірні, щоб заголовки `traceparent` провайдера залишалися в тому самому trace.
|
||||
|
||||
## Експортовані метрики
|
||||
|
||||
@ -181,11 +181,11 @@ openclaw plugins enable diagnostics-otel
|
||||
- `openclaw.run.duration_ms` (гістограма, attrs: `openclaw.channel`, `openclaw.provider`, `openclaw.model`)
|
||||
- `openclaw.context.tokens` (гістограма, attrs: `openclaw.context`, `openclaw.channel`, `openclaw.provider`, `openclaw.model`)
|
||||
- `gen_ai.client.token.usage` (гістограма, метрика семантичних конвенцій GenAI, attrs: `gen_ai.token.type` = `input`/`output`, `gen_ai.provider.name`, `gen_ai.operation.name`, `gen_ai.request.model`)
|
||||
- `gen_ai.client.operation.duration` (гістограма, секунди, метрика семантичних конвенцій GenAI, attrs: `gen_ai.provider.name`, `gen_ai.operation.name`, `gen_ai.request.model`, optional `error.type`)
|
||||
- `openclaw.model_call.duration_ms` (гістограма, attrs: `openclaw.provider`, `openclaw.model`, `openclaw.api`, `openclaw.transport`, плюс `openclaw.errorCategory` і `openclaw.failureKind` для класифікованих помилок)
|
||||
- `openclaw.model_call.request_bytes` (гістограма, розмір у байтах UTF-8 фінального payload запиту моделі; без сирого вмісту payload)
|
||||
- `openclaw.model_call.response_bytes` (гістограма, розмір у байтах UTF-8 подій потокової відповіді моделі; без сирого вмісту відповіді)
|
||||
- `openclaw.model_call.time_to_first_byte_ms` (гістограма, час, що минув до першої події потокової відповіді)
|
||||
- `gen_ai.client.operation.duration` (гістограма, секунди, метрика семантичних конвенцій GenAI, attrs: `gen_ai.provider.name`, `gen_ai.operation.name`, `gen_ai.request.model`, необов’язково `error.type`)
|
||||
- `openclaw.model_call.duration_ms` (гістограма, attrs: `openclaw.provider`, `openclaw.model`, `openclaw.api`, `openclaw.transport`, а також `openclaw.errorCategory` і `openclaw.failureKind` для класифікованих помилок)
|
||||
- `openclaw.model_call.request_bytes` (гістограма, розмір у байтах UTF-8 фінального payload запиту до моделі; без необробленого вмісту payload)
|
||||
- `openclaw.model_call.response_bytes` (гістограма, розмір у байтах UTF-8 потокових подій відповіді моделі; без необробленого вмісту відповіді)
|
||||
- `openclaw.model_call.time_to_first_byte_ms` (гістограма, час, що минув до першої потокової події відповіді)
|
||||
|
||||
### Потік повідомлень
|
||||
|
||||
@ -205,35 +205,42 @@ openclaw plugins enable diagnostics-otel
|
||||
- `openclaw.queue.depth` (гістограма, attrs: `openclaw.lane` або `openclaw.channel=heartbeat`)
|
||||
- `openclaw.queue.wait_ms` (гістограма, attrs: `openclaw.lane`)
|
||||
- `openclaw.session.state` (лічильник, attrs: `openclaw.state`, `openclaw.reason`)
|
||||
- `openclaw.session.stuck` (лічильник, attrs: `openclaw.state`; створюється лише для обліку застарілих сесій без активної роботи)
|
||||
- `openclaw.session.stuck_age_ms` (гістограма, attrs: `openclaw.state`; створюється лише для обліку застарілих сесій без активної роботи)
|
||||
- `openclaw.session.stuck` (лічильник, attrs: `openclaw.state`; надсилається лише для обліку застарілих сесій без активної роботи)
|
||||
- `openclaw.session.stuck_age_ms` (гістограма, attrs: `openclaw.state`; надсилається лише для обліку застарілих сесій без активної роботи)
|
||||
- `openclaw.run.attempt` (лічильник, attrs: `openclaw.attempt`)
|
||||
|
||||
### Телеметрія життєздатності сесії
|
||||
|
||||
`diagnostics.stuckSessionWarnMs` — це поріг віку без прогресу для діагностики
|
||||
життєздатності сесії. Сесія `processing` не наближається до цього порога,
|
||||
поки OpenClaw спостерігає прогрес відповіді, інструмента, статусу, блоку або ACP runtime.
|
||||
Typing keepalives не враховуються як прогрес, тому мовчазну модель або harness все ще можна
|
||||
виявити.
|
||||
життєздатності сесії. Сесія `processing` не наближається до цього порогу,
|
||||
поки OpenClaw спостерігає прогрес відповіді, інструменту, статусу, блоку або виконання ACP.
|
||||
Typing keepalives не враховуються як прогрес, тому мовчазну модель або harness
|
||||
усе одно можна виявити.
|
||||
|
||||
OpenClaw класифікує сесії за роботою, яку він усе ще може спостерігати:
|
||||
OpenClaw класифікує сесії за роботою, яку все ще може спостерігати:
|
||||
|
||||
- `session.long_running`: активна вбудована робота, виклики моделі або виклики інструментів
|
||||
досі просуваються.
|
||||
досі виконуються.
|
||||
- `session.stalled`: активна робота існує, але активний запуск не повідомляв
|
||||
про нещодавній прогрес. Завислі вбудовані запуски спочатку залишаються лише для спостереження, а потім
|
||||
переходять до abort-drain після щонайменше 10 хвилин і 5x `diagnostics.stuckSessionWarnMs`
|
||||
без прогресу, щоб поставлені в чергу ходи позаду lane могли відновитися.
|
||||
- `session.stuck`: застарілий облік сесії без активної роботи. Це негайно звільняє
|
||||
відповідну session lane.
|
||||
про нещодавній прогрес. Застряглі вбудовані запуски спочатку залишаються лише для спостереження, а потім
|
||||
виконують abort-drain після `diagnostics.stuckSessionAbortMs` без прогресу, щоб поставлені в чергу
|
||||
звернення за цією смугою могли відновитися. Якщо значення не задано, поріг переривання за замовчуванням
|
||||
становить безпечніше розширене вікно щонайменше 10 хвилин і 5x
|
||||
`diagnostics.stuckSessionWarnMs`.
|
||||
- `session.stuck`: застарілий облік сеансу без активної роботи. Це негайно звільняє
|
||||
відповідну смугу сеансу.
|
||||
|
||||
Лише `session.stuck` генерує лічильник `openclaw.session.stuck`,
|
||||
Відновлення створює структуровані події `session.recovery.requested` і
|
||||
`session.recovery.completed`. Діагностичний стан сеансу позначається як неактивний
|
||||
лише після результату відновлення, що змінює стан (`aborted` або `released`), і лише якщо
|
||||
те саме покоління обробки досі є поточним.
|
||||
|
||||
Лише `session.stuck` створює лічильник `openclaw.session.stuck`,
|
||||
гістограму `openclaw.session.stuck_age_ms` і span `openclaw.session.stuck`.
|
||||
Повторні діагностичні події `session.stuck` сповільнюються, доки сесія
|
||||
залишається незмінною, тому панелі моніторингу мають сповіщати про сталі
|
||||
зростання, а не про кожен Heartbeat tick. Налаштування конфігурації та значення за замовчуванням див.
|
||||
у [довіднику конфігурації](/uk/gateway/configuration-reference#diagnostics).
|
||||
Повторні діагностики `session.stuck` відступають, доки сеанс залишається
|
||||
незмінним, тому dashboards мають сповіщати про стале зростання, а не про кожен
|
||||
тик Heartbeat. Про параметр конфігурації та значення за замовчуванням див.
|
||||
[Довідник конфігурації](/uk/gateway/configuration-reference#diagnostics).
|
||||
|
||||
### Життєвий цикл harness
|
||||
|
||||
@ -243,7 +250,7 @@ OpenClaw класифікує сесії за роботою, яку він ус
|
||||
|
||||
- `openclaw.exec.duration_ms` (гістограма, атрибути: `openclaw.exec.target`, `openclaw.exec.mode`, `openclaw.outcome`, `openclaw.failureKind`)
|
||||
|
||||
### Внутрішня діагностика (пам’ять і цикл інструментів)
|
||||
### Внутрішні діагностичні дані (памʼять і цикл інструментів)
|
||||
|
||||
- `openclaw.memory.heap_used_bytes` (гістограма, атрибути: `openclaw.memory.kind`)
|
||||
- `openclaw.memory.rss_bytes` (гістограма)
|
||||
@ -256,20 +263,20 @@ OpenClaw класифікує сесії за роботою, яку він ус
|
||||
- `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.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.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.errorCategory` і необовʼязковий `openclaw.failureKind` для помилок
|
||||
- `openclaw.model_call.request_bytes`, `openclaw.model_call.response_bytes`, `openclaw.model_call.time_to_first_byte_ms`
|
||||
- `openclaw.provider.request_id_hash` (обмежений SHA-хеш ідентифікатора запиту upstream-провайдера; необроблені ідентифікатори не експортуються)
|
||||
- `openclaw.provider.request_id_hash` (обмежений SHA-based hash ідентифікатора запиту до upstream provider; raw ids не експортуються)
|
||||
- `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.harness.phase`, `openclaw.errorCategory`, необовʼязковий `openclaw.harness.cleanup_failed`
|
||||
- `openclaw.tool.execution`
|
||||
- `gen_ai.tool.name`, `openclaw.toolName`, `openclaw.errorCategory`, `openclaw.tool.params.*`
|
||||
- `openclaw.exec`
|
||||
@ -285,27 +292,27 @@ OpenClaw класифікує сесії за роботою, яку він ус
|
||||
- `openclaw.session.stuck`
|
||||
- `openclaw.state`, `openclaw.ageMs`, `openclaw.queueDepth`
|
||||
- `openclaw.context.assembled`
|
||||
- `openclaw.prompt.size`, `openclaw.history.size`, `openclaw.context.tokens`, `openclaw.errorCategory` (без вмісту prompt, history, response або session-key)
|
||||
- `openclaw.prompt.size`, `openclaw.history.size`, `openclaw.context.tokens`, `openclaw.errorCategory` (без prompt, history, response або вмісту session-key)
|
||||
- `openclaw.tool.loop`
|
||||
- `openclaw.toolName`, `openclaw.outcome`, `openclaw.iterations`, `openclaw.errorCategory` (без повідомлень циклу, параметрів або виводу інструменту)
|
||||
- `openclaw.toolName`, `openclaw.outcome`, `openclaw.iterations`, `openclaw.errorCategory` (без повідомлень циклу, параметрів або виводу інструмента)
|
||||
- `openclaw.memory.pressure`
|
||||
- `openclaw.memory.level`, `openclaw.memory.heap_used_bytes`, `openclaw.memory.rss_bytes`
|
||||
|
||||
Коли capture вмісту явно ввімкнено, spans моделі та інструментів також можуть
|
||||
містити обмежені й відредаговані атрибути `openclaw.content.*` для конкретних
|
||||
класів вмісту, які ви вибрали.
|
||||
Коли захоплення вмісту явно ввімкнено, spans моделі та інструментів також можуть
|
||||
містити обмежені, редаговані атрибути `openclaw.content.*` для конкретних
|
||||
класів вмісту, які ви ввімкнули.
|
||||
|
||||
## Каталог діагностичних подій
|
||||
|
||||
Наведені нижче події підтримують метрики та spans вище. Plugins також можуть
|
||||
підписуватися на них напряму без експорту OTLP.
|
||||
Події нижче забезпечують метрики та spans вище. Плагіни також можуть підписуватися
|
||||
на них напряму без експорту OTLP.
|
||||
|
||||
**Використання моделі**
|
||||
|
||||
- `model.usage` — токени, вартість, тривалість, контекст, provider/model/channel,
|
||||
ідентифікатори сесії. `usage` — це облік провайдера/ходу для вартості й телеметрії;
|
||||
ідентифікатори сеансів. `usage` — це облік provider/turn для вартості й телеметрії;
|
||||
`context.used` — це поточний знімок prompt/context і може бути нижчим за
|
||||
provider `usage.total`, коли задіяні кешований ввід або виклики tool-loop.
|
||||
provider `usage.total`, коли задіяні кешований вхід або виклики tool-loop.
|
||||
|
||||
**Потік повідомлень**
|
||||
|
||||
@ -313,7 +320,7 @@ OpenClaw класифікує сесії за роботою, яку він ус
|
||||
- `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`
|
||||
@ -323,22 +330,22 @@ OpenClaw класифікує сесії за роботою, яку він ус
|
||||
**Життєвий цикл harness**
|
||||
|
||||
- `harness.run.started` / `harness.run.completed` / `harness.run.error` —
|
||||
життєвий цикл кожного запуску для agent harness. Містить `harnessId`, необов’язковий
|
||||
життєвий цикл кожного запуску для harness агента. Містить `harnessId`, необовʼязковий
|
||||
`pluginId`, provider/model/channel і run id. Завершення додає
|
||||
`durationMs`, `outcome`, необов’язкові `resultClassification`, `yieldDetected`
|
||||
`durationMs`, `outcome`, необовʼязкові `resultClassification`, `yieldDetected`
|
||||
і лічильники `itemLifecycle`. Помилки додають `phase`
|
||||
(`prepare`/`start`/`send`/`resolve`/`cleanup`), `errorCategory` і
|
||||
необов’язковий `cleanupFailed`.
|
||||
необовʼязковий `cleanupFailed`.
|
||||
|
||||
**Exec**
|
||||
|
||||
- `exec.process.completed` — підсумковий результат термінала, тривалість, target, mode, exit
|
||||
code і failure kind. Текст команди та робочі каталоги не
|
||||
- `exec.process.completed` — кінцевий результат, тривалість, ціль, режим, код виходу
|
||||
і тип збою. Текст команди та робочі каталоги не
|
||||
включаються.
|
||||
|
||||
## Без експортера
|
||||
|
||||
Ви можете залишити діагностичні події доступними для Plugins або користувацьких sinks без
|
||||
Ви можете залишити діагностичні події доступними для плагінів або власних приймачів без
|
||||
запуску `diagnostics-otel`:
|
||||
|
||||
```json5
|
||||
@ -347,8 +354,8 @@ OpenClaw класифікує сесії за роботою, яку він ус
|
||||
}
|
||||
```
|
||||
|
||||
Для цільового debug-виводу без підвищення `logging.level` використовуйте діагностичні
|
||||
прапорці. Прапорці не чутливі до регістру та підтримують wildcards (наприклад, `telegram.*` або
|
||||
Для цільового debug output без підвищення `logging.level` використовуйте діагностичні
|
||||
flags. Flags нечутливі до регістру та підтримують wildcards (наприклад, `telegram.*` або
|
||||
`*`):
|
||||
|
||||
```json5
|
||||
@ -357,15 +364,15 @@ OpenClaw класифікує сесії за роботою, яку він ус
|
||||
}
|
||||
```
|
||||
|
||||
Або як одноразове перевизначення через env:
|
||||
Або як одноразове перевизначення env:
|
||||
|
||||
```bash
|
||||
OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gateway
|
||||
```
|
||||
|
||||
Вивід прапорців надходить до стандартного log-файлу (`logging.file`) і все одно
|
||||
Вивід flag надходить до стандартного файлу журналу (`logging.file`) і все одно
|
||||
редагується через `logging.redactSensitive`. Повний посібник:
|
||||
[діагностичні прапорці](/uk/diagnostics/flags).
|
||||
[Діагностичні flags](/uk/diagnostics/flags).
|
||||
|
||||
## Вимкнення
|
||||
|
||||
@ -378,10 +385,10 @@ OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gateway
|
||||
Ви також можете не додавати `diagnostics-otel` до `plugins.allow` або виконати
|
||||
`openclaw plugins disable diagnostics-otel`.
|
||||
|
||||
## Пов’язане
|
||||
## Повʼязане
|
||||
|
||||
- [Журналювання](/uk/logging) — файлові журнали, консольний вивід, CLI tailing і вкладка журналів Control UI
|
||||
- [Внутрішнє журналювання Gateway](/uk/gateway/logging) — стилі журналів WS, префікси підсистем і capture консолі
|
||||
- [Діагностичні прапорці](/uk/diagnostics/flags) — цільові прапорці debug-log
|
||||
- [Внутрішні механізми журналювання Gateway](/uk/gateway/logging) — стилі журналів WS, префікси підсистем і захоплення консолі
|
||||
- [Діагностичні flags](/uk/diagnostics/flags) — цільові flags debug-log
|
||||
- [Експорт діагностики](/uk/gateway/diagnostics) — інструмент support-bundle для операторів (окремо від експорту OTEL)
|
||||
- [Довідник конфігурації](/uk/gateway/configuration-reference#diagnostics) — повна довідка полів `diagnostics.*`
|
||||
- [Довідник конфігурації](/uk/gateway/configuration-reference#diagnostics) — повний довідник полів `diagnostics.*`
|
||||
|
||||
Loading…
Reference in New Issue
Block a user