Observability
Три кита наблюдаемости: Logs (что произошло), Metrics (сколько), Traces (как прошло).
Если не можем измерить — не автоматизируем. См. 3. Наблюдаемость превыше автоматизации.
SQL: таблица runs
Каждое выполнение агента логируется:
CREATE TABLE runs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
task_id UUID REFERENCES tasks(id),
agent TEXT NOT NULL,
model TEXT NOT NULL,
started_at TIMESTAMPTZ DEFAULT now(),
completed_at TIMESTAMPTZ,
duration_ms INT,
prompt_tokens INT,
completion_tokens INT,
total_cost_usd NUMERIC(10,6),
input JSONB,
output JSONB,
tool_calls JSONB,
status TEXT NOT NULL, -- 'success' | 'error' | 'timeout' | 'policy_violation'
error TEXT,
confidence NUMERIC(3,2),
judge_score NUMERIC(3,2)
);
CREATE INDEX idx_runs_task ON runs(task_id);
CREATE INDEX idx_runs_agent ON runs(agent, started_at);
CREATE INDEX idx_runs_status ON runs(status);Ключевые метрики
Per Agent
| Метрика | Описание | Alert threshold |
|---|---|---|
tasks_completed_24h | Задач завершено за 24ч | — |
avg_duration_ms | Среднее время выполнения | p95 > 5 min |
avg_cost_usd | Средняя стоимость задачи | > 2x от baseline |
success_rate | % успешных (done / total) | < 50% за час |
judge_score_avg | Средняя оценка Judge | < 0.5 подряд 5+ |
escalation_rate | % эскалированных | > 30% |
Per Task Type
| Метрика | Описание |
|---|---|
p50/p95/p99 duration | Перцентили времени выполнения |
avg_cost | Средняя стоимость по типу |
retry_rate | % повторных попыток |
System-wide
| Метрика | Описание | Alert threshold |
|---|---|---|
queue_depth | Задач в очереди (pending) | > 100 |
worker_utilization | % занятых воркеров | > 90% sustained |
total_daily_cost | Суммарные расходы за день | > daily budget × 80% |
human_intervention_rate | % задач с human involvement | Tracking (цель < 20%) |
Dashboard MVP
FastAPI endpoint /admin/dashboard. Одна страница, без JS-фреймворков:
- Queue state — pending / running / judging counts
- Recent 100 runs — таблица с agent, status, duration, cost, score
- Errors 24h — список ошибок с контекстом
- Cost today vs budget — прогресс-бар
- Top agents by usage — tokens / cost / tasks
- Top failing — агенты с наименьшим success rate
Alerts (Telegram)
Критические алерты отправляются в Telegram Human Owner:
| Событие | Severity | Действие |
|---|---|---|
| Policy violation | critical | Немедленное уведомление |
| Codex breach attempt | critical | Немедленное уведомление + freeze agent |
| Daily budget > 80% | warning | Уведомление |
| Queue depth > 100 | warning | Уведомление |
| Agent success rate < 50% (1h) | warning | Уведомление |
| Judge score < 0.5 подряд 5+ | warning | Уведомление |
| Agent timeout > 3 подряд | warning | Уведомление |
Что логируем
Да
- Input prompt (с маскированием PII)
- Output результат
- Tool calls с параметрами (с маскированием secrets)
- Tokens consumed / cost / duration
- Decision points (reasoning chain)
- Confidence scores
Нет (НИКОГДА)
- API keys и пароли
- Финансовые данные в raw-виде
- PII без hashing (email → hash, phone → hash)
- Содержимое секретных файлов
Audit Trail
Отдельная append-only таблица для security audit:
CREATE TABLE security_audit_log (
id BIGSERIAL PRIMARY KEY,
timestamp TIMESTAMPTZ DEFAULT now() NOT NULL,
agent TEXT NOT NULL,
action TEXT NOT NULL,
resource TEXT,
result TEXT NOT NULL, -- 'allowed' | 'denied' | 'escalated'
details JSONB,
ip_address INET
);
-- Append-only: no UPDATE/DELETE permissions for application role
-- Retention: 2 years minimumНикто не может модифицировать audit log через приложение. Retention: минимум 2 года.
Связанные документы
- 3. Наблюдаемость превыше автоматизации — принцип
- System-Overview — место observability в архитектуре
- Tech-Stack — observability stack по фазам
- Policy-Layer — security incidents logging