
이전에 Prometheus 를 가지고 Spring boot 애플리케이션의 메트릭 데이터를 시각화 해봤다. 이번엔 Prometheus 에 Grafana 를 추가하여 대시보드를 만들고, 시각적으로 메트릭을 표현해보자.

Grafana는 오픈소스 기반의 데이터 시각화 및 모니터링 도구이다. 시계열 데이터를 수집하는 다양한 백엔드(Prometheus, InfluxDB, Loki 등)와 연결해서,대시보드 형태로 실시간 그래프나 지표를 시각화할 수 있다.
비유하자면 Prometheus 가 센서라면, Grafana는 센서로 측정한 값들을 보여주는 화면이라고 할 수 있다.
Prometheus 와 Grafana 를 같이 사용하면 메트릭 데이터를 매우 시각적으로 표현할 수 있다. 또한 Kubernetes, Docker, Spring Boot, Node.js 등 → 이 모든 생태계에서 모니터링 표준은 거의 Prometheus → Grafana(시각화) 를 사용한다.
나중에 다루겠지만, Grafana에서 내가 일일이 대시보드를 만들지 않아도 템플릿을 활용하면 쉽게 모니터링이 가능하다.
이전에 설정했던 설정을 그대로 사용한다.
도커 컨테이너를 사용해서 서로 분리된 독립 컨테이너로 실행하고 서로 네트워크를 통해 통신한다.

docker-compose.yml
version: '3'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
depends_on:
- prometheus
prometheus.yml
global:
scrape_interval: 5s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'spring-boot-app'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['host.docker.internal:8080']
prometheus targets 설정
localhost:8080 은 자신을 가리키기 때문에 애플리케이션이 실행중인 host.docker.internal:8080 를 연결해야한다.이제 컨테이너를 실행시켜 보자
docker compose up -d
grafana 를 실행 시켰던 3030 port 로 접근해보면 http://127.0.0.1:3000 다음과 같은 창이 나올것이다.
id: admin pw: admin
Grafana는 데이터를 보여주는 도구일 뿐, 직접 데이터를 수집하지 않기 때문에 외부에서 수집된 데이터를 가져와야 한다. 나는 Prometheus 에서 데이터를 가져올 것이다.

Spring Boot 애플리케이션의 JVM, HTTP, 시스템, DB 메트릭 시각화를 하는 템플릿을 하나 불러와 보겠다.

대시보드를 살펴보면 다음과 같은 정보를 모니터링 할 수 있다.


포스팅 잘 읽었습니다!
추가로 Spring Boot 서버와 Prometheus/Grafana 서버를 분리해서 로드 테스트를 진행하는 것이 좋습니다.
그 이유는 같은 서버에 두면 CPU, 메모리, 디스크 I/O 리소스를 서로 공유하게 되어 서비스 서버의 성능이 정확하게 측정되지 않을 수 있기 때문입니다.
또한 모니터링 시스템 자체도 리소스를 꽤 사용하기 때문에 실제 부하 테스트 결과(응답 시간, 처리량 등)가 왜곡될 수 있습니다.
운영 환경에서도 보통 서비스와 모니터링 서버를 분리하니 테스트도 그렇게 구성하는 걸 추천드립니다!