В современных микросервисных архитектурах контроль работоспособности сервисов является обязательным условием надёжной эксплуатации. Netflix Conductor – оркестратор workflow, который сам по себе является микросервисом и тоже нуждается в механизме проверки состояния. В этой статье подробно рассмотрим, как добавить и настроить Health Check эндпоинт в Conductor, чтобы система мониторинга (Kubernetes, Docker, Prometheus и т.д.) могла оперативно определять, жив ли сервис и готов ли он принимать задачи.
Зачем нужен Health Check в Conductor
- Обнаружение сбоев – если Conductor падает или теряет связь с базой данных, оркестрация workflow останавливается.
- Автоматический перезапуск – платформы контейнеризации (Docker Swarm, Kubernetes) используют Health Check для принятия решения о рестарте контейнера.
- Интеграция с сервис‑дискавери – например, Eureka или Consul могут исключать unhealthy‑инстансы из балансировки нагрузки.
- Прозрачность для DevOps – метрики и логы становятся более предсказуемыми, когда известно, что сервис отвечает на стандартный эндпоинт /health.
Основные варианты реализации Health Check в Conductor
Conductor построен на Spring Boot (Java) и уже содержит встроенную поддержку Spring Boot Actuator. Достаточно активировать нужные endpoints и, при необходимости, кастомизировать их под свои требования.
Включение Actuator в проект
Если вы используете официальный образ netflix/conductor или собираете свой actuator‑enabled сервер, добавьте следующую зависимость в pom.xml (или build.gradle):
Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Gradle
implementation ‘org.springframework.boot:spring-boot-starter-actuator’
После этого actuator будет доступен по базовому пути /actuator.
Экспозиция Health endpoint
По умолчанию только health и info endpoints открыты для внешнего доступа. Чтобы явно задать набор открытых эндпоинтов, добавьте в application.yml (или application.properties):
management: endpoints: web: exposure: include: health,info endpoint: health: show-details: always # показывает детали (например, статус БД)
Если вы используете свойства в формате .properties:
management.endpoints.web.exposure.include=health,info management.endpoint.health.show-details=always
Кастомизация проверки состояния
Иногда достаточно стандартной проверки (JVM, потоки). Но в Conductor важно знать, доступна ли подключённая база данных (обычно MySQL/PostgreSQL) и очередь сообщений (например, Redis или Kafka). Для этого можно добавить собственный HealthIndicator:
@Component
public class ConductorDbHealthIndicator implements HealthIndicator {
@Autowired
private DataSource dataSource; // datasource, сконфигурированный для Conductor
@Override
public Health health {
try (Connection connection = dataSource.getConnection) {
if (connection.isValid(2)) {
return Health.up.withDetail("database", "OK").build;
} else {
return Health.down.withDetail("database", "Invalid connection").build;
}
} catch (Exception ex) {
return Health.down.withException(ex).build;
}
}
}
После добавления такого бинта actuator автоматически включит его в общий health‑ответ:
{
"status":"UP",
"components":{
"db":{
"status":"UP",
"details":{"database":"OK"}
}, "diskSpace":{ ... },
...
}
}
Интеграция с Docker и Kubernetes
Docker HEALTHCHECK
Если вы запускаете Conductor в Docker, добавьте в Dockerfile строку:
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 CMD curl -f http://localhost:8080/actuator/health || exit 1
Эта команда каждые 30 секунд запрашивает /actuator/health и считает контейнер здоровым, если получает код 200 и тело с полем "status":"UP";
Kubernetes Liveness/Readiness probes
В манифесте Deployment можно указать:
livenessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 20 periodSeconds: 15 readinessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 10 periodSeconds: 10
Таким образом, Kubernetes будет перезапускать под, если health endpoint вернёт ошибку, и не будет направлять трафик к поду, пока он не станет готовым.
Проверка работоспособности вручную
После деплоя вы можете выполнить:
curl -s http://:8080/actuator/health | jq .
Ожидаемый ответ (пример):
{
"status":"UP",
"components":{
"db":{"status":"UP","details":{"database":"OK"}},
"diskSpace":{"status":"UP","details":{"total":...}},
...
}}
Если любой компонент возвращает DOWN, общий статус будет DOWN.
Рекомендации и best practices
- Не expose все actuator endpoints наружу – оставляйте только
healthи, при необходимости,info. Остальные (например,env,beans) могут раскрывать конфиденциальную информацию. - Устанавливайте реалистичные таймауты – слишком частые проверки могут создавать лишнюю нагрузку на БД и сеть.
- Мониторьте тренды – собирайте метрики из actuator (например, через Micrometer + Prometheus) и следите за ростом времени ответа health endpoint.
- Тестируйте сценарии отказа – искусственно отключайте БД или сеть и убедитесь, что health endpoint переходит в
DOWNи orchestration платформа реагирует соответствующим образом. - Документируйте эндпоинт – добавьте в README или внутренний вики‑раздел описание пути, ожидаемых кодов и полей ответа.
Настройка Health Check эндпоинта в Netflix Conductor – простой, но критически важный шаг для обеспечения надёжности workflow оркестрации. Благодаря встроенной поддержке Spring Boot Actuator вы получаете готовый механизм проверки состояния, который легко кастомизировать под свои зависимости (БД, очередь, кэш). Интеграция с Docker HEALTHCHECK и Kubernetes probes позволяет автоматически обнаруживать сбои и запускать процессы восстановления без участия оператора. Следуя изложенным рекомендациям, вы сделаете свою инфраструктуру более устойчивой иobservable.