Spring Actuator는 Spring Boot 애플리케이션에 대한 프로덕션 준비 기능을 제공하는 모듈이다. 이 모듈은 애플리케이션의 상태, 메트릭, 트래픽 및 기타 유용한 정보를 모니터링하고 관리하는 데 필요한 다양한 엔드포인트를 제공한다.
spring-actuator는 springboot에서 공식지원하는 starter라이브러리가 존재한다.
gradle에 의존성을 추가한다.
implementation 'org.springframework.boot:spring-boot-starter-actuator'
springboot에 actuator의존성이 추가되면 spring어플리케이션은 자동으로 모니터링과 여러가지 관리가 가능한 엔드포인트를 열게된다. 기본적으로 /actuator 경로로 접속하면 해당 엔드포인트들을 확인할 수 있다.
기본적으로 제공되는 엔드포인트의 종류는 다음과 같다.
localhost/actuator로 진입한 모습
위를보면 알 수 있듯이 모든 엔드포인트가 기본으로 열리는 것은 아니다. 이는 프로퍼티 설정을 통해 세부설정이 가능하다.
management:
endpoints:
web:
exposure:
include: health, info, metrics # 노출할 엔드포인트 목록
exclude: beans, env # 제외할 엔드포인트 목록
추가적으로 각 엔드포인트에 대해 세부정보를 노출할지 여부도 프로퍼티를 통해 설정할 수 있다.
management:
endpoints:
web:
exposure:
include: "health"
endpoint:
health: # 엔드포인트
show-details: always # 세부정보 노출여부 management.endpoint.{endpointName}.show-details
Actuator가 제공하는 기능은 강력하기때문에 외부에 노출되어서는 안된다. 별도의 security설정도 좋지만 실제 배포환경에서는 아예 포트를 분리하고 기본 엔드포인트를 변경하여 보안상 이점을 취할 수 있다.
management:
endpoints:
web:
exposure:
include: "*"
base-path: '/adminmaster' # 기본 /actuator경로를 /adminmaster로 변경
endpoint:
health:
show-details: always
server:
port: 9999 # actuator접근가능한 포트를 직접지정
이렇게 actuator를 사용하면 어플리케이션 헬스체크등의 모니터링을 수행할 수 있다. 하지만 하나하나 정보를 살펴보기도 어려울뿐더러 주기적으로 이를 수집해서 상태비교를 하기위해서는 별도의 모니터링 도구를 만들거나 사람이 고생해야한다. 이를 해결할 수 있는 방법이 Prometheus이다.
Prometheus는 오픈 소스 모니터링 및 경고 시스템으로, 시계열 데이터베이스를 기반으로 메트릭을 수집하고 쿼리할 수 있는 기능을 제공한다.
Windows에서는 링크를 통해 로컬에 설치할 수 있다.
다운로드 후 압축을 해제하고 prometheus.exe를 실행하면 된다.
아래와같은 화면이 나온다면 정상기동된 것
메트릭 수집: Spring Boot Actuator는 기본적으로 다양한 메트릭을 제공한다. Prometheus와 통합하면 이러한 메트릭을 Prometheus 서버로 쉽게 수집할 수 있다.
Prometheus 엔드포인트: Spring Boot 애플리케이션에 Prometheus 지원을 추가하면 /actuator/prometheus 엔드포인트가 활성화된다. 이 엔드포인트는 Prometheus 서버가 데이터를 수집할 수 있는 형식으로 메트릭을 노출한다.
설정 방법: Spring Boot 프로젝트에 Prometheus 의존성을 추가한 후, Actuator를 통해 Prometheus 엔드포인트를 활성화할 수 있다. Gradle을 사용하는 경우, build.gradle 파일에 다음 의존성을 추가할 수 있다.
implementation 'io.micrometer:micrometer-registry-prometheus'
application.yml 설정: Prometheus 엔드포인트를 활성화하기 위해 application.yml 파일에 다음과 같이 설정할 수 있다.
management:
endpoints:
web:
exposure:
include: prometheus # Prometheus 엔드포인트를 포함
Prometheus 서버 설정: Prometheus 서버의 설정 파일(prometheus.yml)에서 Spring Boot 애플리케이션의 메트릭 엔드포인트를 스크랩하도록 설정할 수 있다.
scrape_configs:
- job_name: 'spring-boot-app' # Job 이름
scrape_interval: 5s # 스크랩 주기
static_configs:
- targets: ['localhost:9999'] # 애플리케이션의 호스트와 포트
- targets: ['my-api-server:9999'] # docker로 어플리케이션 컨테이너가 올라간 경우 컨테이너 이름을 명시해도된다.
labels:
group: 'production' # 추가적인 레이블 설정 (필요 시)
metrics_path: /adminmaster/prometheus # 변경된 Prometheus 엔드포인트 경로
위와같은 설정을 하게되면 Prometheus서버는 설정한 주기마다 어플리케이션의 endpoint를 호출하며 매트릭정보를 수집하게된다.
Grafana는 오픈 소스 데이터 시각화 및 모니터링 도구로, 다양한 데이터 소스에서 수집한 메트릭을 시각화하고 대시보드 형태로 표현할 수 있게 해준다.
Windows는 링크를 통해 설치할 수 있다.
Grafana의 기본 포트는 3000번 포트이다. 설치가완료되면 localhost:3000 으로 접속해보자
기본 로그인 정보는 admin/admin이다.
접속이 완료되면 아래의 절차를 따른다.