개발을 지나 운영 단계에 접어들면 애플리케이션이 정상적으로 동작하는지 모니터링하는 환경을 구축하는 것이 중요
스프링 부트 액추에이터
-> HTTP 엔드포인트
or JMX(Java Management Extensions)
를 활용해 애플리케이션을 모니터링하고 관리할 수 있는 기능 제공
액추에이터의 엔드포인트는 애플리케이션의 모니터링을 사용하는 경로
여러 내장 엔드포인트 포함 및 커스텀 엔드포인트 추가 가능
엑추에이터 추가 시 기본적으로 엔드포인트 URL로 /actuator가 추가되며 이 뒤 경로를 추가해 상세 내역에 접근
다른 경로 이용하고자 한다면
// application.properties
management.endpoints.web.base-path= /custom-path
Spring MVC, Spring WebFlux, Jersey 사용 시 추가로 사용가능한 엔드포인트
heapdump
: 힙 덤프 파일 반환, 핫스팟 VM상에서 hprof 포맷의 파일이 반환jolokia
: Jolokia가 클래스 패스에 있을 때 HTTP 를 통해 JMX 빈 표시logfile
: logging.file.name or logging.file.path 속성이 설정된 경우 로그 파일의 내용 반환Prometheus
: Prometheus 서버에서 스크랩할 수 있는 형식으로 메트릭 표시엔드포인트는 활성화 여부와 노출 여부 설정 가능
비 활성화된 엔드포인트는 애플리케이션 컨텍스트에서 완전히 제거됨
-> 활성화 하려면 properties 파일에 속성 추가하자
management.endpoint.shutdown.enabled=true
management.endpoint.caches.enabled=false
위 설정은 엔드포인트의 shutdown 기능 활성화하고 caches 기능 비활성화
엔트포인트 노출 여부는 JMX를 통한 노출과 HTTP를 통한 노출이 있다
## 엔드포인트 노출 설정
## HTTP 설정
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=threaddump,heapdump
## JMX 설정
management.endpoints.jmx.exposure.include=*
management.endpoints.jmx.exposure.exclude=threaddump, heapdump
위 설정은 web&jmx 환경에서 엔드포인트를 전체적으로 노출하며, 쓰레드 덤프와 힙 덤프 기능은 제거하겠다는 것
엔드포인트는 애플리케이션에 대한 민감한 정보를 담고 있으므로, 노출 설정을 신중하게 고려하자
-> 노출 설정 기본값은 인터넷 참고
액추에이터를 활성화하고 노출 지점을 설정하고 나면 애플리케이션에서 기능 사용 가능
/info
를 통해 가동 중인 애플리케이션 정보를 볼 수 있다
제공 정보 범위는 properties 파일에 info.
로 시작하는 속성 값들을 정의하는 것이 가장 쉬움
info.organization.name=wikibooks
info.contact.email=thinkground.flature@gmail.com
info.contact.phoneNumber=010-1234-5678
이후 아래 URL에 접근
http://localhost:8080/actuator/info
JSON 형태로 정보가 출력됨
애플리케이션 상태 확인 시 사용, 별도 설정 없이 URL 접근
http://localhost:8080/actuator/health
호출 결과 -> {"status":"UP"}
상태에는 UP, DOWN, UNKNOWN, OUT_OF_SERVICE
이 결과는 주로 네트워크 계층 중 L4(LoadBalancing) 레벨에서 애플리케이션의 상태 확인을 위해 사용
## 액추에이터 health 상세 내역 활성화
management.endpoint.health.show-details=always
show-details 속성 값
출력 결과
{
"status":"UP",
"components":{
"diskSpace":{
"status":"UP",
"details":{
"total":245107195904,
"free":129702170624,
"threshold":10485760,
"exists":true
}
},
"ping":{
"status":"UP"
}
}
}
모든 status 값이 UP이야 애플리케이션의 상태가 UP으로 표시됨
http://localhost:8080/actuator/beans
등록된 정보 너무 많아서 육안으로 내용 파악은 어렵
http://localhost:8080/actuator/conditions
출력 내용은 크게 positiveMatches와 negativeMatches 속성으로 구분되는데, 자동설정의 @Conditional에 따라 평가된 내용 표시
http://localhost:8080/actuator/env
스프링의 환경변수 정보 확인하는데 사용
기본적으로 properties 파일의 변수가 표시되며, OS,JVM 환경 변수도 함께 표시
http://localhost:8080/actuator/loggers