Health checks агентів

Перевіряють, чи коректно працюють агенти та tools.
На цій сторінці
  1. Ідея за 30 секунд
  2. Основна проблема
  3. Як це працює
  4. Типові production-метрики health checks
  5. Як читати health-layer
  6. Коли використовувати
  7. Приклад реалізації
  8. Investigation
  9. Типові помилки
  10. Є тільки ping/check доступності сервісу
  11. Немає перевірок зовнішніх залежностей
  12. Немає розбиття за workflow і release
  13. Немає алертів на деградацію health score
  14. Висококардинальні labels
  15. Самоперевірка
  16. FAQ
  17. Пов'язані сторінки

Ідея за 30 секунд

Health checks для AI-агентів показують, чи система реально готова до трафіку саме зараз.

Вони допомагають виявити деградацію до інциденту: повільні tools, timeout-и, проблеми з чергами або збої в LLM-шарі.

Без health checks часто видно тільки факт збою, але не ранні сигнали перед ним.

Основна проблема

Система може формально бути "up", але фактично працювати нестабільно.

API відповідає, run-и запускаються, але частина кроків уже деградує: росте timeout rate, падає success rate, зростає queue time. Без health checks це зазвичай помітно тільки після каскадного збою.

Далі розберемо, як читати ці сигнали і знаходити компонент, який першим входить у деградацію.

У production це часто виглядає так:

  • зовні все "працює", але p95 latency уже виходить за SLO;
  • один tool частіше повертає timeout, але проблема ще неочевидна;
  • synthetic run починає падати раніше за основний трафік;
  • команда реагує вже після часткового збою.

Саме тому health-layer варто моніторити окремо, а не лише через загальні run-метрики.

Як це працює

Health checks зазвичай будуються на двох рівнях:

  • component checks (tool_available, llm_reachable, queue_ok, db_ok);
  • end-to-end checks (synthetic_run_ok, critical_workflow_ok).

Ці сигнали відповідають на питання «чи система здорова прямо зараз». Логи й трейсинг потрібні, щоб пояснити, чому конкретна перевірка впала.

Up ≠ healthy. Система може бути доступною, але вже втрачати здатність виконувати задачі.

Health checks — це найраніший сигнал проблеми у системі. Вони з'являються раніше, ніж деградація стає помітною в latency або помилках.

Падіння synthetic_run_success_rate зазвичай передує росту timeout_rate і деградації p95 latency.

Типові production-метрики health checks

МетрикаЩо показуєНавіщо потрібна
health_check_pass_rateчастка успішних health checksшвидка оцінка стану системи
health_check_latency_p95час виконання перевірокранній сигнал деградації залежностей
tool_check_latency_p95затримка перевірок конкретних toolsлокалізація повільного tool-layer
synthetic_run_success_rateуспішність synthetic runконтроль реального E2E-сценарію
degraded_component_countскільки компонентів у стані деградаціїоцінка масштабу проблеми
timeout_rateчастка timeout у перевірках і runранній тригер нестабільності
queue_time_p95скільки run чекає у черзісигнал браку capacity
health_scoreагрегований індекс стану (0..1)простий сигнал для алертів і status page

health_score зазвичай рахується на рівні дашборду або health-сервісу як агрегат із кількох checks, а не як "магічна" одна метрика.

Щоб health-метрики були корисними, їх зазвичай сегментують за release, region, workflow і типом компонента.

Важливо: не додавай у labels висококардинальні поля (run_id, request_id, user_id), інакше сховище метрик швидко перевантажиться.

Як читати health-layer

Що перевіряється → що деградує → який компонент ламає workflow. Це три рівні, які завжди потрібно дивитися разом.

Важливо дивитися на тренди у часі і різницю між релізами, а не на одиничне падіння однієї перевірки.

Далі дивимось на комбінації сигналів:

  • health_check_pass_rate ↓ + timeout_rate ↑ → система входить у нестабільний режим;
  • synthetic_run_success_rate ↓ + degraded_component_count ↑ → проблема вже впливає на критичний workflow;
  • queue_time_p95 ↑ + run_count ↑ → бракує capacity, потрібне масштабування;
  • health_score ↓ + error_rate ↑ → високий ризик інциденту в найближчий час;
  • tool_check_latency_p95 ↑ + synthetic_run_success_rate ↓ → bottleneck у зовнішньому tool-layer.

Коли використовувати

Повний набір health checks не завжди потрібен.

Для раннього прототипу інколи достатньо базової перевірки доступності API.

Але детальні health checks стають критичними, коли:

  • система вже в production;
  • є SLO/SLA по стабільності;
  • агент залежить від кількох зовнішніх tools або черг;
  • потрібні ранні алерти до того, як почнеться масовий збій.

Приклад реалізації

Нижче — спрощений приклад health-check циклу в стилі Prometheus. Приклад показує базовий підхід: перевірки компонентів, synthetic run і агрегований health score.

PYTHON
import time
from dataclasses import dataclass
from prometheus_client import Counter, Gauge, Histogram

# perf_counter() використовується для точних монотонних вимірювань latency
HEALTH_CHECK_TOTAL = Counter(
    "agent_health_check_total",
    "Total health checks by check name and status",
    ["check", "status", "release"],
)

HEALTH_CHECK_LATENCY_MS = Histogram(
    "agent_health_check_latency_ms",
    "Health check latency in milliseconds",
    ["check", "release"],
    buckets=(10, 20, 50, 100, 250, 500, 1000, 2000),
)

SYNTHETIC_RUN_TOTAL = Counter(
    "agent_synthetic_run_total",
    "Total synthetic runs by status",
    ["status", "release"],
)

