임도현의 성장
[Spring-Boot] Prometheus + Grafana 모니터링 구축 본문
🤔모니터링이 필요한 이유?
- 서비스 안정성 유지 (System Reliability)
- 서버, DB, 애플리케이션 등 다양한 컴포넌트가 정상적으로 동작하는지 실시간으로 확인할 수 있음
- 로그만으로 분석하기 어려운 경우, 메트릭 데이터를 기반으로 장애 원인 파악 가능
- 성능 최적화 (Performance Optimization)
- 애플리케이션의 응답 속도, DB 쿼리 성능 등을 모니터링하여 최적화 가능
- 예: 특정 API 호출이 느려지는 패턴을 분석해 코드 개선
- 리소스 관리 (Resource Management)
- 서버의 CPU, 메모리, 디스크 사용량을 지속적으로 체크
- 예: 특정 시간대에 트래픽이 몰린다면 → 서버 증설 or 로드 밸런싱 설정
모니터링이 없으면 시스템이 언제, 왜 느려졌는지 또는 장애가 발생했는지 알 수 없다!
Prometheus + Grafana를 활용하면 실시간 상태 체크 & 문제 발생 전에 대응 가능!
🧐아키텍쳐
프로메테우스가 애플리케이션에서 발생하는 동작들에 대한 메트릭을 수집하여 그나파나라로 시각화하여 환경을 구성한다.

🚓Actuator란?
Spring Boot 애플리케이션의 운영 정보와 모니터링을 제공하는 라이브러리입니다. Actuator를 사용하면 애플리케이션의 상태 정보를 노출하여 쉽게 확인할 수 있으며 실행 중인 애플리케이션의 로그, 메모리 사용량, HTTP 요청 수 등의 정보를 수집할 수 있습니다.
🚑메트릭(Metric)란?
메트릭(Metric)이란 측정 가능한 양이나 특성을 나타내는 지표로, 시스템의 상태나 성능을 수치화한 데이터다. 사용자가 측정하고자 하는 값을 Time series 즉, 시간에 따른 변화를 기록하고 이를 통해 부하를 처리하는 방안에 대해 고민할 수 있습니다.
🚌프로메테우스(Prometheus)란?
프로메테우스(Prometheus)는 시스템 모니터링과 경보(alerting)를 위한 오픈소스 도구다. 애플리케이션 메트릭(CPU, 메모리, 요청 수) 수집 스프링 부트에서 프로메테우스를 사용하기 위해서는 Spring Actuator를 사용하여 메트릭 수집을 위한 엔드포인트를 노출시킨다.
🚗그나파나(Grafana)란?
그라파나(Grafana)는 오픈 소스 시각화 및 대시보드 도구로 다양한 데이터 소스와 통합되어 다양한 유형의 데이터를 시각화하고 사용자가 쉽게 대시보드를 구성할 수 있는 기능을 제공한다. 가장 일반적으로 사용되는 데이터 소스가 프로메테우스이다. 이러한 데이터 소스로부터 그라파나는 데이터를 쿼리하고, 그래프, 차트, 테이블 등 다양한 시각화 요소를 사용하여 데이터를 시각적으로 표현한다.
🚀의존성 주입
위에 설명했듯이 메트릭 수집을 위해 Actuator 와 Prometheus 의존성을 주입한다.
implementation 'org.springframework.boot:spring-boot-starter-actuator'
runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
🦉Actuator 앤드포인트 확인
애플리케이션 실행 후 http://localhost:8080/actuator에 접속하면 현재 액추에이터가 제공하는 엔드포인트 목록을 확인할 수 있다. 현재 기본적으로 health 엔드포인트만 활성화된 상태이다. 메트릭 수집 도구인 Prometheus에 메트릭을 제공하기 위해 엔드포인트를 활성화 해 주어야 한다.
{
"_links": {
"self": {
"href": "http://localhost:8080/actuator",
"templated": false
},
"health": {
"href": "http://localhost:8080/actuator/health",
"templated": false
},
"health-path": {
"href": "http://localhost:8080/actuator/health/{*path}",
"templated": true
}
}
}
🙉application.yml
- management.endpoints.web.exposure.include: prometheus
- 이 설정으로 Prometheus활성화하고 http://localhost:8080/actuator/prometheus 으로 접속하면 외부에서 접근 가능하게 된다.
- management.endpoint.prometheus.enabled: true
- Prometheus Actuator 엔드포인트를 활성화한다. 이 설정이 없으면 /actuator/prometheus 엔드포인트는 동작하지 않는다. Prometheus는 이 엔드포인트를 통해 메트릭 데이터를 수집한다.
management:
endpoints:
enabled-by-default: true # Spring Boot 3.x에서는 필수
web:
exposure:
include: "prometheus" # 특정 Actuator 엔드포인트를 웹에 노출
endpoint:
prometheus:
enabled: true
👻메트릭 정보를 확인
http://localhost:8080/actuator/prometheus 로 접속하면 커넥션, 세션, 스레드 등과 같은 애플리케이션 메트릭 정보를 확인할 수 있다.

