Spring Boot Actuator

Kkd·2024년 12월 26일
0

매일메일 개념정리

목록 보기
55/93

Spring Boot Actuator란?

Spring Boot ActuatorSpring Boot 애플리케이션에 대한 모니터링, 관리운영을 용이하게 만들어주는 라이브러리입니다.
애플리케이션의 상태, 메트릭, 애플리케이션 정보 등을 쉽게 확인할 수 있도록 다양한 기능을 제공합니다.


주요 기능

  1. 애플리케이션 상태 모니터링

    • 애플리케이션의 건강 상태(Health), 메트릭 등을 확인할 수 있습니다.
    • 예를 들어, 데이터베이스 연결 상태, 애플리케이션의 CPU 사용량 등 다양한 상태를 모니터링합니다.
  2. 애플리케이션 메트릭 수집

    • 애플리케이션의 CPU 사용량, 메모리 사용량, HTTP 요청 수 등 다양한 메트릭을 수집하고 노출합니다.
  3. 환경 정보 제공

    • 애플리케이션의 설정 값이나 배포 정보 등을 제공합니다. 예를 들어, 실행 중인 애플리케이션의 프로퍼티, 배포 환경 등에 대한 정보를 알 수 있습니다.
  4. 애플리케이션의 로그 및 추적 기능

    • 애플리케이션의 로그 레벨을 동적으로 조정하거나, 애플리케이션 트레이싱을 위한 기능도 제공합니다.
  5. 애플리케이션의 관리 기능 제공

    • 예를 들어, 애플리케이션 종료, 애플리케이션의 다양한 설정 변경 등을 지원합니다.

Spring Boot Actuator의 주요 엔드포인트

Spring Boot Actuator는 기본적으로 다양한 HTTP 엔드포인트를 제공하여 애플리케이션의 상태를 확인하고 관리할 수 있게 해줍니다.
이 엔드포인트들은 http://localhost:8080/actuator/ 경로에서 접근할 수 있습니다.

1. /actuator/health

  • 애플리케이션의 건강 상태를 확인하는 엔드포인트입니다.
  • 데이터베이스 연결 상태, 외부 서비스와의 연결 상태 등을 확인할 수 있습니다.

예시 응답:

{
    "status": "UP",
    "components": {
        "db": {
            "status": "UP"
        }
    }
}

2. /actuator/metrics

  • 애플리케이션의 메트릭을 제공하는 엔드포인트입니다.
  • 예를 들어, HTTP 요청 수, 메모리 사용량, 시스템 정보 등의 메트릭을 확인할 수 있습니다.

예시 응답:

{
    "jvm.memory.used": 1048576,
    "jvm.threads.live": 45
}

3. /actuator/env

  • 애플리케이션의 환경 변수설정 값을 확인할 수 있는 엔드포인트입니다.

예시 응답:

{
    "propertySources": [
        {
            "name": "applicationConfig: [classpath:/application.yml]",
            "properties": {
                "spring.datasource.url": "jdbc:mysql://localhost:3306/mydb"
            }
        }
    ]
}

4. /actuator/info

  • 애플리케이션에 대한 정보를 제공합니다. 보통 프로젝트의 버전, 개발자 정보 등을 확인할 수 있습니다.

예시 응답:

{
    "app": {
        "name": "MyApp",
        "version": "1.0.0"
    }
}

5. /actuator/loggers

  • 애플리케이션의 로그 레벨을 동적으로 조정할 수 있는 엔드포인트입니다.
  • 예를 들어, 로깅 레벨을 DEBUG로 변경하거나, 다른 로그 레벨을 설정할 수 있습니다.

예시 응답:

{
    "levels": ["TRACE", "DEBUG", "INFO", "WARN", "ERROR"]
}

6. /actuator/shutdown

  • 애플리케이션을 종료하는 엔드포인트입니다. 보안을 위해 기본적으로 이 엔드포인트는 비활성화되어 있습니다.
  • 사용하려면 management.endpoints.web.exposure.include=shutdown을 설정해야 합니다.

Spring Boot Actuator 사용법

1. 의존성 추가

Spring Boot에서 Actuator를 사용하려면, spring-boot-starter-actuator 의존성을 pom.xml에 추가해야 합니다.

Maven 의존성:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Gradle 의존성:

implementation 'org.springframework.boot:spring-boot-starter-actuator'

2. 설정 파일에서 엔드포인트 활성화

기본적으로 Actuator는 모든 엔드포인트를 활성화하지 않습니다. 활성화하고 싶은 엔드포인트를 application.properties 또는 application.yml 파일에서 설정할 수 있습니다.

application.properties 예시:

management.endpoints.web.exposure.include=health,metrics,info
  • health, metrics, info와 같은 엔드포인트를 활성화할 수 있습니다.

application.yml 예시:

management:
  endpoints:
    web:
      exposure:
        include: health, metrics, info

3. 사용자 정의 엔드포인트

Spring Boot Actuator는 기본 엔드포인트 외에도 사용자 정의 엔드포인트를 만들 수 있는 기능을 제공합니다.

@Component
public class CustomEndpoint extends AbstractEndpoint<String> {

    public CustomEndpoint() {
        super("custom");
    }

    @Override
    public String invoke() {
        return "Custom Endpoint Response";
    }
}

위와 같이 사용자 정의 엔드포인트를 추가하고, /actuator/custom에서 이를 호출할 수 있습니다.


보안 설정

Actuator 엔드포인트는 보안상의 이유로 기본적으로 보호되어야 합니다. 예를 들어, 민감한 엔드포인트인 /actuator/shutdown은 기본적으로 비활성화되어 있고, 로그인 인증을 통해 보호할 수 있습니다.

management.endpoints.web.exposure.include=health,info,metrics
management.endpoint.health.show-details=always
management.endpoints.web.base-path=/actuator

보안을 강화하려면, Spring Security를 활용하여 엔드포인트 접근을 제어할 수 있습니다.


Spring Boot Actuator 활용 예시

  1. Health 체크: 애플리케이션의 상태를 실시간으로 모니터링하여 장애나 이상 징후를 조기에 발견.
  2. 메트릭 수집: 애플리케이션 성능을 모니터링하여 리소스 사용량, 트래픽 등을 분석.
  3. 자동화된 배포 파이프라인: CI/CD 파이프라인에서 Actuator의 health 엔드포인트를 사용하여 배포 후 상태를 확인.
  4. 애플리케이션 모니터링 시스템과 연동: Prometheus, Grafana 등의 외부 모니터링 시스템과 연동하여 메트릭과 상태 정보를 시각화.

학습 포인트

  1. Actuator 엔드포인트 설정 및 활성화: 필요한 엔드포인트를 설정하여 애플리케이션 모니터링을 강화합니다.
  2. Spring Security와 Actuator 통합: Actuator 엔드포인트에 대한 보안을 설정하는 방법을 학습합니다.
  3. 커스텀 엔드포인트 만들기: 사용자 정의 기능을 제공하기 위한 커스텀 엔드포인트 추가 방법을 학습합니다.

추가 학습 자료

profile
🌱

0개의 댓글