Skip to content

Мониторинг и health checks

можно. предоставляет endpoints для проверки здоровья, метрики Prometheus и распределённую трассировку через Spring Boot Actuator и Micrometer.

Health Check

Endpoint

GET /actuator/health

Ответ:

json
{
  "status": "UP",
  "components": {
    "db": {"status": "UP"},
    "diskSpace": {"status": "UP"}
  }
}

Статусы:

  • UP — компонент работает нормально
  • DOWN — компонент недоступен

Использование в Docker

yaml
healthcheck:
  test: ["CMD-SHELL", "wget -qO- http://localhost:8080/actuator/health | grep -q UP"]
  interval: 15s
  timeout: 5s
  retries: 3
  start_period: 60s

Prometheus-метрики

Endpoint

GET /actuator/prometheus

Метрики доступны в формате Prometheus и включают:

КатегорияПримеры метрик
HTTP-запросыhttp_server_requests_seconds_count, http_server_requests_seconds_sum
JVMjvm_memory_used_bytes, jvm_gc_pause_seconds, jvm_threads_live
HikariCPhikaricp_connections_active, hikaricp_connections_pending
Cachecache_gets_total, cache_puts_total, cache_evictions_total

Настройка Prometheus

yaml
scrape_configs:
  - job_name: 'mozhno'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['mozhno:8080']

Key метрики для мониторинга

МетрикаЧто отслеживать
http_server_requests_seconds_countОбщее количество запросов
http_server_requests_seconds_sum{status="5.."}Ошибки сервера
jvm_memory_used_bytes{area="heap"}Использование heap-памяти
hikaricp_connections_activeАктивные соединения с БД (должно быть < maxSize)
hikaricp_connections_pendingОчередь на соединение (должна быть ~0)

Распределённая трассировка

можно. использует Micrometer Tracing с Brave. Каждый запрос получает traceId и spanId, которые передаются в заголовках:

ЗаголовокОписание
X-B3-TraceIdИдентификатор трассировки
X-B3-SpanIdИдентификатор спана

traceId также попадает в логи через MDC (ключ traceId).

Настройка вероятности сэмплирования:

ПеременнаяПо умолчаниюОписание
MANAGEMENT_TRACING_SAMPLING_PROBABILITY1.0Доля трассируемых запросов (0.0–1.0)

Логирование

Формат логов: JSON (через Logstash Logback Encoder). Структура записи:

json
{
  "@timestamp": "2026-06-21T13:41:05.123Z",
  "level": "INFO",
  "logger": "dev.mozhno.flags.FlagService",
  "message": "Flag updated: new-checkout",
  "traceId": "abc123",
  "service": "feature-flags"
}

Чувствительные данные (JWT, API-ключи, пароли) автоматически маскируются через SensitiveDataMasker.

Важные переменные окружения

ПеременнаяПо умолчаниюОписание
LOGGING_LEVEL_DEV_MOZHNOINFOУровень логирования приложения
LOGGING_LEVEL_ROOTINFOКорневой уровень логирования
MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDEhealth,info,metrics,prometheusСписок доступных actuator-эндпоинтов
MANAGEMENT_TRACING_SAMPLING_PROBABILITY1.0Доля трассируемых запросов

Что дальше?

Released under the AGPL v3.0 License.