junior
Что такое Spring Boot Actuator?
Spring Boot Actuator — модуль Spring Boot, предоставляющий production-ready функции для мониторинга и управления приложением через HTTP-эндпоинты или JMX.
Подключение
Пример
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Основные endpoints
| Endpoint | Описание | По умолчанию |
|---|---|---|
/actuator/health |
Состояние приложения и зависимостей | Включён |
/actuator/info |
Информация о приложении | Включён |
/actuator/metrics |
Список всех метрик | Выключен |
/actuator/prometheus |
Метрики в формате Prometheus | Выключен |
/actuator/env |
Переменные окружения | Выключен |
/actuator/beans |
Все Spring-бины | Выключен |
/actuator/loggers |
Управление уровнями логирования | Выключен |
/actuator/threaddump |
Дамп потоков | Выключен |
/actuator/heapdump |
Дамп кучи (скачиваемый файл) | Выключен |
/actuator/mappings |
Все @RequestMapping |
Выключен |
Конфигурация
Пример
management:
endpoints:
web:
exposure:
include: health, info, metrics, prometheus, loggers, env
base-path: /actuator
endpoint:
health:
show-details: when-authorized # never | when-authorized | always
show-components: always
env:
show-values: when-authorized
# Отдельный порт для actuator (рекомендуется для production)
server:
port: 9090
info:
env:
enabled: true
git:
mode: full
Health Indicators
Spring Boot автоматически регистрирует health indicators для подключённых зависимостей:
| Indicator | Проверяет |
|---|---|
DataSourceHealthIndicator |
Подключение к БД |
RedisHealthIndicator |
Подключение к Redis |
KafkaHealthIndicator |
Подключение к Kafka broker |
ElasticsearchHealthIndicator |
Кластер Elasticsearch |
RabbitHealthIndicator |
Подключение к RabbitMQ |
DiskSpaceHealthIndicator |
Свободное место на диске |
Пример ответа /actuator/health
{
"status": "UP",
"components": {
"db": {
"status": "UP",
"details": {
"database": "PostgreSQL",
"validationQuery": "isValid()"
}
},
"redis": {
"status": "UP",
"details": {
"version": "7.2.4"
}
},
"kafka": {
"status": "UP",
"details": {
"brokerId": "1"
}
},
"diskSpace": {
"status": "UP",
"details": {
"total": 107374182400,
"free": 53687091200,
"threshold": 10485760
}
}
}
}
Кастомный Health Indicator
@Component
public class PaymentGatewayHealthIndicator implements HealthIndicator {
private final PaymentGatewayClient client;
public PaymentGatewayHealthIndicator(PaymentGatewayClient client) {
this.client = client;
}
@Override
public Health health() {
try {
boolean isAvailable = client.ping();
if (isAvailable) {
return Health.up()
.withDetail("provider", "stripe")
.withDetail("responseTime", "45ms")
.build();
} else {
return Health.down()
.withDetail("provider", "stripe")
.withDetail("reason", "Ping failed")
.build();
}
} catch (Exception e) {
return Health.down(e)
.withDetail("provider", "stripe")
.build();
}
}
}
Kubernetes Probes
Spring Boot Actuator автоматически поддерживает Kubernetes health probes:
| Probe | Назначение | Что происходит при fail |
|---|---|---|
| Startup | Приложение запустилось? | Контейнер перезапускается |
| Liveness | Приложение работает? | Контейнер перезапускается |
| Readiness | Приложение готово принимать трафик? | Убирается из Service (перестаёт получать трафик) |
Настройка probes в application.yml и Kubernetes deployment
# application.yml
management:
endpoint:
health:
probes:
enabled: true
group:
liveness:
include: livenessState
readiness:
include: readinessState, db, redis
startup:
include: livenessState
# Kubernetes deployment.yml
spec:
containers:
- name: order-service
livenessProbe:
httpGet:
path: /actuator/health/liveness
port: 9090
initialDelaySeconds: 30
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /actuator/health/readiness
port: 9090
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 3
startupProbe:
httpGet:
path: /actuator/health/startup
port: 9090
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 30
Управление уровнями логирования в runtime
Пример
# Получить текущий уровень логгера
curl http://localhost:9090/actuator/loggers/com.example.service
# Изменить уровень без перезапуска
curl -X POST http://localhost:9090/actuator/loggers/com.example.service \
-H 'Content-Type: application/json' \
-d '{"configuredLevel": "DEBUG"}'
Безопасность Actuator
@Configuration
@EnableWebSecurity
public class ActuatorSecurityConfig {
@Bean
public SecurityFilterChain actuatorFilterChain(HttpSecurity http) throws Exception {
http
.securityMatcher("/actuator/**")
.authorizeHttpRequests(auth -> auth
.requestMatchers("/actuator/health/**").permitAll()
.requestMatchers("/actuator/info").permitAll()
.requestMatchers("/actuator/prometheus").permitAll()
.requestMatchers("/actuator/**").hasRole("ADMIN")
)
.httpBasic(Customizer.withDefaults());
return http.build();
}
}
Важное
- Отдельный порт для Actuator (
management.server.port) — рекомендуемая практика. Позволяет ограничить доступ на уровне сети. - health/liveness не должен зависеть от внешних систем (БД, Redis). Если БД недоступна, приложение не нужно перезапускать — нужно убрать из балансировки (readiness).
- health/readiness должен включать проверки критических зависимостей (БД, кэш), без которых сервис не может обрабатывать запросы.
- Endpoint
/actuator/prometheusдолжен быть доступен для Prometheus, но не для внешних пользователей.
Частые ошибки
- Включение всех endpoints в production (
include: "*"): опасно —heapdumpиenvмогут содержать чувствительные данные. - Liveness probe зависит от БД: при недоступности БД Kubernetes перезапустит все поды, хотя проблема не в приложении.
- Нет отдельного порта для Actuator: actuator endpoints доступны на том же порту, что и бизнес-API.
- Забыть настроить show-details: по умолчанию
/healthвозвращает только{"status":"UP"}без деталей. - Тяжёлые health checks: healthcheck, делающий полный SELECT из БД каждые 5 секунд, создаёт нагрузку. Используйте лёгкие проверки (ping,
isValid()).
Как используется в 2026
- Spring Boot 3.4+ — Actuator endpoints с поддержкой structured logging (JSON) из коробки.
- Actuator + Observation API — все endpoints автоматически инструментируются (метрики + трейсы).
- Graceful shutdown — Actuator интегрируется с lifecycle: при shutdown сервис сначала снимается с readiness, затем дожидает текущие запросы.
- Container-aware health — Actuator понимает, что работает в контейнере, и автоматически адаптирует health groups для Kubernetes.
- Info endpoint — автоматически подтягивает Git commit info, Java version, OS info, Spring Boot version.
На собеседовании: обязательно упомяните разницу между liveness и readiness probes — это очень частый вопрос. Liveness проверяет “живо ли приложение” (не включать внешние зависимости), readiness — “готово ли принимать трафик” (включать БД, Redis). Также покажите знание про отдельный порт для Actuator в production и безопасность endpoints.