Home [백엔드|스프링부트] 운영중인 웹 서비스를 Actuator로 모니터링 해보자
포스트
취소

[백엔드|스프링부트] 운영중인 웹 서비스를 Actuator로 모니터링 해보자

개요

애플리케이션을 운영하는 단계에 접어들면, 애플리케이션이 정상적으로 동작하는지 모니터링하는 환경을 만들어야 한다. 이 때 사용할 수 있는 기능이 스프링부트 액추에이터로, 애플리케이션의 건강 상태 정보, 사용 중인 메모리, 특정 엔드포인트가 받은 요청 횟수 등의 정보를 HTTP 요청을 통해 받아 볼 수 있다. 이 기능을 어떻게 추가하며, 어떻게 사용할 수 있는지 알아보자.

의존성 추가

액추에이터를 사용하려면 먼저 의존성을 추가해야 한다. 스프링부트 액추에이터 역시 spring-boot-starter-parent 에 포함되어 있으므로, 별도의 버전 관리 없이 쉽게 추가 할 수 있다.

1
2
3
4
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

액추에이터 엔드포인트

위의 의존성을 추가했다면, 웹 서비스의 URL에 /actuator 를 포함한 여러 엔드포인트들로 요청을 보내 애플리케이션의 내부 상황을 모니터링 할 수 있다.

자주 활용되는 액추에이터의 엔드포인트는 다음과 같다.

HTTP 메서드엔드포인트설명기본 활성화 여부
GET/auditevents호출된 Audit 이벤트 정보를 표시한다. (AuditEventRepository 빈이 필요)X
GET/beans애플리케이션에 있는 모든 스프링 빈 리스트를 표시한다.X
GET/caches사용 가능한 캐시를 표시한다.X
GET/conditions자동 구성 조건 내역을 생성한다.X
GET/configprops@ConfigurationProperties의 속성 리스트를 표시한다.X
GET,POST,DELETE/env애플리케이션에서 사용할 수 있는 환경 속성을 표시, 수정, 삭제한다.X
GET/health애플리케이션의 상태 정보를 표시한다.O
GET/httptrace가장 최근에 이뤄진 100건의 요청 기록을 표시한다.X
GET/info애플리케이션의 정보를 표시한다O
GET/integrationgraph스프링 통합 그래프를 표시한다. (spring-integration-core 모듈에 대한 의존성을 추가해야 동작)X
GET,POST/loggers애플리케이션의 로거 구성을 표시하고 수정한다.X
GET/mappings모든 @RequestMapping의 매핑 정보를 표시한다.X
GET/metrics애플리케이션의 메트릭 정보를 표시한다.X
GET/quartzQuartz 스케줄러 작업에 대한 정보를 표시한다.X
GET/scheduledtasks애플리케이션에서 예약된 작업을 표시한다.X
GET,DELETE/sessions스프링 세션 저장소에서 사용자의 세션을 검색하고 삭제할 수 있다.(스프링 세션을 사용하는 서블릿 기반 웹 애플리케이션 필요)X
POST/shutdown애플리케이션을 정상적으로 종료할 수 있다.X
GET/startup애플리케이션이 시작될 때 수집된 시작 단계 데이터를 표시한다.(BufferingApplicationStartup으로 구성된 스프링 애플리케이션 필요)X
GET/threaddump스레드 덤프를 수행한다.X

엔드포인트의 활성화와 비활성화

위의 표를 보면, 기본적으로 활성화 되어 있는 엔드포인트는 /health와 /info 밖에 없다는 것을 알 수 있다. 대부분의 액추에이터 엔드포인트는 민감한 정보를 제공하므로 보안 처리가 되어야 하기 때문에, 기본적으로 활성화 되어 있지 않다. 이 부분은 스프링 시큐리티를 사용해 보안을 강화할 수 있다. 그러나 액추에이터 자체는 보안 처리가 되어 있지 않기 때문에 활성화에 주의가 필요하다.

엔드포인트 노출 관리는 .properties혹은 .yaml에서 할 수 있고, 노출 여부는 management.endpoints.web.exposure.includemanagement.endpoints.web.exposure.exclude 구성 속성을 사용해 제어한다.

1
2
management.endpoints.web.exposure.include=health, info, beans, conditions
management.endpoints.web.exposure.exclude=heapdump, threaddump

액추에이터 기능

(추후 작성 예정)

액추에이터 보안 문제

애플리케이션 모니터링 및 관리 측면에서 개발자에게 편의를 주는 기능이나, 잘못 사용할 경우 비밀번호, API KEY, Token 등 Credential들이나 내부 서비스 도메인, IP 주소와 같은 중요 정보들이 유출될 수 있다. 자세한 정보는 여기서 확인하자.

참고 자료


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

[백엔드|스프링부트] 프록시 객체때문에 발생할 수 있는 equals 예외

[CS] 디자인패턴이란? Part 01