서론
로그 모니터링에 이어, 매트릭 모니터링을 구축하면서 그 과정에 대해 공유한다.
로그 모니터링과 마찬가지로, 스프링 서버가 "HikariCP Shutdown"만을 남기고 죽는 일이 빈번했다.
그런데 서버가 죽어도 백엔드는 모르다가, 개발하는 프론트가 확인을 하고 문의하는 일이 여러번 발생하면서 매트릭 모니터링에 대한 필요성을 느끼고 이를 구축하기로 결정했다.
🤔 매트릭 모니터링 필요 이유
1. 서버가 다운되었을 때 즉각 대응할 수 있다.
왜 필요해?
클라우드 서버 메모리 부족 문제와 스키마 변경 시 운영, 개발 환경에 변경된 DDL 을 작성하지 않아 서버가 자주 다운되는 일이 있었다.
이런 상황에서 백엔드 크루들은 모르고 즉각 대응을 해주지 못했다.
뭐가 개선되지?
이런 상황에서 매트릭 모니터링을 구축한다면 해결되는 것을 확인해보자.
매트릭 대시보드를 통해 알람을 확인할 수 있게 되면 서버에 장애가 발생한 경우 즉각적인 대응이 가능하다.
2. 메모리 부족 등 서버 매트릭에 대한 사전 알람을 받을 수 있다.
왜 필요해?
나아가 즉각 대응 전에 사전 알람을 확인할 수 있다.
앞서 말한 것처럼 갑자기 서버 메모리 사용량이 증가하거나 등등 모종의 이유로 장애 발생 가능성이 높아지는 경우가 있었다.
미리 임계치를 설정해놓아 그 알람을 받게 되면 다운 타임이 없고도 문제를 예방할 수 있다.
뭐가 개선되지?
로그 모니터링과 마찬가지로 프론트 개발자들이 직접 말하지 않아도 되는 수고로움이 줄고, 백엔드 개발자들은 서버에 문제가 생겼을 경우에도 이를 빨리 캐치하고 대응할 수 있어진다.
자 이제 필요성을 깨달았으니 Spring Actuator, Prometheus, Grafana를 사용한 로그 모니터링 구축을 해보자.
🌊 매트릭 모니터링 구성 흐름
매트릭 모니터링은 크게 아래의 5단계로 구축할 수 있다.
- 메트릭 생성 (Spring 애플리케이션 - Actuator, Micrometer)
- 메트릭 수집 (Prometheus)
- 저장 및 쿼리 (Prometheus)
- 시각화 및 알림 (Grafana)
😀 로그 모니터링 툴 선택하기
일단 우리는 이미 그라파나로 로그 모니터링을 구축하였기 때문에 매트릭 모니터링 대시보드 또한 동일한 그라파나로 관리하고자 하였다.
매트릭 모니터링 구축하기
전체적인 구축과정은 아래와 같다.
구성 파헤치기
1. 메트릭 생성 (Code-zap EC2 Instance)
Spring Boot Actuator
- 애플리케이션 상태, 성능 지표 등의 운영 정보를 제공
- /actuator 엔드포인트를 통해 다양한 정보에 접근 가능
Micrometer
- 애플리케이션 메트릭을 생성하고 수집하는 파사드 라이브러리
- Prometheus 등 다양한 모니터링 시스템과 호환
- 우리는 Prometheus을 사용할 것이기 때문에 Prometheus Micrometer를 사용
- Prometheus Micrometer가 Prometheus가 필요한 형식에 맞춰 액추에이터의 매트릭을 변환해줌
2. 메트릭 수집 (Prometheus)
Prometheus는 Code-zap-monitoring EC2 Instance에서 실행
- 설정된 간격으로 타겟 시스템(이 경우 Spring 애플리케이션)의 메트릭을 수집(스크래핑)
설정 예시 (prometheus.yml):
yamlCopyscrape_configs: # 수집 설정 정의
- job_name: 'spring-actuator'
metrics_path: '/actuator/prometheus' # 메트릭을 가져올 엔드포인트(Spring Boot Actuator의 Prometheus 엔드포인트)
static_configs:
- targets: ['code-zap-ec2-ip:8080'] # 실제 메트릭을 수집할 대상의 주소와 포트(실제 EC2 인스턴스의 IP 주소와 Spring Boot 애플리케이션이 실행되는 포트)
3. 저장 및 쿼리 (Prometheus)
- Prometheus는 수집한 메트릭을 내장 시계열 데이터베이스에 저장
- PromQL(Prometheus Query Language)을 사용하여 저장된 데이터를 쿼리 가능
4. 시각화 및 알림 (Grafana)
Grafana도 Code-zap-monitoring EC2 Instance에서 실행
- Prometheus를 데이터 소스로 설정하여 수집된 메트릭에 접근
- 다양한 차트와 그래프를 통해 메트릭을 시각화
- 대시보드를 구성하여 핵심 지표를 한눈에 볼 수 있음
- 임계값 기반의 알림을 설정하여 문제 상황을 즉시 감지 가능