스프링부트 Actuator
2018-10-10
spring boot actuator
1. Actuator란
spring boot actuator는 한마디로 ‘스프링 부트 애플리케이션에서 제공하는 여러가지 정보를 모니터링하기 쉽게 해주는 기능’이다. 간단히 dependency를 통해 앱을 모니터링 하고, 통계를 수집하고, 트래픽이나 데이터베이스의 상태를 볼 수 있다.
Actuator는 HTTP를 이용하여 어플리케이션의 모니터링 및 관리 기능을 제공하며, 각종 추상화 클래스(HealthIndicator) 등을 제공하여 상태 정보를 변경할 수 있는 서비스를 제공한다.
하지만 Actuator 데이터는 비휘발성 메모리 기반이므로, 임데디드 톰캣 서버를 재시작하면 데이터가 모두 사라진다. 실서비스에서 이용한다면 외부 스토리지에 저장해서 모니터링 할 수 있는 환경이 필요하다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2. Actuator 2.x
- 이전 1.x 버전대와는 다르게 대부분의 endpoint가 비활성화 되어있고, default로 /health와 /info만 활성화 되어 있다.
- endpoint 모두 활성화 시키고 싶다면 application.properties에 다음과 같이 추가해야 한다.
management.endpoints.web.exposure.include=*
- 만약 제외하고 싶은 endpoint가 있다면 아래와 같이 설정을 해야한다.
management.endpoints.web.exposure.exclude=env,beans
- 또한 Actuator는 spring security의 config를 공유하므로, spring security의 규칙에서 제외시키고 싶다면 security config에 다음을 추가해야 한다.
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
// 이 부분 추가
.andMathers("/actuator/**").permitAll()
.anyRequest().authenticated();
}
}
3. endpoints
- /auditevents : 로그인/로그아웃과 같은 보안 검사 관련 이벤트 조회. principal이나 type 등을 파라미터로 추가할 수도 있다
- /beans : beanFactory 내에서 사용 가능한 모든 빈을 리턴함
- /env : 어플리케이션의 환경에 대한 정보를 제공. port, vm, java-version, active-profile, applicaion.properties 정보 조회 가능. /env/{property.name}을 이용하면 해당 프로퍼티의 정보만을 가지고 올 수 있다.
- /health : 어플리케이션의 health 상태 제공
- /info : 어플리케이션의 기본 정보를 얻을 수 있다. 커스텀 데이터, 빌드 정보, 최신 커밋 정보를 전달.
- /loggers : 어플리케이션의 logging 레벨 전달
- /mappings : 어플리케이션의 request mapping에 대한 정보를 전달
- /metrics : 사용 가능한 metric의 리스트 전달. /metrics/{metric.name} 을 호출하면 해당 metric의 정보를 얻을 수 있다. jvm 메모리 정보, jdbc connection 정보, tomcat 정보 등을 전달.
- /scheduledtasks : 어플리케이션 내의 schedule task 정보를 제공
4. metrics
- JVM 정보
- thread 수
- GC 정보
- heap 정보
- JDBC 정보
- Process 관련 정보
- CPU
- USAGE
- LOAD
5. endpoint 경로 변경
- management.endpoint.web.base-path의 default값 /actuator 를 사용하고 싶지 않다면 다음과 같이 base-path를 수정할 수 있다.
- 특정 endpoint의 경로만을 변경할 수도 있다
management.endpoints.web.base.path=/status
management.endpoints.web.path-mapping.health=healthcheck
6. customize
기존에 있던 endpoint를 커스텀하거나 custom endpoint를 생성하고 싶다면, Baeldung의 Spring Boot Actuator 링크를 참고.
참고
Baeldung - String Boot Actuator
spring.io - docs
supawer0728-Spring Boot Actuator 소개