[Spring] Actuator와 Prometheus, Grafana를 이용한 모니터링 도구 구축

Juseong Han·2024년 8월 20일
1

Spring Actuator

Actuator란?

Spring Actuator는 Spring Boot 애플리케이션에 대한 프로덕션 준비 기능을 제공하는 모듈이다. 이 모듈은 애플리케이션의 상태, 메트릭, 트래픽 및 기타 유용한 정보를 모니터링하고 관리하는 데 필요한 다양한 엔드포인트를 제공한다.

가이드문서

시작하기

1. 의존성 추가

spring-actuator는 springboot에서 공식지원하는 starter라이브러리가 존재한다.
gradle에 의존성을 추가한다.

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

2. 테스트

springboot에 actuator의존성이 추가되면 spring어플리케이션은 자동으로 모니터링과 여러가지 관리가 가능한 엔드포인트를 열게된다. 기본적으로 /actuator 경로로 접속하면 해당 엔드포인트들을 확인할 수 있다.

기본적으로 제공되는 엔드포인트의 종류는 다음과 같다.

  • /actuator/health: 애플리케이션의 건강 상태를 확인하는 엔드포인트이다.
  • /actuator/metrics: 애플리케이션의 메트릭(성능 지표)을 제공하는 엔드포인트이다.
  • /actuator/env: 애플리케이션의 환경 설정 정보를 보여주는 엔드포인트이다.
  • /actuator/info: 애플리케이션에 대한 메타데이터 정보를 제공하는 엔드포인트이다.
  • /actuator/beans: 애플리케이션에서 관리되는 스프링 빈의 정보를 보여주는 엔드포인트이다.
  • /actuator/loggers: 로깅 관련 설정을 확인하고 조정할 수 있는 엔드포인트이다.
  • /actuator/threaddump: 현재 실행 중인 스레드의 상태를 보여주는 엔드포인트이다.
  • /actuator/auditevents: 감사 이벤트에 대한 정보를 제공하는 엔드포인트이다.
  • /actuator/heapdump: JVM 힙 덤프를 생성하여 메모리 사용 상태를 분석할 수 있는 엔드포인트이다.
  • /actuator/scheduledtasks: 현재 활성화된 스케줄링 작업의 상태를 보여주는 엔드포인트이다.

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

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

Grafana는 오픈 소스 데이터 시각화 및 모니터링 도구로, 다양한 데이터 소스에서 수집한 메트릭을 시각화하고 대시보드 형태로 표현할 수 있게 해준다.

Windows는 링크를 통해 설치할 수 있다.

Grafana의 기본 포트는 3000번 포트이다. 설치가완료되면 localhost:3000 으로 접속해보자
기본 로그인 정보는 admin/admin이다.

대시보드 설정

접속이 완료되면 아래의 절차를 따른다.

    1. Grafana의 Connection에서 Datasources로 들어간다.
    1. Add Datasources
    1. Prometheus선택
    1. 다음과같이 설정한다.

      Prometheus 포트가 기본 9090이므로 9090으로 등록한다.
    1. Save & Test
    1. Dashboards - New - New Dashboards - Add Visualization으로 들어간다.
    1. 방금 생성한 prometheus Datasource를 선택한다.
profile
개발이 하고 싶어요💻 개발이 너무 재밌는 Juseong입니다.🖐

0개의 댓글