스택큐힙리스트

Actuator로 헬스 체크 실시간 모니터링 본문

개발

Actuator로 헬스 체크 실시간 모니터링

스택큐힙리스트 2025. 7. 17. 22:40
반응형

1. 왜 Spring Boot Actuator로 헬스 체크를 해야 할까?

프로덕션 환경에서는 “애플리케이션이 살아 있는지·요청을 받을 준비가 됐는지”를 자동으로 감시해야 합니다. Actuator는 /actuator/health 엔드포인트 하나로 CPU·메모리뿐 아니라 DB, Redis, Kafka 등 외부 의존성까지 상태를 종합 분석해 줍니다. 헬스 체크를 모니터링 서비스·쿠버네티스 프로브·로드밸런서와 바로 연동할 수 있어, 다운타임을 최소화하고 장애 감지를 앞당깁니다.


2. Actuator 빠르게 적용하기

  1. 의존성 추가
    implementation("org.springframework.boot:spring-boot-starter-actuator")
  2. 엔드포인트 노출 설정 (기본은 health·info만 노출)
    management:
      endpoints:
        web:
          exposure:
            include: health,info,metrics


  3. 실행 & 확인
    ./gradlew bootRun
    curl http://localhost:8080/actuator/health


3. 헬스 체크 결과 해석하기

  • UP : 애플리케이션·의존 서비스 모두 정상
  • DOWN / OUT_OF_SERVICE : 서비스 불가 → 모니터링 시스템에 알람
  • UNKNOWN : 상태 정보를 제공하지 않는 경우 (커스텀 인디케이터 누락 등)

Actuator는 내부적으로 HealthIndicator 빈을 모아 종합 결과를 만듭니다. DB, RabbitMQ, Elasticsearch 등이 자동으로 포함되며, 시간 지연이 길면 “어느 인프라에서 느려졌는지”도 확인 가능합니다.


4. Liveness / Readiness 프로브 분리하기

쿠버네티스 배포라면 다음 설정만으로 컨테이너 재시작(liveness)트래픽 수신 준비(readiness) 를 각각 모니터링할 수 있습니다.

management:
  endpoint:
    health:
      probes:
        enabled: true
  endpoints:
    web:
      exposure:
        include: health
  • /actuator/health/liveness → JVM Deadlock, OutOfMemory 등 생존 여부
  • /actuator/health/readiness → DB 연결·메시지 브로커 등 외부 의존성 준비 상태

5. 커스텀 HealthIndicator 만들기

@Component
public class SlackApiHealthIndicator implements HealthIndicator {

    private final SlackClient slackClient;

    public SlackApiHealthIndicator(SlackClient slackClient) {
        this.slackClient = slackClient;
    }

    @Override
    public Health health() {
        boolean reachable = slackClient.ping();
        return reachable ? Health.up().build()
                         : Health.down().withDetail("error", "Slack API unreachable").build();
    }
}

SlackApiHealthIndicator 빈을 등록하면 /actuator/health JSON에 slackApi 섹션이 자동으로 추가됩니다.


6. 운영 환경 꿀팁

  • 보안 : 프로덕션에서는 IP·SecurityFilter 또는 API Key로 헬스 엔드포인트를 보호하세요.
  • 프로메테우스 : micrometer-registry-prometheus 의존성 하나면 Actuator + 메트릭스가 /actuator/prometheus 로 노출됩니다.
  • 경량화 : 불필요한 인디케이터는 management.health.redis.enabled=false 처럼 끌 수 있습니다.
  • 슬랙 알림 : Spring Boot 3.2부터 WebHook URL만 지정하면 헬스 상태 변화를 이벤트로 받을 수 있습니다.
반응형
Comments