
1. 모니터링 서버 도입 목적
프로젝트 진행 중에는 대규모 트래픽이 발생하지 않아 모니터링의 필요성을 크게 느끼지 못했습니다. 그러나 최근 JMeter를 활용해 가상의 트래픽을 발생시켜 성능을 측정한 결과, 특정 지점 이후 요청이 실패하는 문제가 발생했습니다. 이때 실패 원인을 정확히 파악할 수 없었고, 향후 대량 트래픽 상황에 대비하기 위해 모니터링 서버의 필요성이 대두되었습니다.
기존에는 요청 실패 시 로그를 수작업으로 분석하여 문제를 확인하고 대응했지만, 이 과정은 시간이 오래 걸리고 비효율적이었습니다. 이러한 한계를 극복하고 실시간으로 시스템 상태를 파악하기 위해 모니터링 서버를 구축하고자 합니다. 이번 블로그에서는 모니터링 서버를 구축하는 과정과 이를 통해 유의미한 지표를 분석하는 방법을 소개하겠습니다.

모니터링을 위해서 위 그림과 같이 별도의 서버에 Prometheus와 Grafana를 설치합니다. Prometheus는 모니터링 시스템으로, Spring Boot 애플리케이션의 매트릭을 Spring Actuator를 통해 9090포트로 데이터를 수집합니다. Grafana는 데이터 시각화 도구로, 3000 포트를 사용하며 Prometheus에서 수집한 데이터를 시각화합니다. 간단하게 Prometheus는 모니터링 서버의 백엔드 서비스, Grafana는 모니터링 서버의 프론트앤드 서비스로 생각하면 쉽습니다!
2. 도입 과정
1. Prometheus와 Grafana를 위한 EC2 인스턴스 준비
- EC2 인스턴스 생성
- Prometheus와 Grafana는 리소스 사용량이 적으므로 t2.micro 또는 t3.micro와 같은 작은 인스턴스 사용합니다.
- 생성된 EC2 인스턴스에 SSH로 접속합니다.
- 보안 그룹 설정
- 스프링 서버가 있는 EC2와 Prometheus EC2 간의 통신을 위해 Prometheus EC2의 9090 포트에 스프링 서버의 IP 또는 CIDR을 허용해줍니다.
- Prometheus는 9090포트를 사용하고 Grafana는 3000포트를 사용하므로 두 개의 포트를 보안 그룹에서 개방해줍니다.
2. Prometheus 설치
- Prometheus 다운로드
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
cd /tmp
curl -LO https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar xvf prometheus-2.47.0.linux-amd64.tar.gz
cd prometheus-2.47.0.linux-amd64
sudo mv prometheus /usr/local/bin/
sudo mv promtool /usr/local/bin/
sudo mv consoles /etc/prometheus/
sudo mv console_libraries /etc/prometheus/
sudo mv prometheus.yml /etc/prometheus/
- Prometheus 설정 파일 수정 : /etc/prometheus/prometheus.yml
scrape_configs:
- job_name: 'spring_server'
static_configs:
- targets: ['<스프링 서버 IP>:8080']
- targets: ['<스프링 서버 IP>:8081']
위 과정은 Prometheus가 데이터를 수집할 대상을 정의하는 설정입니다. 제 프로젝트는 Blue/Green 전략을 사용하기에 8080 포트와 8081 포트를 모두 대상에 등록해줍니다. 여기서 <스프링 서버 IP>는 모니터링 서버와 스프링 서버가 같은 VPC에 있는 경우 private IP를 사용하고 같은 VPC에 위치하지 않은 경우에는 public IP를 사용합니다.
- Prometheus 서비스 등록
sudo nano /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
ExecStart=/usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/
Restart=always
[Install]
WantedBy=multi-user.target
- Prometheus 실행
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
- Prometheus 확인: 브라우저에 <Prometheus EC2 Public IP>:9090 으로 접속해 상태를 확인합니다.

3. Grafana 설치
- Grafana 설치
sudo apt-get update
sudo apt-get install -y grafana
- Grafana 서비스 시작
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
- Grafana 상태 확인: 브라우저에 <Grafana EC2 Public IP>:3000 으로 접속해 상태를 확인합니다.

그라파나를 처음 실행하면 ID와 PW 입력화면이 있는데, 기본 아이디와 비밀번호는 "admin"입니다.
4. Prometheus를 Grafana에 데이터 소스로 추가
- Grafana에서 데이터 소스 설정
- Grafana 대시보드로 이동하여 Configuration > Data Sources를 선택
- Add data source 버튼을 클릭하고 Prometheus를 선택
- Prometheus URL에 http://<Prometheus EC2 Private IP>:9090를 입력
- Save & Test를 클릭하여 연결 상태를 확인
- 대시보드 생성
- Create > Dashboard > Add New Panel을 클릭하여 대시보드를 생성
- spring_server 데이터를 선택하고 원하는 그래프를 설정
5. 스프링 서버의 메트릭스 활성화
- Spring Actuator과 Micrometer 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus'
- application.yml 설정
management:
endpoints:
web:
exposure:
include: '*'
metrics:
export:
prometheus:
enabled: true
- 매트릭스 엔드포인트 확인: http://<스프링 서버 IP>:8080/actuator/prometheus로 접속하여 메트릭스를 확인

3. 지표 분석
아래 좌측 하단의 Metric 탭에서 분석하고자 하는 지표를 선택하여 CPU 사용량, 메모리 사용량, HTTP 요청 수 등 다양한 지표를 분석할 수 있습니다. 또한, 우측 상단의 Time Series가 있는 탭에서 원하는 그래프 모양을 선택하여 지표들을 다양하게 시각화할 수 있습니다.
- Spring Boot 애플리케이션에서 처리 중인 HTTP 요청 수에 대한 지표 분석

- 시스템 CPU 사용률을 나타내는 지표

'Infra' 카테고리의 다른 글
| [Security] Wireguard VPN으로 내 EC2 지키기 (0) | 2025.11.08 |
|---|---|
| [Infra] 실무에서 사용해본 유용한 Docker Swarm 기능들 (6) | 2025.06.26 |
| [Infra] 고가용성 Redis HA 클러스터 구축 (Redis Sentinel) (0) | 2025.05.01 |
| [CI/CD] 배포에 관한 생각 (0) | 2025.04.05 |
| [Infra] 데이터베이스 다중화 (1) | 2024.12.20 |