1. 모니터링이란?
모니터링은 시스템의 상태나 변화를 지속적으로 관찰하고 기록하는 것이다. 개발이 끝나면 개발자의 할 일이 끝날까? 전혀 그렇지 않다. IT 서비스에서 모니터링은 시스템의 안정성과 성능을 보장하기 위해 필수적인 요소로, 장애 상황이 발생했을 때 곧바로 처리할도록 돕는다. 만약 장애가 발생했는데 모니터링 시스템을 갖추지 않고 있다면? ...
2. Spring Actuator
Spring Actuator는 애플리케이션의 운영 단계에서 필요한 모니터링과 관리 기능을 제공한다. 흔히 말해, "프로덕션 준비 기능"을 미리 만들어 두어 개발자의 짐을 덜어주는 고마운 존재인 것이다. 주요 특징으로는 애플리케이션의 상태, 메트릭, 로그 등 다양한 운영 정보를 제공한다. 마이크로미터, 프로메테우스, 그라파나와 같은 모니터링 도구들과 쉽게 연동된다. 그리고, 웹을 통해 애플리케이션 내부 정보에 접근할 수 있도록 돕는다.
3. Spring Actuator 사용해보기
Spring Acutuator 를 사용하려면 아래 의존성이 필요하다.
implementation 'org.springframework.boot:spring-boot-starter-actuator'
전체 build.gradle은 아래와 같다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.6'
id 'io.spring.dependency-management' version '1.1.6'
}
group = 'com.griotold'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
//test lombok 사용
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
}
tasks.named('test') {
useJUnitPlatform()
}
3 - 1. 서버 실행, actuator 살펴보기
서버를 실행시키고, localhost:/8080/actuator 로 접근하면, 위와 같은 화면을 볼 수 있다.
self와 heath 정보만 노출된 상태인데,
설정 파일을 통해 모든 정보를 노출시켜보자
3 - 2. application.yml
# actuator 에서 모든 엔드포인트 노출
management:
endpoints:
web:
exposure:
include: "*"
Web에다가 모든 기능을 노출시키겠다는 의미다.
참고로 Spring Actuator 는 Web과 JMX에 노출시킬 수 있다.
3 - 3. 다시 서버 실행 후, Actuator 접근
모든 기능이 노출된 것을 확인할 수 있다.
참고로, shutdown 기능은 활성화되지 않았기 때문에 노출되지 않는다.
3 - 4. shutdown 기능
shutdown 기능은 기본적으로 비활성화 상태이다.
서버를 끄는 기능이라서 주의가 필요하기 때문이다.
shutdown 기능을 활성화 시키고, Actuator에 노출되는지 확인해보자
# actuator 에서 모든 엔드포인트 노출
## shutdown 기능 활성화
management:
endpoint:
shutdown:
enabled: true
endpoints:
web:
exposure:
include: "*"
endpoint.shutdown.enabled: true 를 추가했다.
이렇게 설정한 후 다시 서버를 실행시키면 Actuator에 shutdown 기능이 노출되는 것을 볼 수 있다.
shudwon 기능을 실행시키면 서버가 꺼지게 된다.
3 - 5. shutdown 기능 사용해보기
4. Actuator 활성화, 노출 정리
shutdown 기능에서 확인해본 것처럼,
Spring Actuator는 기능이 활성화 되어 있으면서 노출이 되어야 볼 수 있고, 확인할 수 도 있다.
그리고 아래 처럼, 선택적으로 노출할 수도 있다.
management:
endpoints:
web:
exposure:
include: "health,info,metrics,prometheus" # 특정 엔드포인트만 활성화
또한, Spring Security와 연동하여 인증된 상태에서만 볼 수 있도록 설정도 가능하다.
management:
endpoint:
health:
show-details: when_authorized
endpoints:
web:
exposure:
include: "health,info"
health의 경우 인증이 된 상태에서 노출이 된다.
모든 기능을 노출 시키면서, 특정 기능만 노출이 안되도록 할 수 도 있다.
management:
endpoints:
web:
exposure:
include: "*"
exclude: "env,beans"
env, beans는 노출에서 제외한다.
references
https://docs.spring.io/spring-boot/reference/actuator/index.html
https://www.baeldung.com/spring-boot-actuators
https://techblog.woowahan.com/9232/
https://toss.tech/article/how-to-work-health-check-in-spring-boot-actuator