Health checks

Тема дорожной карты · Node.js

Health checks (проверки работоспособности) — это HTTP-эндпоинты, открываемые серверным приложением Node.js, которые позволяют оркестраторам, балансировщикам нагрузки и системам мониторинга определять, живо ли приложение и готово ли оно обслуживать трафик. Liveness-проба (как правило, GET /health или GET /healthz) возвращает ответ 200 OK, пока работает цикл событий Node.js, а readiness-проба возвращает 200 только после того, как приложение завершило запуск, подключилось к базе данных и прогрело необходимые кэши — в противном случае возвращается 503 Service Unavailable. В развёртывании Kubernetes настройка livenessProbe и readinessProbe для контейнера Node.js гарантирует автоматический перезапуск неработающих подов и исключает маршрутизацию трафика к ещё не готовым подам. Эндпоинты health check в Express.js обычно реализуются как простые обработчики маршрутов, проверяющие process.env.NODE_ENV, доступность базы данных через лёгкий запрос SELECT 1 и, опционально, состояние downstream-сервисов. Npm-пакеты @godaddy/terminus и lightship предоставляют структурированные фреймворки для health check, объединяющие корректное завершение работы с пробами Kubernetes, что упрощает реализацию production-grade проверок работоспособности в любом приложении Node.js.

Как это работает

Health checks имеет три столпа в Node: метрики (Prometheus-style counters/histograms через prom-client), логи (структурированный JSON через pino/winston, отправляется в Loki/Elastic), distributed tracing (OpenTelemetry SDK + exporter в Jaeger/Tempo). Node имеет встроенные performance hooks (perf_hooks), HTTP request/response события, async-local-storage (node:async_hooks) для request-scoped контекста. Всегда логируйте trace ID на каждую строку для корреляции.

Когда применять

Структурированное логирование — с первого дня; pino — современный дефолт (быстрее winston, JSON-first). Prometheus-эндпойнт (/metrics) — на любой сервис с реальным трафиком. OpenTelemetry tracing — когда сервисов больше одного или хотите дебажить latency через границы. Алёрты на event-loop lag, HTTP error rate, рост памяти — ловят баги, на которые "приложение работает нормально".

Типичные ошибки

Ловушки Health checks: console.log повсюду в production (без структуры, дорого grep-ать, без уровней); логирование секретов (карты, токены); high-cardinality метрики (request-id убивает Prometheus); tracing без sampling (трейсы перегружают backend); нет политики retention для логов (диск забивается, история теряется). Observability — фича, не afterthought.

Связанные понятия

Полезные ресурсы