📍 로깅과 모니터링이란?
📍 Prometheus와 Grafana는 뭘까?(+Node Exporter, AlertManager)
📍 또 Prometheus와 Grafana는 언제 사용할까?
📍 Prometheus와 Grafana 구현
💡 로깅과 모니터링이란?
🔎 로깅
로깅은 시스템이나 애플리케이션에서 발생하는 이벤트를 기록하는 프로세스를 의미합니다.
이러한 로그는 문제 해결, 보안 감사, 성능 분석 등에 활용됩니다.
🔎 모니터링
모니터링은 시스템의 상태나 성능을 지속적으로 관찰하고, 이상 징후나 성능 저하를 감지하여 신속한 대응을 가능하게 하는 프로세스입니다.
❓ 왜 로깅과 모니터링이 중요할까?
1) 장애 발생 시 빠른 원인 파악
실시간으로 서버 상태 및 애플리케이션 성능을 확인하여 문제 발생 즉시 대응할 수 있습니다.
2) 애플리케이션 성능 최적화
API 응답 시간, DB 쿼리 성능, 시스템 리소스 사용량을 분석하여 성능을 개선할 수 있습니다.
3) 시스템 가용성 및 안정성 향상
CPU 사용량이 90% 이상이면 알림을 받아 장애를 사전에 예방할 수 있습니다.
4) 운영 효율성 증가
로그만으로는 부족한 실시간 메트릭을 활용하여 운영 자동화 및 최적화가 가능합니다.
💡 Prometheus, Grafana, Node Exporter, AlertManager
🔎 Prometheus
Prometheus는 오픈소스 모니터링 및 경고 시스템으로, 시계열(time-series) 데이터를 수집하고 저장하는 역할을 합니다.
특징
- 시계열 데이터 수집 (API 응답 시간, CPU 사용량, 메모리 사용량 등)
- 데이터를 자체 저장소(TSDB)에 저장
- PromQL(Prometheus Query Language)로 데이터 조회 가능
- AlertManager와 연동하여 특정 조건에서 알림 트리거 가능
활용 예시
- Spring Boot 애플리케이션의 API 응답 속도 모니터링
- 서버의 CPU, 메모리 사용량 모니터링
- DB 성능 및 트랜잭션 모니터링 등
🔎 Grafana
Grafana는 다양한 데이터 소스(Prometheus, MySQL, Elasticsearch 등)에서 데이터를 가져와 시각적으로 대시보드를 구성하는 도구입니다.
특징
- Prometheus에서 수집한 데이터 시각화 가능 ➡️ Prometheus와 궁합이 좋음!
- 대시보드를 이용해 실시간 모니터링 가능
- 알림(Alerts) 기능을 제공하여 이상 감지 시 경고 발생 가능
- 다양한 플러그인 지원 (MySQL, PostgreSQL 등 연동 가능)
활용 예시
- Prometheus에서 수집한 서버 리소스(CPU, Memory, Disk 사용량) 시각화
- API 응답 시간 변화 그래프 생성
- 특정 시간대에 발생한 성능 저하 원인
🔎 Node Exporter
Node Exporter는 서버의 CPU, 메모리, 디스크 사용량 등의 메트릭을 Prometheus가 수집할 수 있도록 노출하는 Exporter입니다.
특징
- Linux 서버의 시스템 리소스(CPU, Memory, Disk, Network) 모니터링
- Prometheus가 데이터를 수집할 수 있도록 메트릭을 HTTP 엔드포인트로 제공 (:9100/metrics)
- 다양한 Exporter(Windows용 Exporter, DB Exporter 등)와 함께 사용 가능
활용 예시
- 서버의 CPU, RAM, Disk I/O, 네트워크 상태를 실시간으로 모니터링
- 특정 애플리케이션이 과도한 리소스를 사용하는지 분석
🔎 AlertManager
AlertManager는 Prometheus에서 감지한 이상 징후(예: CPU 사용량 90% 초과)를 기반으로 Slack, Discord, Email, PagerDuty 등으로 알림을 보내는 도구입니다.
특징
- Prometheus의 Alert Rule을 기반으로 경고(Alerts) 트리거
- Slack, Discord, 이메일, PagerDuty, OpsGenie 등 다양한 알림 채널 지원
- 알림을 그룹화하고, 중복된 알람을 합치는 기능(Deduplication) 제공
- 알림의 중요도 설정(긴급, 경고 등) 가능
활용 예시
- CPU 사용량이 90% 이상일 때 Slack 또는 이메일로 알림 전송
- API 응답 시간이 3초 이상 지속되면 알림 발송
- DB 연결 장애 발생 시 즉시 알림 전송
이번 게시물에서는 AlertManager를 다루지 않습니다.
⚙️ Prometheus와 Grafana 설정 구현
Docker를 사용한 이유
1) 빠르고 간편한 환경 설정
- Prometheus, Grafana, Node Exporter, AlertManager 등을 각각 설치하려면 설정할 게 많지만, Docker를 사용하면 단일 docker-compose.yml 파일로 쉽게 실행할 수 있음
- 새로운 환경에서도 docker-compose up -d 한 줄이면 모니터링 시스템을 실행할 수 있음
2) 의존성 및 호환성 문제 해결
- 각 도구마다 버전이나 실행 환경이 다를 수 있지만, Docker 컨테이너를 사용하면 일관된 환경에서 실행 가능
- OS에 따라 설치 방법이 다를 수도 있는데, Docker 컨테이너는 이런 차이를 해결해 줌
3) 격리된 환경에서 안전하게 실행 가능
- 개발/테스트 환경과 운영 환경을 분리할 수 있어, 운영 서버에서 직접 설치하는 부담 없이 로컬에서 먼저 테스트 가능
- 애플리케이션과 모니터링 도구가 충돌할 가능성을 줄여줌
4) 쉽게 확장 가능
- Docker Compose를 사용하면 여러 개의 모니터링 대상(서버, 애플리케이션 등)을 손쉽게 추가 가능
- Prometheus, Grafana뿐만 아니라 추가적으로 MySQL Exporter, Redis Exporter 같은 것들도 필요할 때 쉽게 붙일 수 있음
프로젝트 환경
Java: 21
Spring Boot: 3.4.4
폴더

우선 docker-monitoring 폴더에 docker-compose.yml, prometheus.yml 파일을 만든 후에 docker compose up –d 명령어를 통해 실행했습니다.
Docker Compose는 여러 개의 도커 컨테이너를 한 번에 실행하고 관리할 수 있는 도구입니다.
즉, 여러 개의 컨테이너가 필요한 복잡한 애플리케이션을 쉽게 관리할 수 있도록 도와줍니다.
docker-compose.yml

prometheus.yml


이렇게 컨테이너 설정을 마치고 실행을 시키면 위와 같이 Grafana와 Prometheus에 접속할 수 있습니다.
✅ 실행 결과

Grafana는 이처럼 서버 리소스(CPU, Memory, Disk 사용량)를 시각화 할 수 있습니다.