개발/Spring Boot
[Spring Boot] Spring Boot Actuator란
아현이라구
2023. 11. 1. 09:51
반응형
소개
Spring Boot 애플리케이션의 운영 정보와 모니터링을 제공하는 라이브러리입니다.
- 실행 중인 애플리케이션의 로그, 메모리 사용량, HTTP 요청 수 등의 정보를 수집할 수 있습니다.
- HTTP 방식과 JMX 방식이 있으며 대표적으로 많이 쓰는 것이 Health Check 용도의 actuator health endpoint입니다.
Tip
프로젝트에 'Spring Security'를 추가하면 HTTP를 통해 노출에 민감한 엔드포인트는 권한을 분리하여 보호할 수 있다.
gradle 파일 dependency
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
}
설정 파일 예제
# Spring Actuator 활성화
management:
endpoints:
web:
exposure:
include: "*"
# Actuator 엔드포인트에 보안 적용
management:
endpoints:
web:
base-path: /actuators
exposure:
include: info,health,metrics
endpoint:
info:
enabled: true
health:
show-details: always
metrics:
enabled: true
# 엔드포인트 보안 설정
management:
endpoint:
health:
roles: ACTUATOR_ADMIN
endpoint:
metrics:
roles: ACTUATOR_ADMIN
# Actuator 엔드포인트를 기본 포트(8080) 외의 포트로 노출
server:
port: 8081
특성
endpoint :
- /health : 애플리케이션 상태 확인 및 /metrics 엔드포인트를 통한 메트릭 수집 방법을 설명합니다.
{ "status": "UP" }
- /info : 애플리케이션 정보 노출 및 사용 사례를 제시합니다.
{ "app": { "version": "1.0", "description": "Spring Boot Application" } }
- /metrics :
- 시스템 리소스 메트릭: CPU 사용률, 메모리 사용량, 디스크 사용량 등과 같은 시스템 리소스 관련 메트릭을 모니터링할 수 있습니다.
- 애플리케이션 성능 메트릭: HTTP 요청 처리 시간, 데이터베이스 쿼리 응답 시간, 오류 발생률 등과 같은 애플리케이션 성능 관련 메트릭을 추적할 수 있습니다.
- 사용자 정의 메트릭: 애플리케이션에서 중요한 지표나 통계를 수집하고 사용자 정의 메트릭을 정의하여 모니터링할 수 있습니다.
{ "jvm.memory.used": 2556456, "http.server.requests": { "m1_rate": 0.0, "m5_rate": 0.0, "mean_rate": 0.0, "count": 0 } }
- /env : 애플리케이션의 환경 변수 및 프로퍼티 정보를 제공하는 엔드포인트입니다. 이 엔드포인트를 통해 현재 실행 중인 Spring Boot 애플리케이션의 환경에 대한 다양한 정보를 조회할 수 있습니다.
- 지금 작성한 endpoint는 이외에도 많은 endpoint가 있으나 주로 모니터링을 위해 사용되는 endpoint를 설명하였다.
{ "activeProfiles": ["dev"], "propertySources": [ { "name": "systemProperties", "properties": { "java.runtime.name": { "value": "Java(TM) SE Runtime Environment" }, "user.country": { "value": "US" } } }, { "name": "systemEnvironment", "properties": { "JAVA_HOME": { "value": "/usr/lib/jvm/java-11-openjdk-amd64" }, "PATH": { "value": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" } } }, { "name": "applicationConfig: [classpath:/application.properties]", "properties": { "spring.datasource.url": { "value": "jdbc:mysql://localhost:3306/mydb" }, "server.port": { "value": "8080" } } } ] }
주의사항
- 애플리케이션 모니터링 및 관리 측면에서 개발자에게 편의를 주는 기능이나, 잘못 사용할 경우 비밀번호, API KEY, Token 등 Credential들이나 내부 서비스 도메인, IP 주소와 같은 중요 정보들이 유출될 수 있습니다. 그뿐만 아니라 서비스를 강제로 중단시켜 가용성을 침해할 수도 있기 때문에 Actuator의 모든 엔드포인트를 활성화하지 않고, 필요한 엔드포인트만 활성화하는 것이 좋습니다. 불필요한 엔드포인트는 보안 및 성능 문제를 야기할 수 있습니다.
- 보안 설정:Spring Actuator 엔드포인트는 애플리케이션의 민감한 정보를 제공할 수 있으므로 보안을 고려해야 합니다. /env, /loggers 등의 엔드포인트는 기본적으로 보안을 설정해야 합니다. 적절한 권한 및 인증 설정을 통해 무단 액세스를 방지합니다.
- 인증과 인가: Actuator 엔드포인트에 대한 액세스 권한을 설정하고, 엔드포인트에 접근하는 사용자 및 역할을 관리해야 합니다. 인증 및 인가 메커니즘을 구현하여 엔드포인트에 대한 접근을 제한할 수 있습니다.
- 개인 정보 보호: Actuator 엔드포인트를 사용하면 애플리케이션의 상태 및 구성 정보를 제공하므로 개인 정보 노출을 방지해야 합니다. 민감한 데이터가 엔드포인트에 노출되지 않도록 주의해야 합니다.
- 크로스 오리진 문제: Actuator 엔드포인트를 외부에서 접근하는 경우, 크로스 오리진 문제(CORS)에 대비해야 합니다. 적절한 CORS 설정을 적용하여 웹 애플리케이션 등에서 엔드포인트를 안전하게 호출할 수 있습니다.
- 리소스 소비: /metrics 엔드포인트를 통해 수집되는 메트릭 정보는 많은 리소스를 소비할 수 있으므로, 과도한 메트릭 수집은 애플리케이션의 성능에 영향을 미칠 수 있습니다. 필요한 메트릭만 수집하도록 주의해야 합니다.
- 애플리케이션 노출: Actuator 엔드포인트는 디버깅 및 모니터링 목적으로 설계되었지만, 실제 운영 환경에서는 불필요한 엔드포인트를 외부에 노출하지 않는 것이 안전합니다.
- 버전 관리:Spring Boot와 Spring Actuator의 버전을 업데이트할 때 엔드포인트의 동작과 설정 변경 사항을 주의 깊게 검토해야 합니다.
- 필요한 엔드포인트만 활성화: Actuator의 모든 엔드포인트를 활성화하지 않고, 필요한 엔드포인트만 활성화하는 것이 좋습니다. 불필요한 엔드포인트는 보안 및 성능 문제를 야기할 수 있습니다.
반응형