개요
모니터링은 오동작, 에러, 예외, 침입 등을 방지하거나 대응하기 위해 필요합니다.
Spring은 Actuator를 사용하여, 사용자가 모니터링을 쉽게 하도록 지원합니다.
(Spring Actuator - https://nangmandeveloper.tistory.com/12)
그럼에도 사용자가 서버를 모니터링하는 것은 쉬운 일만은 아닙니다.
Actuator는 데이터를 텍스트 형태로 보내주기 때문에, 가독성이 떨어집니다.
쉽게 말해 직관성이 부족합니다.
Prometheus, Grafana를 이용해 이러한 부분을 보완할 수 있습니다.
Prometheus
https://prometheus.io/download/
Download | Prometheus
An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.
prometheus.io
Prometheus 다운로드 페이지에 들어가면 여러 버전들이 있습니다.
Pre-release버전은 2.49.0-rc.1입니다.
하지만, 이 버전을 사용하면 문제가 생길 수 있어 2.48.1버전을 사용하는 것을 추천드립니다.
(서버 환경 : Java21, SpringBoot 3.2.1, maven)
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
SpringBoot의 pom.xml에 해당 의존성을 추가합니다.
actuator는 해당 의존성 추가 이후 prometheus가 읽을 수 있는 micrometer형태의 데이터를 제공합니다.
Spring Actuator를 사용할 때, 위의 장면을 보실 수 있습니다.
이 때, actuator/prometheus라는 경로를 확인할 수 있습니다.
Spring Actuator는 Prometheus를 사용하기 위한 정보를 제공합니다.
Prometheus를 다운로드 받았다면, 해당 폴더로 들어가 prometheus.yml파일을 열어야 합니다.
메모장 등으로 열어도 됩니다.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
- job_name: "spring-actuator"
metrics_path: '/actuator/prometheus'
scrape_interval: 1s
static_configs:
- targets: ["localhost:8080"]
이후, scrape_configs에 job_name 설정을 추가합니다.
metrics_path에서 방금 보았던 prometheus정보를 입력합니다.
scrape_interval은 prometheus가 서버로부터 정보를 받는 주기를 뜻합니다.
default는 15초이고, 너무 빠르게 설정하면 서버에 무리가 갈 수 있기 때문에 주의가 필요합니다.
설정을 마쳤다면 저장을 한 뒤 prometheus.exe를 실행합니다.
cmd창이 실행된 이후, localhost:9090 혹은 127.0.0.1:9090으로 접속하면 아래와 같은 화면을 볼 수 있습니다.
검색창에 cpu를 검색해서 나오는 자동완성 검색어 process_cpu_usage를 클릭합니다.
이후 Graph탭을 클릭하면, 시간별 CPU사용량을 볼 수 있습니다.
Spring Actuator를 단순하게 사용했을 때보다 직관적으로 모니터링을 할 수 있습니다.
Grafana
Prometheus를 사용해 보면서, 아래와 같은 요구사항이 생겼습니다.
1. 편하게 여러 데이터를 봤으면 좋겠다.
2. 새로고침을 하지 않아도 실시간으로 업데이트되었으면 좋겠다.
이를 만족하는 서비스가 Grafana입니다.
https://grafana.com/grafana/download/10.0.0?pg=oss-graf&plcmt=hero-btn-1
Download Grafana | Grafana Labs
Overview of how to download and install different versions of Grafana on different operating systems.
grafana.com
위의 링크로 접속하면, Grafana download page로 접속할 수 있습니다.
Windows운영체제라면, zip파일을 다운받은 이후 bin폴더 내의 grafana-server를 실행하면 됩니다.
콘솔창이 어느 정도 진행된 이후, 3000번 포트로 접속하면 grafana monitoring page로 접근할 수 있습니다.
(localhost:3000, 127.0.0.1/3000)
id : admin
pw : admin
이를 입력하면 password를 변경하라는 창이 뜨는데, skip을 누르면 됩니다.
좌측 메뉴의 Dashboards를 클릭하면 새 대시보드를 만들 수 있습니다.
Grafana에서 여러 정보를 실시간으로 확인하려면 대시보드를 만들어야 하기 때문에, Create Dashboard를 클릭합니다.
Add visualization을 클릭합니다.
Datasource는 Prometheus입니다.
왼쪽 밑의 Metric에 process_cpu_usage를 선택, run query를 클릭합니다.
이후 그래프 가로축(시간)을 최근 5분으로 바꾼 모습입니다.
오른쪽 위의 Apply를 클릭하면 Dashboard화면으로 갈 수 있습니다.
Dashboard화면에서는 원하는 데이터들의 그래프를 한번에 볼 수 있습니다.
오른쪽 위의 Add옆, 플로피디스크 아이콘을 클릭하면 현재 대시보드를 저장할 수 있습니다.
이후 Dashboard메뉴를 클릭하면 방금 만들었던 대시보드를 볼 수 있습니다.
1. Spring Actuator출력 데이터를 micrometer로 변환
2. 해당 micrometer형식 데이터를 Prometheus에서 입력
3. Grafana를 Prometheus에 연동, Prometheus에서 제공받는 데이터를 대시보드 형식으로 관리
이러한 구조로 서버의 정보가 사용자에게 시각화되어 전달될 것입니다.