[DevOps] Prometheus & Grafana: 장애 방어 모니터링 구축 (골든 시그널)
📌 핵심 요약
- 기존 Push 방식과 대비되는 Prometheus의 Pull 방식 아키텍처 이해
- 구글 SRE 팀이 제안하는 4가지 골든 시그널(Golden Signals) 모니터링 방법
- Grafana 연동 및 실무에서 꼭 설정해야 할 Alert(알람) 전략
"서버 죽었어?"라는 고객의 항의 전화를 받고서야 장애를 인지한다면, 그 개발팀의 운영 능력은 낙제점입니다. 모니터링 없는 배포는 눈을 감고 고속도로를 달리는 것과 같습니다.
AWS CloudWatch나 Datadog 같은 훌륭한 유료 도구도 있지만, 비용 부담이 만만치 않습니다. 전 세계 데브옵스 표준으로 자리 잡은 오픈소스 조합, Prometheus(수집)와 Grafana(시각화)를 통해 "잠들 수 있는 밤"을 만드는 법을 알아봅니다.
1. 아키텍처의 혁명: Pull vs Push
과거의 모니터링 도구(Zabbix 등)는 각 서버의 에이전트가 중앙 서버로 데이터를 쏘는 Push 방식이었습니다. 서버가 늘어날수록 중앙 서버에 부하가 걸리고, 트래픽이 폭주할 때 모니터링 시스템부터 죽는 경우가 많았습니다.
Prometheus는 반대로 Pull 방식을 채택했습니다.
- Exporter: 각 서버(App, DB)는
/metrics라는 엔드포인트에 자신의 상태를 노출만 합니다. - Prometheus Server: 주기적(예: 15초)으로 각 타겟을 방문하여 데이터를 긁어갑니다(Scraping).
- 장점: 수집 서버가 죽어도 애플리케이션에는 전혀 영향이 없으며, 수천 대의 서버로 확장하기 쉽습니다.
2. 무엇을 봐야 하는가? (골든 시그널)
수많은 그래프 중 무엇부터 대시보드에 띄워야 할까요? 구글 SRE(Site Reliability Engineering) 북에서는 4가지 골든 시그널을 정의합니다.
| 시그널 | 설명 | PromQL 예시 (쿼리) |
|---|---|---|
| Latency (지연 시간) | 요청 처리에 걸리는 시간 (평균보다는 P95, P99가 중요) | rate(http_request_duration_seconds_sum[5m]) / rate(http_request_duration_seconds_count[5m]) |
| Traffic (트래픽) | 초당 요청 수 (RPS) | rate(http_requests_total[1m]) |
| Errors (에러율) | 전체 요청 대비 5xx 에러 비율 | rate(http_requests_total{status=~"5.."}[5m]) |
| Saturation (포화도) | 자원(CPU, Memory)이 얼마나 꽉 찼는지 | 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) |
3. Grafana 연동 및 알람(Alert) 설정
Prometheus의 기본 UI는 투박합니다. Grafana를 연결하면 데이터를 시각적으로 아름답게 볼 수 있을 뿐만 아니라, Alerting 기능을 사용할 수 있습니다.
🚨 알람 규칙 설정 팁
"CPU 80% 넘으면 알람" 같은 단순한 규칙은 피로감만 유발합니다(False Alarm).
- 증상 기반 알람 (Symptom-based): "CPU가 높다"보다는 "응답 속도가 2초를 넘었다"가 더 중요한 알람입니다.
- 지속 시간 고려: 1초 튀는 것은 무시하고, "5분 동안 에러율이 1% 이상일 때"와 같이 조건을 거십시오.
- 채널 분리: 심각한 장애(P0)는 전화/SMS로, 경미한 경고(P3)는 Slack 채널로 보내세요.
4. 결론
완벽한 시스템은 없습니다. 하지만 "관측 가능한(Observable)" 시스템은 있습니다.
처음부터 화려한 대시보드를 만들려 하지 마세요. ① Spring Boot Actuator와 Prometheus 연동, ② Grafana에 기본 대시보드 Import, ③ 에러율 1% 이상 시 Slack 알림. 이 3단계만 구축해도 주말이 훨씬 평화로워질 것입니다.