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 involvementTracking (цель < 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 violationcriticalНемедленное уведомление
Codex breach attemptcriticalНемедленное уведомление + freeze agent
Daily budget > 80%warningУведомление
Queue depth > 100warningУведомление
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 года.

Связанные документы