[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-nablyudaemost-chto-takoe-spring-boot-actuator":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},767,"chto-takoe-spring-boot-actuator",20,"nablyudaemost","Наблюдаемость","📊","Что такое Spring Boot Actuator?","Spring Boot Actuator — модуль Spring Boot, предоставляющий production-ready функции для мониторинга и управления приложением через HTTP-эндпоинты или JMX.\n\n### Подключение\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>org.springframework.boot\u003C\u002FgroupId>\n    \u003CartifactId>spring-boot-starter-actuator\u003C\u002FartifactId>\n\u003C\u002Fdependency>\n```\n\n### Основные endpoints\n\n| Endpoint | Описание | По умолчанию |\n|----------|----------|-------------|\n| `\u002Factuator\u002Fhealth` | Состояние приложения и зависимостей | Включён |\n| `\u002Factuator\u002Finfo` | Информация о приложении | Включён |\n| `\u002Factuator\u002Fmetrics` | Список всех метрик | Выключен |\n| `\u002Factuator\u002Fprometheus` | Метрики в формате Prometheus | Выключен |\n| `\u002Factuator\u002Fenv` | Переменные окружения | Выключен |\n| `\u002Factuator\u002Fbeans` | Все Spring-бины | Выключен |\n| `\u002Factuator\u002Floggers` | Управление уровнями логирования | Выключен |\n| `\u002Factuator\u002Fthreaddump` | Дамп потоков | Выключен |\n| `\u002Factuator\u002Fheapdump` | Дамп кучи (скачиваемый файл) | Выключен |\n| `\u002Factuator\u002Fmappings` | Все `@RequestMapping` | Выключен |\n\n### Конфигурация\n\n```yaml\nmanagement:\n  endpoints:\n    web:\n      exposure:\n        include: health, info, metrics, prometheus, loggers, env\n      base-path: \u002Factuator\n  endpoint:\n    health:\n      show-details: when-authorized  # never | when-authorized | always\n      show-components: always\n    env:\n      show-values: when-authorized\n\n  # Отдельный порт для actuator (рекомендуется для production)\n  server:\n    port: 9090\n\n  info:\n    env:\n      enabled: true\n    git:\n      mode: full\n```\n\n### Health Indicators\n\nSpring Boot автоматически регистрирует health indicators для подключённых зависимостей:\n\n| Indicator | Проверяет |\n|-----------|----------|\n| `DataSourceHealthIndicator` | Подключение к БД |\n| `RedisHealthIndicator` | Подключение к Redis |\n| `KafkaHealthIndicator` | Подключение к Kafka broker |\n| `ElasticsearchHealthIndicator` | Кластер Elasticsearch |\n| `RabbitHealthIndicator` | Подключение к RabbitMQ |\n| `DiskSpaceHealthIndicator` | Свободное место на диске |\n\n\u003Cdetails>\u003Csummary>Пример ответа \u002Factuator\u002Fhealth\u003C\u002Fsummary>\n\n```json\n{\n  \"status\": \"UP\",\n  \"components\": {\n    \"db\": {\n      \"status\": \"UP\",\n      \"details\": {\n        \"database\": \"PostgreSQL\",\n        \"validationQuery\": \"isValid()\"\n      }\n    },\n    \"redis\": {\n      \"status\": \"UP\",\n      \"details\": {\n        \"version\": \"7.2.4\"\n      }\n    },\n    \"kafka\": {\n      \"status\": \"UP\",\n      \"details\": {\n        \"brokerId\": \"1\"\n      }\n    },\n    \"diskSpace\": {\n      \"status\": \"UP\",\n      \"details\": {\n        \"total\": 107374182400,\n        \"free\": 53687091200,\n        \"threshold\": 10485760\n      }\n    }\n  }\n}\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>Кастомный Health Indicator\u003C\u002Fsummary>\n\n```java\n@Component\npublic class PaymentGatewayHealthIndicator implements HealthIndicator {\n\n    private final PaymentGatewayClient client;\n\n    public PaymentGatewayHealthIndicator(PaymentGatewayClient client) {\n        this.client = client;\n    }\n\n    @Override\n    public Health health() {\n        try {\n            boolean isAvailable = client.ping();\n            if (isAvailable) {\n                return Health.up()\n                    .withDetail(\"provider\", \"stripe\")\n                    .withDetail(\"responseTime\", \"45ms\")\n                    .build();\n            } else {\n                return Health.down()\n                    .withDetail(\"provider\", \"stripe\")\n                    .withDetail(\"reason\", \"Ping failed\")\n                    .build();\n            }\n        } catch (Exception e) {\n            return Health.down(e)\n                .withDetail(\"provider\", \"stripe\")\n                .build();\n        }\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Kubernetes Probes\n\nSpring Boot Actuator автоматически поддерживает Kubernetes health probes:\n\n| Probe | Назначение | Что происходит при fail |\n|-------|-----------|----------------------|\n| Startup | Приложение запустилось? | Контейнер перезапускается |\n| Liveness | Приложение работает? | Контейнер перезапускается |\n| Readiness | Приложение готово принимать трафик? | Убирается из Service (перестаёт получать трафик) |\n\n\u003Cdetails>\u003Csummary>Настройка probes в application.yml и Kubernetes deployment\u003C\u002Fsummary>\n\n```yaml\n# application.yml\nmanagement:\n  endpoint:\n    health:\n      probes:\n        enabled: true\n      group:\n        liveness:\n          include: livenessState\n        readiness:\n          include: readinessState, db, redis\n        startup:\n          include: livenessState\n```\n\n```yaml\n# Kubernetes deployment.yml\nspec:\n  containers:\n    - name: order-service\n      livenessProbe:\n        httpGet:\n          path: \u002Factuator\u002Fhealth\u002Fliveness\n          port: 9090\n        initialDelaySeconds: 30\n        periodSeconds: 10\n        failureThreshold: 3\n      readinessProbe:\n        httpGet:\n          path: \u002Factuator\u002Fhealth\u002Freadiness\n          port: 9090\n        initialDelaySeconds: 10\n        periodSeconds: 5\n        failureThreshold: 3\n      startupProbe:\n        httpGet:\n          path: \u002Factuator\u002Fhealth\u002Fstartup\n          port: 9090\n        initialDelaySeconds: 5\n        periodSeconds: 5\n        failureThreshold: 30\n```\n\n\u003C\u002Fdetails>\n\n### Управление уровнями логирования в runtime\n\n```bash\n# Получить текущий уровень логгера\ncurl http:\u002F\u002Flocalhost:9090\u002Factuator\u002Floggers\u002Fcom.example.service\n\n# Изменить уровень без перезапуска\ncurl -X POST http:\u002F\u002Flocalhost:9090\u002Factuator\u002Floggers\u002Fcom.example.service \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"configuredLevel\": \"DEBUG\"}'\n```\n\n\u003Cdetails>\u003Csummary>Безопасность Actuator\u003C\u002Fsummary>\n\n```java\n@Configuration\n@EnableWebSecurity\npublic class ActuatorSecurityConfig {\n\n    @Bean\n    public SecurityFilterChain actuatorFilterChain(HttpSecurity http) throws Exception {\n        http\n            .securityMatcher(\"\u002Factuator\u002F**\")\n            .authorizeHttpRequests(auth -> auth\n                .requestMatchers(\"\u002Factuator\u002Fhealth\u002F**\").permitAll()\n                .requestMatchers(\"\u002Factuator\u002Finfo\").permitAll()\n                .requestMatchers(\"\u002Factuator\u002Fprometheus\").permitAll()\n                .requestMatchers(\"\u002Factuator\u002F**\").hasRole(\"ADMIN\")\n            )\n            .httpBasic(Customizer.withDefaults());\n        return http.build();\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Важное\n- **Отдельный порт** для Actuator (`management.server.port`) — рекомендуемая практика. Позволяет ограничить доступ на уровне сети.\n- **health\u002Fliveness** не должен зависеть от внешних систем (БД, Redis). Если БД недоступна, приложение не нужно перезапускать — нужно убрать из балансировки (readiness).\n- **health\u002Freadiness** должен включать проверки критических зависимостей (БД, кэш), без которых сервис не может обрабатывать запросы.\n- Endpoint `\u002Factuator\u002Fprometheus` должен быть доступен для Prometheus, но **не для внешних пользователей**.\n\n### Частые ошибки\n- **Включение всех endpoints в production** (`include: \"*\"`): опасно — `heapdump` и `env` могут содержать чувствительные данные.\n- **Liveness probe зависит от БД**: при недоступности БД Kubernetes перезапустит все поды, хотя проблема не в приложении.\n- **Нет отдельного порта для Actuator**: actuator endpoints доступны на том же порту, что и бизнес-API.\n- **Забыть настроить show-details**: по умолчанию `\u002Fhealth` возвращает только `{\"status\":\"UP\"}` без деталей.\n- **Тяжёлые health checks**: healthcheck, делающий полный SELECT из БД каждые 5 секунд, создаёт нагрузку. Используйте лёгкие проверки (ping, `isValid()`).\n\n### Как используется в 2026\n- **Spring Boot 3.4+** — Actuator endpoints с поддержкой structured logging (JSON) из коробки.\n- **Actuator + Observation API** — все endpoints автоматически инструментируются (метрики + трейсы).\n- **Graceful shutdown** — Actuator интегрируется с lifecycle: при shutdown сервис сначала снимается с readiness, затем дожидает текущие запросы.\n- **Container-aware health** — Actuator понимает, что работает в контейнере, и автоматически адаптирует health groups для Kubernetes.\n- **Info endpoint** — автоматически подтягивает Git commit info, Java version, OS info, Spring Boot version.\n\n> **На собеседовании:** обязательно упомяните разницу между liveness и readiness probes — это очень частый вопрос. Liveness проверяет \"живо ли приложение\" (не включать внешние зависимости), readiness — \"готово ли принимать трафик\" (включать БД, Redis). Также покажите знание про отдельный порт для Actuator в production и безопасность endpoints.","","junior",[15],"observability",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":20,"featuredSnippetReady":23},"Что такое Spring Boot Actuator? — Gymterview","Spring Boot Actuator — модуль Spring Boot, предоставляющий production-ready функции для мониторинга и управления приложением через HTTP-эндпоинты или JMX.","Spring Boot Actuator — модуль Spring Boot, предоставляющий production-ready функции для мониторинга и управления приложе",[15,13],true]