본문 바로가기
Spring

[Actuator + Prometheus + Grafana] 모니터링 간단한 구현 #1

by 개미가되고싶은사람 2024. 10. 20.

간단한 소개

spring boot actuator: 스프링부트 내부 라이브러리로, 실행 중인 어플리케이션에 메트릭을 엔드포인트로 제공합니다.
Prometheus: actuator가 제공하는 메트릭을 엔드포인트로 가져와 프로메테우스 자체적으로 저장하는 DB에 저장합니다.
Grafana: Prometheus에서 저장한 메트릭을 시각화하고, 원하는 정보만 볼 수 있도록 대시보드를 구성합니다.

 

spring boot Actuator 설정

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

액추에이터는 스프링 부트 내장 라이브러리이기 때문에, 사용하려면 build.gradle 파일에 의존성 코드를 한 개만 추가하면 됩니다.

 

 

Prometheus 설정

프로메테우스는 메트릭을 수집하고 저장하는 자체적인 데이터베이스입니다. 애플리케이션과 프로메테우스를 연동하여 메트릭을 수집하려면 두 가지 작업이 필요합니다.

 

1. 애플리케이션 설정

프로메테우스가 애플리케이션의 메트릭을 수집하려면, 애플리케이션에서 프로메테우스 포맷에 맞춰 메트릭을 생성해야 하며, 프로메테우스는 JSON 형식의 메트릭을 이해하지 못하므로 적절한 포맷으로 변환해야 합니다. 다행히도, 마이크로미터가 이 과정을 간편하게 처리해주며, 마이크로미터는 액추에이터를 추가하면 자동으로 포함되는 라이브러리입니다. 메트릭 포맷의 차이점은 프로메테우스에서는 점(.) 대신 언더스코어(_)를 사용해야 한다는 점입니다.

 

1-1 build.gradle - 프로메테우스 라이브러리 추가

implementation 'io.micrometer:micrometer-registry-prometheus'

해당 코드를 추가하면, 스프링 부트와 액추에이터가 자동으로 마이크로미터의 프로메테우스 구현체를 등록하여 동작하도록 설정됩니다. 그리고 프로메테우스 메트릭 엔드포인트인actuator/prometheus가 자동으로 추가됩니다.

 

참고로 /actuator는 액추에이터의 기본 경로입니다. 기본 경로를 변경하면, 프로메테우스 메트릭 엔드포인트도 변경된 URL에 따라 /xxx/prometheus와 같이 변경됩니다. 즉 액추에이터의 기본 경로를 수정하면 프로메테우스 엔드포인트의 경로도 함께 변경됩니다.

 

1-2 application.yml - 엔드포인트 활성화 설정

 management:
  endpoints:
    web:
      exposure:
        include: "*"

간단한 예시이기 때문에 액추에이터 엔드포인트는 간단하게 설정하겠습니다.

 

 

2. 프로메테우스 설정

이제 프로메테우스가 특정 애플리케이션의 메트릭을 주기적으로 수집하도록 설정하려면 prometheus.yml 파일을 수정하여 애플리케이션의 /actuator/prometheus 엔드포인트를 호출하도록 하고, 수집 주기를 설정하여 프로메테우스가 정해진 간격으로 메트릭을 가져오도록 합니다. 파일 위치는 공식 홈페이지에서 다운로드할 때와 명령어를 통해 다운로드할 때 생성되는 파일의 위치가 다릅니다. 해당 링크를 참조해주세요. 공식 홈페이지에서 다운로드하시면 다운로드한 폴더 안에 있습니다.

 

prometheus.yml

 - job_name: "spring-actuator"
   metrics_path: '/actuator/prometheus'
   scrape_interval: 10s
   static_configs:
     - targets: ['localhost:8080']

❗❗앞의 띄어쓰기 2칸에 주의❗❗

  • job_name : 메트릭 수집 작업의 이름을 지정하는 옵션이며, 임의의 이름을 사용하면 됩니다.
  • metrics_path : 수집할 경로를 지정
  • scrape_interval : 수집할 주기를 설정
  • targets : 수집할 서버의 IP, PORT를 지정

참고로 수집 주기를 10초로 했지만 기본 값은 1분입니다. 수집 주기를 너무 짧게 하면 당연히 애플리케이션의 영향을 미칠 수 있습니다.

 

3. 실행

prometheus.exe를 실행 후 http://localhost:9090 접속

접속 화면

 

 

Grafana 설정

그라파나는 데이터 시각화 및 모니터링 툴로, 다양한 메트릭을 수집하고 시각화할 수 있습니다.

 

 

1. 실행

/bin/grafana-server.exe 실행 후 기본 URL인 http://localhost:3000에 접속합니다.

id/password에 admin를 입력하면 초기 화면이 접속됩니다.

 

그라파나 기본 설정 파일에 아이디는 기본 설정이라고 설명되어 있고, 비밀번호는 grafana를 처음 시작하기 전이나 프로필 설정에서 변경할 수 있습니다. 라고 명시되어 있는데 id/pw 변경은 안해봐서 정확한 내용은 모르겠습니다 ㅎㅎ

 

초기화면

2. 프로메테우스와 연동

일단 그라파나에서 프로메테우스를 데이터소스로 사용해서 데이터를 읽어올 수 있게 세팅해야 합니다.

 

Add new data source -> Prometheus 클릭

 

그라파나에서 프로메테우스를 데이터 소스로 설정할 때, 프로메테우스의 URL을 입력해야 합니다. 저희는 기본 설정인 http://localhost:9090을 입력하면 됩니다. 이때, 프로메테우스가 실행 중이어야 정상적으로 연결이 이루어집니다. 

 

설정을 완료한 후, "Save & Test" 버튼을 클릭합니다. 정상적으로 연결되면 위의 사진과 같은 메시지가 표시됩니다. 이제 그라파나에서 프로메테우스의 메트릭 데이터를 활용할 수 있습니다.

 

3. 간단한 대쉬보드 사용

 

Dashboards 클릭  ->  new 클릭(오른쪽 상단)  -> Import 

 

해당 칸에 "4701" 입력 후 "Load" 클릭하면 다른 사람이 만들어둔 JVM 관련 대쉬보드를 사용할 수 있습니다. 해당 대쉬보드 말고 다른 사용자들이 만든 대시보드를 사용하고 싶다면, 아래 주소에서 찾아보실 수 있습니다.

 

결과

 

 

그라파나 공유 대시보드 사이트

https://grafana.com/grafana/dashboards

 

Grafana dashboards | Grafana Labs

No results found. Please clear one or more filters.

grafana.com