Москва: проверенные б/у ноутбуки с гарантией и проверкой перед оплатой
+7 906 722-94-45

Главная → Статьи → Synthetic monitoring и health checks

Synthetic monitoring и health checks: активная проверка доступности

Как работает synthetic monitoring: активные пробы извне, health/readiness/liveness эндпоинты, отличие от пассивного мониторинга и практические паттерны проверок.

Прямой ответ

Synthetic monitoring — активная проверка доступности системы извне (synthetic monitoring — «сами шлём запросы и проверяем» — synthetic monitoring — метрики — «не ждём трафика, а проверяем» — synthetic monitoring), отличие от пассивного мониторинга (метрики — пассивный — «смотрим на реальный трафик» — метрики — synthetic — активный — «сами генерируем запросы» — synthetic monitoring — «пассивный слеп, если нет трафика» — synthetic monitoring); зачем: раннее обнаружение (synthetic monitoring — «сервис упал — проба не прошла — алерт» — synthetic monitoring — алерты — «до того, как пользователи пожалуются» — synthetic monitoring), проверка без трафика (synthetic monitoring — «ночью нет трафика — пассивный слеп — synthetic проверяет» — synthetic monitoring — метрики — «доступность 24/7» — synthetic monitoring), проверка из разных точек (synthetic monitoring — «пробы из разных регионов» — synthetic monitoring — ёмкость — «как сервис виден извне» — synthetic monitoring), проверка SLO (synthetic monitoring — «доступность/latency извне» — synthetic monitoring — SLO — «внешний взгляд на SLO» — synthetic monitoring); типы проб (synthetic monitoring): (1) HTTP/HTTPS (synthetic monitoring — blackbox exporter (synthetic monitoring — «GET /health — 200» — synthetic monitoring — метрики — «статус + latency» — synthetic monitoring); (2) TCP (synthetic monitoring — «порт открыт» — synthetic monitoring — метрики — «соединение есть» — synthetic monitoring); (3) ICMP (synthetic monitoring — «пинг» — synthetic monitoring — сети — «хост жив» — synthetic monitoring); (4) DNS (synthetic monitoring — «домен резолвится» — synthetic monitoring — сети — «DNS работает» — synthetic monitoring); (5) Многошаговые сценарии (synthetic monitoring — «login → checkout» — synthetic monitoring — performance testing — «критический путь работает» — synthetic monitoring); health checks (health checks — эндпоинты для проверок (health checks — «/health, /ready, /live» — health checks — k8s — «внутренние пробы» — health checks — подробнее в health checks); когда synthetic monitoring: критические сервисы (synthetic monitoring — «доступность критична» — synthetic monitoring — SLO — «SLO по доступности» — synthetic monitoring), низкий трафик (synthetic monitoring — «ночью нет трафика» — synthetic monitoring — метрики — «пассивный слеп» — synthetic monitoring), внешние зависимости (synthetic monitoring — «внешний API доступен» — synthetic monitoring — retry — «зависимость жива» — synthetic monitoring); когда НЕ: прототип (synthetic monitoring — «прототип — оверхед» — synthetic monitoring — техдолг), высокий трафик (synthetic monitoring — «реальный трафик покрывает» — synthetic monitoring — метрики — «пассивный достаточно» — synthetic monitoring); антипаттерны: health check с логикой (health checks — «/health делает тяжёлую работу» — health checks — «health должен быть лёгким» — health checks — техдолг), synthetic без алертов (synthetic monitoring — «пробы есть, алертов нет» — synthetic monitoring — алерты — «проба упала — никто не знает» — алерты), пробы только из одной точки (synthetic monitoring — «одна точка — региональные сбои не видны» — synthetic monitoring — ёмкость — несколько точек — synthetic monitoring).

Практика: synthetic monitoring с blackbox exporter

Blackbox exporter (synthetic monitoring — HTTP-проба (synthetic monitoring — - job_name: 'blackbox' metrics_path: /probe params: module: [http_2xx] static_configs: - targets: [''] (prometheus — «проба /health каждые 15 с» — prometheus — synthetic monitoring); Метрики проб (метрики: probe_success (synthetic monitoring — «1 — успешно, 0 — провал» — synthetic monitoring — метрики), probe_duration_seconds (synthetic monitoring — «latency пробы» — synthetic monitoring — метрики), probe_http_status_code (synthetic monitoring — «статус ответа» — synthetic monitoring — метрики); Алерт (алерты: - alert: EndpointDown expr: probe_success == 0 for: 2m labels: severity: critical (алерты — «проба не прошла 2 мин — алерт» — алерты — incident — «сервис недоступен» — алерты); Health эндпоинт (health checks — лёгкий (health checks — @app.get("/health") def health(): return {"status": "ok"} (health checks — «лёгкий, без логики» — health checks — техдолг); Многошаговая проба (synthetic monitoring — критический путь (synthetic monitoring — «login → checkout» — synthetic monitoring — performance testing — «критический путь работает» — synthetic monitoring).

Практический сценарий: synthetic monitoring для платёжного API

Контекст: платёжный API (ёмкость), боль: ночью мало трафика — пассивный мониторинг слеп (synthetic monitoring — «ночью нет трафика» — synthetic monitoring — метрики — «сбой заметили утром» — incident); решение — synthetic monitoring: (1) blackbox exporter (synthetic monitoring — HTTP-проба (synthetic monitoring — - job_name: 'blackbox' metrics_path: /probe params: module: [http_2xx] static_configs: - targets: ['', ''] (prometheus — «пробы /health и /payments» — prometheus — synthetic monitoring); (2) метрики (метрики — probe_success, probe_duration_seconds (метрики — synthetic monitoring — «доступность + latency извне» — synthetic monitoring); (3) алерты (алерты — - alert: EndpointDown expr: probe_success == 0 for: 2m labels: severity: critical (алерты — «проба не прошла — алерт» — алерты — incident); (4) многошаговая проба (synthetic monitoring — критический путь (synthetic monitoring — «login → создать платёж» — synthetic monitoring — performance testing — «критический путь работает» — synthetic monitoring); (5) несколько точек (synthetic monitoring — пробы из разных регионов (synthetic monitoring — «как API виден извне» — synthetic monitoring — ёмкость — «региональные сбои видны» — synthetic monitoring); (6) health эндпоинт (health checks — лёгкий (health checks — «/health без логики» — health checks — техдолг); результат: сбои видны сразу (synthetic monitoring — «проба не прошла — алерт» — synthetic monitoring — алерты — не утром (synthetic monitoring — «сбой ночью — алерт ночью» — incident), доступность извне (synthetic monitoring — «внешний взгляд» — synthetic monitoring — SLO — «SLO по доступности» — synthetic monitoring), критический путь (synthetic monitoring — «login → платёж работает» — synthetic monitoring — performance testing); вывод: synthetic monitoring решили задачу (сбои видны без трафика — synthetic monitoring — ADR — «synthetic без алертов» — антипаттерн — алерты — техдолг).

FAQ

Synthetic monitoring против пассивного мониторинга — в чём разница и когда что? Synthetic monitoring (synthetic monitoring — активный (synthetic monitoring — «сами шлём запросы» — synthetic monitoring — метрики — «проверяем извне» — synthetic monitoring); Пассивный мониторинг (метрики — «смотрим на реальный трафик» — метрики — «метрики из приложения» — метрики — «реальные пользователи» — метрики); разница: synthetic — активный (synthetic monitoring — «сами проверяем» — synthetic monitoring, пассивный — по трафику (метрики — «смотрим на трафик» — метрики); когда synthetic: низкий трафик (synthetic monitoring — «ночью нет трафика» — synthetic monitoring, критические сервисы (synthetic monitoring — «доступность критична» — synthetic monitoring — SLO), когда пассивный: высокий трафик (метрики — «реальный трафик покрывает» — метрики); «synthetic вместо пассивного» — нет (разные взгляды — synthetic monitoring — метрики — оба нужны — ADR — техдолг).

Какие типы проб бывают в synthetic monitoring? HTTP/HTTPS (synthetic monitoring — blackbox exporter (synthetic monitoring — «GET /health — 200» — synthetic monitoring — метрики — «статус + latency» — synthetic monitoring); TCP (synthetic monitoring — «порт открыт» — synthetic monitoring — метрики); ICMP (synthetic monitoring — «пинг» — synthetic monitoring — сети); DNS (synthetic monitoring — «домен резолвится» — synthetic monitoring — сети); Многошаговые (synthetic monitoring — «login → checkout» — synthetic monitoring — performance testing — «критический путь» — synthetic monitoring); «только HTTP» — мало (DNS/TCP/критический путь — тоже важны — synthetic monitoring — сети — ADR — техдолг).

Как правильно делать health check эндпоинт? Правильно: лёгкий (health checks — «/health без тяжёлой логики» — health checks — «быстрый ответ» — health checks — техдолг), без внешних вызовов (health checks — «liveness не проверяет БД» — health checks — «иначе каскадные перезапуски» — health checks — incident), разделение live/ready (health checks — «liveness — жив, readiness — готов» — health checks — k8s — подробнее в health checks); Неправильно: тяжёлая логика (health checks — «/health делает запросы в БД/внешние API» — health checks — «медленный health — ложные провалы» — health checks — incident), liveness с проверкой зависимостей (health checks — «БД упала — liveness упал — под перезапустился» — health checks — «каскадные перезапуски» — incident); «health с логикой» — антипаттерн (лёгкий, без внешних вызовов — health checks — ADR — техдолг).

Как избежать ложных срабатываний synthetic мониторинга? Ложные срабатывания (synthetic monitoring — «проба упала, но сервис жив» — synthetic monitoring — алерты — «сеть моргнула — алерт» — алерты); как избежать: несколько проб (алерты — «2 из 3 проб упали — алерт» — алерты — «одна прова — не алерт» — алерты), for в алертах (алерты — «проба не прошла 2 мин» — алерты — «не мгновенно» — алерты), несколько точек (synthetic monitoring — «пробы из разных регионов» — synthetic monitoring — «региональный сбой сети — не алерт» — synthetic monitoring), retry проб (synthetic monitoring — «провал — повтор» — synthetic monitoring — retry — «одиночный провал — не алерт» — synthetic monitoring); «алерт на один провал» — антипаттерн (шум — алерты — несколько проб + for — алерты — ADR — техдолг).

Источники: Prometheus blackbox exporter, Kubernetes probes docs, Prometheus alerting — ссылки в шапке.