2023년 11월 20일

코딩 - Spring 기반 웹 프로그램에서 Actuator 기반 모니터링 구현하기

1. Spring Boot Actuator 활성화

Spring Boot 는 애플리케이션을 운영환경으로 전환할 때 애플리케이션을 모니터링하고 관리하는 데 도움이 되는 여러 가지 추가 기능이 포함되어 있다. 이들 기능은 Spring Boot Actuator 모듈에 대한 의존성을 추가하여 활성화 할 수 있다. 의존성은 spring-boot-starter-actuator 스타터를 사용한다.

① 의존성 추가
spring-boot-starter-actuator 의존성을 프로젝트의 pom.xml 또는 build.gradle 파일에 추가한다. 이렇게 하면 Spring Actuator 관련 기능을 프로젝트에 포함시킬 수 있다.


Spring Boot Actuator가 제공하는 주요 기능은 다음과 같다:
  • 엔드포인트(Endpoints): Spring Boot Actuator는 다양한 HTTP 엔드포인트를 제공하여 애플리케이션의 상태 정보를 노출한다. 예를 들어, /actuator/health, /actuator/info, /actuator/metrics, /actuator/beans, /actuator/env 등의 엔드포인트를 통해 건강 상태, 애플리케이션 정보, 메트릭 데이터, 빈 정보, 환경 속성 정보 등을 확인할 수 있다.
  • 메트릭 수집: Spring Boot Actuator는 애플리케이션의 성능과 동작에 관한 다양한 메트릭 데이터를 수집하고 노출한다. 이러한 메트릭 데이터는 모니터링 도구나 시각화 도구와 연동하여 성능 향상 및 문제 해결에 도움을 줄 수 있다.
  • 응용 프로그램 정보: /actuator/info 엔드포인트를 통해 사용자 정의 애플리케이션 정보를 노출.
  • 애플리케이션의 건강 검사: /actuator/health 엔드포인트를 사용하여 애플리케이션의 건강 상태를 확인하고 이에 따른 조치를 취할 수 있다.
  • 환경 속성 관리: /actuator/env 엔드포인트를 통해 애플리케이션 환경 속성을 확인하고 조작할 수 있다.

 ❉ HTTP 엔드포인트는 일반적으로 URL 형식을 가지며, 웹 주소의 일부다. 예를 들어, "https://example.com/api/data"와 같은 형태가 될 수 있다.

2. 설정 및 보안 구성

Spring Boot Actuator 사용을 위해서 의존성을 추가하는 것으로는 충분하지 않으며  몇 가지 설정과 보안을 추가적으로 구성해야 한다.

② 구성 파일 설정
Spring Actuator 의 기능 중 일부는 구성 파일(application.properties 또는 application.yml)에서 활성화하거나 구성해야 한다. 예를 들어, management.endpoints.web.exposure.include 속성을 사용하여 공개할 엔드포인트를 구성하거나, 엔드포인트의 경로를 사용자 정의할 수 있다.

③ 보안 설정
Spring Actuator 엔드포인트에 접근하는 데 보안을 구성해야 할 수 있습니다. 기본적으로 모든 엔드포인트는 보안이 적용되지 않았으며, 이를 구성하여 액세스 제한, 인증 또는 권한 부여를 설정할 수 있다.

④ 엔드포인트 사용
Spring Actuator의 엔드포인트를 사용하려면 브라우저 또는 HTTP 클라이언트를 통해 엔드포인트에 요청을 보낼 수 있다. 엔드포인트는 /actuator 경로 아래에 위치하며, 예를 들어 /actuator/health 엔드포인트는 애플리케이션의 건강 상태 정보를 제공한다. 다음은 health,beans,metrics 기능들을 웹 서비스 엔트포인트로 사용하고 jmx 는 사용하지 않는 경우 설정이다.


3. 모니터링 구현하기

모니터링은 Vue 기술을 사용하여 구현했다. 모니터링 포트는 별도로 지정하는 것이 보안 및 모니터링 행위가 주는 영향을 최소화하기위하여 좋을 것 같다.

◼︎ 환경

  • Computing Power
    • Model : MacBook Pro (14-inch, 2021)
    • CPU : Apple M1 Pro
    • MENORY : 16GB
    • DISK : 512 GB SSD
    • OS : macOS 13.2.4 (22F66)
  • TOOLS : Visual Studio Code, Java 11, Gradle, Docker
  • Version Control : GitHub
  • Back-End
    • Programming Language : Java
    • Framework : Spring Boot 2.7.12
    • DBMS : MySql 8.0.33 
  • Front-End
    • Vue3 , Vuetify3, pinia, axios, apexcharts
웹 프로그램과 모니터링 포트를 같이 사용하는 경우
<웹 프로그램과 모니터링 포트를 같이 사용하는 경우>

웹과 모니터링 포트를 같이 사용하는 경우 모니터링 API 호출로 인하여 http.server.requests 값이 상승하는 것을 확인할 수 있었다.

<웹 프로그램과 모니터링 포트를 다르게 사용하는 경우>


관련 코드는 아래와 같다.


댓글 없음:

댓글 쓰기