В одном проекте readiness probe проверяла 5 внешних API — это приводило к частым ложным срабатываниям. Мы оптимизировали до 2 критичных и добавили таймаут 1 секунда. Количество ложных исключений снизилось в 3 раза. Такие сценарии — норма без грамотных health check эндпоинтов. Когда балансировщик продолжает слать трафик на сломанный инстанс, пользователи видят ошибки, падает LCP и растёт отток. Чтобы этого избежать, нужны health check эндпоинты. Наш опыт — более 7 лет, 50+ проектов с полной отказоустойчивостью.
Health check эндпоинты — это HTTP-ручки, которые сообщают инфраструктуре о состоянии приложения. Балансировщики нагрузки, Kubernetes, мониторинговые системы опрашивают их, чтобы исключать нездоровые инстансы из ротации. Компании, внедрившие health check, снижают количество инцидентов на 40% и достигают 99.9% uptime.
Почему важны health check?
Health check — это первая линия обороны от каскадных отказов. Liveness probe перезапускает зависший контейнер, readiness probe исключает неготовую ноду из балансировки. Вместе они предотвращают потерю трафика и данных. Сравнение: без health check средний MTTR (время восстановления) 20 минут, с ними — 5 минут, в 4 раза быстрее.
Как отличить liveness от readiness?
| Характеристика | Liveness | Readiness |
|---|---|---|
| Цель | Проверить, жив ли процесс | Проверить, готов ли принимать трафик |
| Действие при ошибке | Перезапуск контейнера | Исключение из балансировки |
| Должна ли быть лёгкой? | Да, всегда отвечать 200 | Может проверять зависимости |
| Типичные проверки | /health/live возвращает 'ok' | БД, Redis, внешние API |
| Пример ответа | {"status":"ok"} | {"status":"healthy","checks":{...}} |
Liveness probe должна быть максимально лёгкой — только проверка, что процесс жив. Если она начнёт проверять БД, а БД временно недоступна, Kubernetes перезапустит контейнер, хотя приложение в порядке.
Readiness probe — глубже. Она проверяет критические зависимости: базу данных, кэш, очереди. Если хотя бы одна не отвечает — инстанс исключается из балансировки, трафик не теряется.
Что проверять в readiness probe?
Обязательный минимум:
- База данных. Выполните лёгкий запрос, например SELECT 1 в SQL или ping в MongoDB. Проверка должна быть быстрой (< 200 мс).
- Кэш (Redis/Memcached). Выполните SET key value с коротким TTL и прочитайте его. Это покажет, что кэш работает.
- Внешние сервисы — только критичные. Если приложение не может работать без API платежей — проверяйте его. Если сервис необязателен — не проверяйте, иначе временная недоступность выведет ноду из ротации.
В одном проекте readiness probe проверяла 5 внешних API — это приводило к частым ложным срабатываниям. Мы оптимизировали до 2 критичных и добавили таймаут 1 секунда. Количество ложных исключений снизилось в 3 раза.
Примеры реализации на Laravel и Node.js
// routes/api.php Route::get('/health/live', fn() => response()->json(['status' => 'ok'])); Route::get('/health/ready', function () { $checks = []; // Database try { DB::connection()->getPdo(); $checks['database'] = 'ok'; } catch (\Throwable $e) { $checks['database'] = 'error: ' . $e->getMessage(); } // Redis try { Cache::store('redis')->set('health-check', 1, 5); $checks['cache'] = 'ok'; } catch (\Throwable $e) { $checks['cache'] = 'error: ' . $e->getMessage(); } $healthy = !str_contains(implode('', $checks), 'error'); $status = $healthy ? 200 : 503; return response()->json([ 'status' => $healthy ? 'healthy' : 'unhealthy', 'checks' => $checks, ], $status); }); app.get('/health/live', (_req, res) => { res.json({ status: 'ok', uptime: process.uptime() }); }); app.get('/health/ready', async (_req, res) => { const checks: Record<string, string> = {}; try { await db.query('SELECT 1'); checks.database = 'ok'; } catch (e) { checks.database = `error: ${e}`; } try { await redis.ping(); checks.redis = 'ok'; } catch (e) { checks.redis = `error: ${e}`; } const healthy = Object.values(checks).every(v => v === 'ok'); res.status(healthy ? 200 : 503).json({ status: healthy ? 'healthy' : 'unhealthy', checks }); }); Как интегрировать с Kubernetes?
Согласно Kubernetes documentation, liveness probe должна быть лёгкой. Пример манифеста:
containers: - name: app livenessProbe: httpGet: path: /health/live port: 8080 initialDelaySeconds: 30 periodSeconds: 10 failureThreshold: 3 readinessProbe: httpGet: path: /health/ready port: 8080 initialDelaySeconds: 10 periodSeconds: 5 failureThreshold: 3 Параметры initialDelaySeconds дают время приложению запуститься, periodSeconds — интервал опроса, failureThreshold — количество ошибок до срабатывания. Для liveness ставьте больше начальную задержку, чтобы избежать перезапуска во время долгого старта.
Типичные ошибки при настройке probes
| Ошибка | Последствие | Решение |
|---|---|---|
| Liveness проверяет БД | Перезапуск при временной недоступности БД | Используйте только лёгкую проверку процесса |
| Слишком малый initialDelaySeconds | Контейнер перезапускается до готовности | Увеличьте до 30+ секунд |
| Readiness проверяет необязательные сервисы | Ложные исключения, потеря трафика | Оставьте только критичные зависимости |
| Отсутствует таймаут | Probe зависает, контейнер перезапускается | Установите timeoutSeconds: 3 |
Что входит в настройку health check под ключ
- Написание liveness и readiness эндпоинтов с проверкой БД, Redis, внешних сервисов.
- Конфигурация probes в Kubernetes (YAML-манифесты).
- Интеграция с мониторингом (Prometheus, Grafana, алерты).
- Документация по эндпоинтам и процессу.
- Обучение команды работе с probes.
- Поддержка после внедрения.
Процесс настройки health check под ключ
- Аналитика. Определяем, какие сервисы критичны, какой стек (Laravel, Node.js, Django). Согласовываем архитектуру probes.
- Реализация. Пишем код liveness и readiness эндпоинтов, тестируем локально. Добавляем логирование.
- Деплой. Настраиваем probes в Kubernetes или балансировщике, выкатываем на стейджинг.
- Мониторинг. Подключаем алерты в Prometheus/Grafana при падении health check.
Сроки и стоимость
Базовая настройка (liveness + readiness с БД и Redis) — 0.5–1 день. Полная интеграция с Kubernetes, мониторингом и логированием — 1–2 дня. Стоимость рассчитывается индивидуально под ваш проект. Свяжитесь с нами для консультации и точной оценки.
Закажите настройку health check эндпоинтов под ключ — получите мониторинг и отказоустойчивость за 1–2 дня. Наши инженеры сертифицированы по Kubernetes, а опыт работы с 50+ проектами гарантирует качество. Получите консультацию прямо сейчас.