💩prometheus 설정
global:
scrape_interval: 15s # 기본 메트릭 수집 주기 기본 값은 1분
evaluation_interval: 15s # 규칙 평가 주기 기본 값은 1분
scrape_configs:
- job_name: 'spring-boot-app'
metrics_path: '/actuator/prometheus' # Spring Boot Actuator의 Prometheus 엔드포인트
scheme: http
static_configs:
- targets:
- 'host.docker.internal:8080' # 접근 할 URL
🐙docker-compose.yml
Docker Compose 파일은 Prometheus와 Grafana를 하나의 네트워크(monitoring)에서 실행하도록 구성되어 있다. 이를 실행하면 모니터링을 위한 여러 애플리케이션(Prometheus, Grafana 등)이 자동으로 시작되며, Prometheus가 메트릭을 수집하고, Grafana가 이를 시각화할 수 있도록 연결된다.
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
networks:
- monitoring
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana-storage:/var/lib/grafana # Grafana 데이터 유지
depends_on:
- prometheus
networks:
- monitoring
volumes:
grafana-storage:
driver: local
networks:
monitoring:
driver: bridge
🐳Docker 컨터이너 받기
CMD 창에서 프로젝트 docker-compose.yml 경로로 가서 docker-compose up -d 명령어를 입력하면 Docker Desktop에 compose_docker라는 컨테이너가 다운로드 받아짐 안에는 docker-compose.yml에서 설정했듯이 Prometheus, Grafana 이미지들도 같이 다운 받아 진다.

🍘Prometheus 접속
Prometheus에 접속을 하기위해 http://localhost:9090로 접속하면 아래와 같은 화면이 보인다. 프로메테우스 대시보드 화면으로 검색바에 메트릭 정보를 입력해서 조회할 수 있다.

😖메트릭 종류
http_server_requests_seconds_count 메트릭 정보를 확인하기 위해 검색해 보았더니 정상적으로 데이터를 가져오고있다는 것을 확인할 수 있다. Prometheus에서도 메트릭 데이터를 그래프로 시각화할 수 있지만 Grafana를 통해 더욱 효과적으로 시각화할 수 있다.
메트릭 이름 | 설명 |
jvm_memory_used_bytes | JVM이 사용 중인 메모리 (바이트) |
http_server_requests_seconds_count | HTTP 요청 수 |
process_cpu_usage | 애플리케이션의 CPU 사용량 |
jvm_threads_live_threads | 현재 활성 스레드 개수 |

🐧Prometheus 접속 확인
만약 메트릭 정보를 확인하기 위해 검색했을 때 에러가 뜨면 접속 상태를 확인해봐야 한다. http://localhost:9090/targets에 접속했을 때 밑에 사진 처럼 UP이면 연결이 잘 된거고 DOWN이면 Prometheus가 Spring Boot에 접근을 못하고있다는 뜻이다.

🎃Grafana 접속
http://localhost:3000에 접속을 하면 아래와 같은 로그인 화면을 볼 수 있다. 초기 아이디와 비밀번호는 admin이다. Grafana에서 메트릭 데이터를 시각화하기 위해서는 2가지 설정이 필요하다.

1. Grafana 데이터 소스 추가
1-1 메인페이지에서 데이터 소스 추가를 눌러 줍니다.

1-2. Prometheus를 선택해 줍니다.

1-3. Connection에 연결할 Prometheus URL 주소를 입력해주면 된다.

2. Grafana 대시보드 생성
2-1 Dashboards에 들어와 New페이지에 import를 클릭한다.

2-2. 템플릿 설정
Grafana는 다양한 템플릿을 제공하는데 아래 사이트에 접속해 원하는 대시보드를 찾아 ID를 복사해주어 아래 사진 처럼 넣어 Load를 클릭합니다. 저는 Spring Boot 3이라고 검색하면 나오는 19004 대시보드를 사용했습니다.
Grafana dashboards | Grafana Labs
No results found. Please clear one or more filters.
grafana.com

2-3. Load를 하면 Options에 대시보드 이름이 나온다. 이름은 변경해도 상관 없다.
그리고 밑에 아까 설정해주었던 Prometheus를 선택해주고 import 해준다.

🍟대시보드 완성
이렇게 Prometheus와 Grafana를 활용하면 애플리케이션의 상태를 실시간으로 모니터링하고, 성능 이슈나 장애를 빠르게 감지하여 안정적인 서비스를 운영할 수 있다.

기본 값은 Basic Statistics으로 기본적인 통계 지표를 나타내고 Basic Statistics말고도 JVM Statistics - Memory 세션을 열면 아래 이미지 처럼 메모리 상태를 시각화하여 메모리 소비 패턴을 분석 할 수 있다.


'Spring Boot' 카테고리의 다른 글
[Spring-Boot] 객체 지향 설계 원칙 SOLID (0) | 2025.02.25 |
---|---|
[Spring-Boot] QueryDsl 적용해보기 (0) | 2025.02.17 |
[Spring-Boot] 스프링 데이터 JPA (1) | 2025.02.04 |
[Spring-Boot] Exception 예외처리 (0) | 2025.01.14 |
[Spring-Boot] Redis에 저장 조회 해보기 (1) | 2025.01.11 |