액추에이터는 스프링 부트가 제공하는 기능으로 지표 수집, 추적, 감사 등의 모니터링을 쉽게 할 수 있는 다양한 편의 기능을 제공한다. 또한 최근 유행하는 마이크로미터, 프로메테우스, 그라파나 같은 다양한 모니터링 시스템과 매우 쉽게 연동할 수 있는 기능도 제공한다.
들어가기 전: 이 글은 [인프런] 에서 '김영한님의 스프링 부트 - 핵심 원리와 활용'을 수강하고 일부를 요약한 글입니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
{
"_links": {
"self": {
"href": "http://localhost:8080/actuator",
"templated": false
},
"health-path": {
"href": "http://localhost:8080/actuator/health/{*path}",
"templated": true
},
"health": {
"href": "http://localhost:8080/actuator/health",
"templated": false
}
}
}
{"status": "UP"}
management:
endpoints:
web:
exposure:
include: "*"
management:
endpoints:
web:
exposure:
include: health, metrics
management:
endpoints:
web:
exposure:
include: "*"
exclude: env, beans
아래는 자주 사용하는 기능 위주로 정리한 목록이다.
beans
: 스프링 컨테이너에 등뢱된 빈을 보여준다.conditions
: condition 을 통해서 빈을 등록할 때 평가 조건과 일치하거나 일치하지 않는 이유를 표시한다.configprops
: @ConfigurationProperties 를 보여준다.env
: Environment 정보를 보여준다.health
: 애플리케이션 상태 정보를 보여준다.httpexchanges
: HTTP 호출 응답 정보를 보여준다. HttpExchangeRepository 를 구현한 빈을 별도로 등록해야 한다.info
: 애플리케이션 정보를 보여준다.loggers
: 애플리케이션 로거 설정을 보여주고 변경도 가능하다.metrics
: 애플리케이션의 메트릭 정보를 보여준다.mappings
: @RequestMapping 정보를 보여준다.threaddump
: 쓰레드 덤프를 실행해서 보여준다.shutdown
: 애플리케이션을 종료한다. (Default: 비활성)참고: https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints
Health 정보를 사용하면 애플리케이션에 문제가 발생했을때 문제를 빠르게 인지할 수 있다.
{"status": "UP"}
헬스 정보는 단순히 애플리케이션이 요청에 응답을 할 수 있는지 판단하는 것을 넘어서 애플케이션이 사용하는 데이터베이스가 응답하는지, 디스크 사용량에는 문제가 없는지 같은 다양한 정보들을 포함해서 만들어진다.
management:
endpoint:
health:
show-details: always
{
"status": "UP",
"components": {
"clientConfigServer": {
"status": "UP",
"details": {...}
},
"db": {
"status": "UP",
"details": {
"database": "MySQL",
"validationQuery": "isValid()"
}
},
"diskSpace": {
"status": "UP",
"details": {
"total": 494384795648,
"free": 368320262144,
"threshold": 10485760,
"exists": true
}
},
"ping": {
"status": "UP"
}
...
}
Actuator 가 제공하는 기능은 우리 애플리케이션 내부 정보를 너무 많이 노출한다. 따라서 외부 인터넷 망이 공개된 곳에 actuator의 엔드포인트를 공개하는 것은 보안상 좋은 방법이 아니다.
actuator 의 엔드포엔트들은 외부 인터넷에서 접근이 불가능하게 막고, 내부에서만 접근이 가능한 내부망을 사용하는 것이 안전하다.
management:
server:
port: 9292
management:
endpoints:
web:
base-path: "/manage"
포트를 분리하는 것이 어렵고 어쩔 수 없이 외부 인터넷 망을 통해서 접근해야 한다면 /actuator
경로에서 서블릿 필터, 스프링 인터셉터 또는 스프링 시큐리티를 통해 인증된 사용자만 접근 가능하록 추가 개발이 필요하다.