액츄에이터 Actuator
스프링 부트가 제공하는 액츄에이터는 지표, 추적, 감사, 모니터링과 같은 프로덕션 준비 기능을 매우 편리하게 사용할 수 있는
다양한 편의 기능을 제공한다. 나아가서 다양한 모니터링 시스템과 매우 쉽게 연동할 수 있는 기능도 제공한다.
액츄에이터 의존성 추가
아래 의존성을 build.gradle에 추가해야지 액츄에이터를 사용할 수 있다.
implementation 'org.springframework.boot:spring-boot-starter-actuator' // actuator 추가
액츄에이터 기능 사용
액추에이터를 사용하려면 애플리케이션의 main() 메서드를 실행시키고 /actuator 경로로 접근해야 한다.
/actuator 경로를 통해 액츄에이터가 제공하는 수 많은 기능을 확인할 수 있다.
액츄에이터가 제공하는 기능 하나하나를 엔드포인트라 한다.
각각의 엔드포인트는 /actuator/{엔드포인트명}과 같은 형식으로 접근할 수 있다.
엔드포인트 설정
엔드 포인트를 사용하려면 엔드 포인트 활성화, 엔드 포인트 노출 2가지 과정이 필요하다.
엔드포인트는 대부분 기분으로 활성화 되어 있다. 그러므로 엔드포인트를 노출할지 선택하면 된다.
참고로 HTTP와 JMX를 사용할 수 있는데 보통 JMX는 잘 사용하지 않는다.
액츄에이터 기능을 제어하려면 application.yml or application.properties에서 설정 값을 작성하는 게 효율적이다.
아래는 모든 엔드포인트를 웹에 노출하는 application.yml 파일이다.
management:
endpoints:
web:
exposure:
include: "*"
다양한 엔드포인트
스프링 부트가 제공하는 다양한 엔드포인트를 통해 개발자는 애플리케이션의 수 많은 기능을 관리하고 모니터링할 수 있다.
몇 가지만 살펴보자.
- beans: 스프링 컨테이너에 등록된 스프링 빈을 보여준다.
- configprops: @ConfigurationProperties를 보여준다.
- health: 애플리케이션 헬스 정보를 보여준다.
- httpexchanges: HTTPS 호출 응답 정보를 보여준다.
- info: 애플리케이션 정보르 보여준다.
- threaddump: 쓰레드 덤프를 실행해서 보여준다.
- shutdown: 애플리케이션을 종료한다. 이 기능은 기본적으로 비활성화 되어 있다.
헬스 정보를 더 자세히 보려면 아래와 같이 yml 파일에 내용을 추가해야 한다.
management:
endpoint:
health:
show-details: always
info 엔드포인트는 java, os, env, build, git과 같은 다양한 애플리케이션 기본 정보를 노출한다.
env, java,os는 기본적으로 비활성화 되어 있다. build와 git 내용만 살펴보겠다.
빌드 정보를 노출하려면 빌드 시점에 META-INF/build-info.properties 파일을 만들어야 한다.
gradle을 사용하면 다음 내용을 추가하면 된다.
//build.gradle에 빌드 정보를 추가
springBoot {
buildInfo()
}
이렇게 하고 빌드를 해보면 build 폴더안에 resources/main/META-INF/build-info.properties 파일을 확인할 수 있다.
git 정보도 비슷하다. git.properties 파일이 필요하다.
plugins {
..
id "com.gorylenko.gradle-git-properties" version "2.4.1" //git info
}
위 내용을 추가하고 빌드를 하면 동일하게 build 폴더 안에서 git.properties를 찾을 수 있다.
로거
loggers 엔드포인트를 사용하면 로깅과 관련된 정보를 확인하고 또 실시간으로 변경할 수 있다.
실시간으로 로깅 레벨을 변경하는 방법에 대해 살펴보자.
- POSTMAN과 같은 프로그램으로 POST로 요청을 보내야한다.
- http://localhost:8080/actuator/loggers/{로깅 레벨을 변경할 대상} URL로 POST 방식으로 JSON 형태로 담아서 요청을 해야 한다.
- JSON 요청 예시는 아래와 같다. 요청이 성공하면 204가 내려온다.
{
"configuredLevel": "TRACE"
}
HTTP 요청 응답 기록
httpexchanges 엔드 포인트를 사용해 HTTP 요청과 응답의 과거 기록을 확인할 수 있다.
조건으로는 반드시 HttpExchangeRepository 인터페이스의 구현체를 빈으로 등록해야 한다.
액츄에이터는 반드시 외부 인터넷에서 접근이 불가능하게 막고, 내부에서만 접근 가능하도록 구성해야 한다.
이상으로 포스팅을 마칩니다. 감사합니다.
참고 자료
댓글