DEGRADED_COMPONENT_TOTAL = Counter(
    "agent_degraded_component_total",
    "Total degraded component detections",
    ["component", "reason", "release"],
)

HEALTH_SCORE = Gauge(
    "agent_health_score",
    "Aggregated health score in range 0..1",
    ["release"],
)


@dataclass
class CheckResult:
    ok: bool
    reason: str = "ok"


def run_health_checks(checks, run_synthetic, release="2026-03-22"):
    total = len(checks)
    failed = 0

    for check_name, check_fn in checks.items():
        started_at = time.perf_counter()
        status = "error"  # default for any failure path
        try:
            result = check_fn()  # -> CheckResult
            status = "ok" if result.ok else "fail"
            if not result.ok:
                failed += 1
                DEGRADED_COMPONENT_TOTAL.labels(
                    component=check_name,
                    reason=result.reason,
                    release=release,
                ).inc()
        except Exception as error:
            failed += 1
            DEGRADED_COMPONENT_TOTAL.labels(
                component=check_name,
                reason=type(error).__name__,
                release=release,
            ).inc()
        finally:
            HEALTH_CHECK_TOTAL.labels(check=check_name, status=status, release=release).inc()
            HEALTH_CHECK_LATENCY_MS.labels(check=check_name, release=release).observe(
                (time.perf_counter() - started_at) * 1000
            )

    try:
        synthetic_ok = run_synthetic()
        SYNTHETIC_RUN_TOTAL.labels(
            status="ok" if synthetic_ok else "fail",
            release=release,
        ).inc()
        if not synthetic_ok:
            failed += 1
    except Exception:
        SYNTHETIC_RUN_TOTAL.labels(status="error", release=release).inc()
        failed += 1

    # 1.0 = усі перевірки пройдені, 0.0 = усе впало
    # +1 для synthetic run
    denominator = total + 1
    health_score = max(0.0, 1.0 - (failed / max(1, denominator)))
    HEALTH_SCORE.labels(release=release).set(health_score)
    return health_score

Ось як health-метрики виглядають у реальному дашборді:

Segmentpass_ratesynthetic_successhealth_scoreСтатус
core workflow98.7%99.1%0.97ok
research workflow93.2%89.4%0.82warning
tool-heavy workflow87.1%80.6%0.74critical: incident risk

Investigation

Коли спрацьовує health-алерт:

  1. знайти check або workflow з деградацією;
  2. подивитись проблемні runs у трейсингу;
  3. перевірити в логах timeout, stop_reason і tool failures;
  4. знайти root cause (tool, LLM, queue, routing, release regression).

Типові помилки

Навіть коли health checks уже додані, вони часто не дають користі через типові помилки нижче.

Є тільки ping/check доступності сервісу

Доступність API не гарантує, що агентний workflow реально працює. Без synthetic run легко пропустити приховану деградацію.

Немає перевірок зовнішніх залежностей

Якщо tools, черги або БД не входять у health checks, система може виглядати "здоровою" до першого інциденту. У такій ситуації складно швидко локалізувати збій інструмента.

Немає розбиття за workflow і release

Без цього важко зрозуміти, який саме реліз або сценарій погіршив стан системи.

Немає алертів на деградацію health score

Без алертів health checks стають пасивною телеметрією. Через це легко пропустити ранні сигнали хаосу мультиагентної системи.

Висококардинальні labels

Додавання run_id, request_id або session_id у labels швидко перевантажує бекенд метрик. Краще тримати ці дані в логах і трейсингу.

Самоперевірка

Нижче — короткий checklist базових health checks перед релізом.

Прогрес: 0/9

⚠ Бракує базової observability

Систему буде складно дебажити в production. Почніть з run_id, structured logs і tracing tool calls.

FAQ

Q: Чим health checks відрізняються від звичайних метрик?
A: Метрики показують тренд, а health checks дають швидку відповідь "система зараз готова чи ні" для конкретних сценаріїв.

Q: Який мінімум health checks потрібен на старті?
A: Почни з перевірок llm_reachable, tool_available, queue_ok і одного synthetic run для критичного workflow.

Q: Чому synthetic run такий важливий?
A: Бо він перевіряє цілісний шлях виконання, а не окремий компонент. Саме це найкраще показує реальний production-стан.

Q: Коли health score падає, а API ще відповідає — це вже інцидент?
A: Це рання деградація. Потрібно запускати investigation одразу, поки проблема не стала масовим збоєм.

Пов'язані сторінки

Далі за темою:

⏱️ 7 хв читанняОновлено 22 березня 2026 р.Складність: ★★★
Інтегровано: продакшен-контрольOnceOnly
Додай guardrails до агентів з tool-calling
Зашип цей патерн з governance:
  • Бюджетами (кроки / ліміти витрат)
  • Дозволами на інструменти (allowlist / blocklist)
  • Kill switch та аварійна зупинка
  • Ідемпотентність і dedupe
  • Audit logs та трасування
Інтегрована згадка: OnceOnly — контрольний шар для продакшен агент-систем.

Автор

Микола — інженер, який будує інфраструктуру для продакшн AI-агентів.

Фокус: патерни агентів, режими відмов, контроль рантайму та надійність систем.

🔗 GitHub: https://github.com/mykolademyanov


Редакційна примітка

Ця документація підготовлена з допомогою AI, із людською редакторською відповідальністю за точність, ясність і продакшн-релевантність.

Контент базується на реальних відмовах, постмортемах та операційних інцидентах у розгорнутих AI-агентних системах.