개발/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의 모든 엔드포인트를 활성화하지 않고, 필요한 엔드포인트만 활성화하는 것이 좋습니다. 불필요한 엔드포인트는 보안 및 성능 문제를 야기할 수 있습니다.
반응형