[APM] Prometheus + Grafana로 Spring Boot 모니터링 대시보드 만들기

이영재·2025년 3월 27일

Load & Stress Testing

목록 보기
3/4
post-thumbnail

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

Grafana 란?

Grafana는 오픈소스 기반의 데이터 시각화 및 모니터링 도구이다. 시계열 데이터를 수집하는 다양한 백엔드(Prometheus, InfluxDB, Loki 등)와 연결해서,대시보드 형태로 실시간 그래프나 지표를 시각화할 수 있다.

비유하자면 Prometheus 가 센서라면, Grafana는 센서로 측정한 값들을 보여주는 화면이라고 할 수 있다.

Prometheus 와 Grafana 를 같이 사용하면 메트릭 데이터를 매우 시각적으로 표현할 수 있다. 또한 Kubernetes, Docker, Spring Boot, Node.js 등 → 이 모든 생태계에서 모니터링 표준은 거의 Prometheus → Grafana(시각화) 를 사용한다.

나중에 다루겠지만, Grafana에서 내가 일일이 대시보드를 만들지 않아도 템플릿을 활용하면 쉽게 모니터링이 가능하다.

Spring Boot + Prometheus 연동

이전에 설정했던 설정을 그대로 사용한다.

Grafana의 대시보드 모니터링

도커 컨테이너를 사용해서 서로 분리된 독립 컨테이너로 실행하고 서로 네트워크를 통해 통신한다.

Grafana 설치하기 (docker-compose)

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 대시보드 만들기

Grafana는 데이터를 보여주는 도구일 뿐, 직접 데이터를 수집하지 않기 때문에 외부에서 수집된 데이터를 가져와야 한다. 나는 Prometheus 에서 데이터를 가져올 것이다.

1. Data Source 연결하기

  • docker-compose로 Grafana와 Prometheus를 실행했기 때문에 여기서 생성한 Prometheus 컨테이너에 접근을 해야한다.
  • 때문에 같은 네트워크 안에 있는 컨테이너끼리 컨테이너(Prometheus) 이름으로 접근한다.

2. 대시보드 템플릿 불러오기

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

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

  • JVM 메모리
  • GC 활동
  • HTTP 요청
  • 스레드 정보
  • 시스템 상태
  • 데이터베이스 연결(HikariCP)

  • 짧은 시간 Grafana를 켜놓고 모니터링 해봤다.

CPU 사용량 체크

  • [POST 요청] 30명이 동시에 회원가입을 하는 테스트 (10 반복)를 진행해봤는데 12:30에 cpu 사용량이 늘었던걸 볼 수 있었다.
  • 그리고 중간에 점심을 먹는 동안 애플리케이션을 꺼뒀는데, 여전히 모든 데이터를 모니터링 할 수 있었다.

Next

  • 이제 부하 테스트를 위한 준비가 완료되었다.
  • JMeter를 활용하여 테스트 시나리오를 작성하고, 병목현상이 발생하는 지점을 파악하며, 시스템이 어느 정도의 부하를 견딜 수 있는지 테스트해볼 예정이다.
  • 또한, 테스트에 앞서 목표를 설정하고 테스트 계획을 작성하여 단계적으로 성능을 개선해 나갈 계획이다.

2개의 댓글

comment-user-thumbnail
2025년 4월 4일

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

1개의 답글