간단한 소개
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
'Spring' 카테고리의 다른 글
[Spring Data JPA] 페이징과 정렬 (1) | 2025.01.03 |
---|---|
[Spring + Prometheus + Grafana] 간단한 커스텀 메트릭 구현 #2 - @Counted, @Timed, MeterBinder (4) | 2024.10.20 |
[Spring Boot] micrometer의 역할 (시스템 모니터링) (0) | 2024.10.18 |
[Spring Boot] 액추에이터(Actuator) 문제 및 해결 방법 (2) | 2024.10.16 |
[Spring Boot] 액추에이터(Actuator) 정리 (1) | 2024.10.16 |