diff --git a/memory/2026-06-08.md b/memory/2026-06-08.md index fdc4489..da47dde 100644 --- a/memory/2026-06-08.md +++ b/memory/2026-06-08.md @@ -378,3 +378,12 @@ - **НО проверка CPU показала: pid 716 ЖИВЁТ и РАБОТАЕТ** (cpu delta=12 тиков/5с, 5 socket, State S). Т.е. это НЕ зависание, а ДОЛГИЙ АНАЛИЗ (тяжёлая root-cause задача: читать merge_gate.py+stage_engine.py+логи 074/081 на opus-4-8). **Вероятно зря убила 405** — он тоже мог просто долго думать. - ⚠️ **ПРАВИЛО НА БУДУЩЕЕ:** прежде чем убивать «зависший» агент — ПРОВЕРИТЬ CPU-активность pid (`/proc/PID/stat` utime+stime delta) и socket-соединения. Живёт+жжёт CPU = думает, НЕ трогать. `--output-format json` пишет результат только В КОНЦЕ → пустой лог при живом процессе = НОРМА. JobReaper max_running_s=3600 — пусть решает он, не я вручную. - ⚠️ РИСК: attempts уже 2/2 (из-за моего kill). Если 716 упадёт — больше retry НЕТ → задача застрянет. Следить. Сейчас 716 работает — жду. +- ОБНОВЛЕНИЕ (~20:40): run 406 pid 716 идёт 22+ мин, CPU delta 0/1/1 (слабая активность = медленный стрим от API). Подозрение: claude-cli-proxy (Up 3 weeks) деградировал → медленные ответы. Не трогаю (attempts 2/2), пусть JobReaper решает. + +## 📡 ORCH-83 [ЭПИК] НАБЛЮДАЕМОСТЬ заведён (08.06 ~20:43 UTC) — Слава заказал +- **Триггер:** 3 слепые зоны за день — (1) agent-liveness (analyst «завис», лезла в /proc вручную), (2) **диск хоста 93%** (8ГБ/118, никто не алертит!), (3) merge-HOLD молча. Орк автономен но СЛЕП. +- **Эпик seq=83** id=746c268e-275b-4fa1-8a1c-039349fac300, Backlog. Замысел: `tasks/orchestrator/ORCH-83_OBSERVABILITY_EPIC.md`. +- **4 слоя:** 83a СБОР (метрики: liveness/очередь/стадии/инфра), 83b АЛЕРТИНГ (пороги→Telegram), 83c ДАШБОРД (live веб), 83d АГЕНТ СОПРОВОЖДЕНИЯ (SRE: отслеживает→реагирует→исправляет→развивает). +- **Инфра собрана:** 21 контейнер (orch+staging, gitea, plane-app-*×14, claude-cli-proxy, xray, enduro, osrm, gateway). Орк уже имеет /health//status//queue (фундамент) + шлёт в Telegram (notifications.py — переиспользовать для алертов). +- ⚠️ **Открытые вопросы к Славе (ДО декомпозиции):** (1) стек дэш — Flask vs Grafana+Prometheus (но диск 93%!); (2) агент сопровождения — новый агент/сервис/роль Стрим; (3) что первым — liveness или диск-алерт. +- НАБЛЮДАЕМОСТЬ = 5-й стратегический кирпич автономности. diff --git a/tasks/orchestrator/ORCH-83_OBSERVABILITY_EPIC.md b/tasks/orchestrator/ORCH-83_OBSERVABILITY_EPIC.md new file mode 100644 index 0000000..b1b2060 --- /dev/null +++ b/tasks/orchestrator/ORCH-83_OBSERVABILITY_EPIC.md @@ -0,0 +1,65 @@ +# ORCH-83 — ЭПИК: Наблюдаемость орка (мониторинг + алертинг + дашборд + агент сопровождения) + +**Автор:** Стрим · **Дата:** 2026-06-08 · **Заказчик:** Слава +**Стратегический кирпич:** НАБЛЮДАЕМОСТЬ (5-й в стратегии автономности: целостность ✅ → координация ✅ → … → наблюдаемость 🔜) + +--- + +## 0. Зачем (триггер) + +Сегодня всплыли три «слепые зоны», которые система мониторинга поймала бы сама: +1. **Agent liveness:** analyst (ORCH-81) «завис» на 22+ мин — пришлось вручную лезть в `/proc/PID/stat`, считать CPU-тики, чтобы понять «думает или мёртв». **Нет индикации что агент работает.** +2. **Диск хоста 93%** (8 ГБ из 118) — обнаружено случайно при scan. Никто не алертит. Риск для орка/Plane/Gitea/Postgres. +3. **Merge-баг (074/081)** — задачи молча застревали на HOLD; узнавали только когда Слава спрашивал «что там». + +**Вывод:** орк уже автономен в исполнении (целостность+координация в проде), но **слеп** — оператор (Слава/Стрим) узнаёт о проблемах реактивно, вручную, через ssh+docker+sqlite. Нужна **проактивная наблюдаемость**. + +## 1. Что мониторить (полная карта инфры — собрана 08.06) + +### Сам орк (приложение) +- Стадии задач: какой stage, как давно (детект застреваний типа merge-HOLD). +- Очередь jobs: queued/running/failed, глубина, ретраи, breaker (429). +- **Agent liveness:** какой агент запущен, run_id, pid, сколько работает, ЖИВ ли (CPU/heartbeat), не превысил ли разумный таймаут. ← прямой ответ на сегодняшнюю боль. +- Стоимость/токены (agent_runs: cost_usd, tokens) — экономика. +- Эндпоинты уже есть: `/health`, `/status`, `/queue` (src/main.py) — фундамент. + +### Инфраструктура хоста (82.22.50.71) +- **Диск** (сейчас 93%! критично), inode, рост `/var/lib/docker`. +- **Память** (7.7Gi всего, 442Mi free — впритык). +- CPU/load. + +### Контейнеры (docker ps — 21 контейнер) +- orchestrator, orchestrator-staging, gitea, plane-app-* (14 контейнеров!), claude-cli-proxy, xray, enduro-trails, osrm, openclaw-gateway. +- Статус Up/healthy/restarting/exited, рестарты, потребление. +- **Зависимости орка:** gitea (merge/PR), plane (задачи), claude-cli-proxy (LLM — `Up 3 weeks`, кандидат на деградацию → могла быть причина «зависа» analyst!), postgres плейна. + +### Внешние зависимости +- Plane API доступность, Gitea API, claude-cli-proxy латентность (← подозрение по ORCH-81 зависанию). + +## 2. Четыре слоя эпика (декомпозиция) + +| Под-задача | Слой | Суть | Приоритет | +|---|---|---|---| +| **ORCH-83a** | СБОР | Метрики: agent-liveness (pid/CPU/runtime/таймаут), очередь, стадии, диск/память/контейнеры/деп-сервисы. Расширить `/status`/`/metrics`. | HIGH | +| **ORCH-83b** | АЛЕРТИНГ | Правила + пороги (диск>85%, агент>N мин без прогресса, job failed, контейнер down, dep-сервис недоступен) → уведомление в Telegram (как уже шлёт орк). Дедуп/throttle. | HIGH | +| **ORCH-83c** | ДАШБОРД | Веб-дэш: задачи/очередь/агенты/инфра в одном месте (live). Behind nginx как noisemap/snowbike. | MEDIUM | +| **ORCH-83d** | АГЕНТ СОПРОВОЖДЕНИЯ | Агент-SRE: отслеживает → реагирует → исправляет (рестарт зависшего агента, чистка диска, пере-пуш PR) → развивает. Над системой мониторинга. | MEDIUM→HIGH | + +## 3. Ключевые принципы (стратегия) + +- **Наблюдаемость:** «не лезть в ssh+sqlite вручную» — состояние орка видно сразу. +- **Проактивность:** алерт ДО того как Слава спросит «что там». +- **Не мешать автономности:** мониторинг read-only по умолчанию; агент сопровождения действует осторожно (как Стрим — штатными механизмами, не ручным reset). +- **Экономно:** лёгкие проверки (не жечь токены/CPU); агент сопровождения — дешёвая модель где можно (но это не G3-routing орка, отдельный агент). +- **Self-hosting safety:** мониторинг орка не должен ронять орк. + +## 4. Связь с существующим +- Орк УЖЕ шлёт в Telegram (notifications.py) — переиспользовать транспорт для алертов. +- Есть JobReaper (max_running_s=3600) — расширить/сделать видимым (агент-liveness). +- Heartbeat Стрим (HEARTBEAT.md) уже частично watchdog'ит — формализовать в систему. +- ORCH-21 post-deploy-monitor — точечный мониторинг деплоя, частный случай. + +## 5. Открытые вопросы к Славе +- Стек дашборда: свой Flask (как noisemap) ИЛИ готовое (Grafana+Prometheus)? Готовое мощнее, но +контейнеры на и так забитый хост (диск 93%!). +- Агент сопровождения: новый агент орка (analyst-стиль) ИЛИ отдельный сервис ИЛИ роль Стрим? +- Приоритет внутри эпика: что первым — liveness-индикация (горит) или диск-алерт (тоже горит)?