Prometheus와 Grafana로 API 성능 지표 대시보드 만들기
실시간 API 모니터링을 위해 Prometheus로 메트릭을 수집하고 Grafana로 시각화하는 성능 대시보드 구축
모니터링 대시보드의 필요성
장애 조기 감지: 에러율, 응답 시간 등 이상 징후를 빠르게 포착하여 심각한 장애로 번지기 전에 조치
성능 병목 분석: 어떤 API가 느린지, DB 쿼리가 얼마나 실행되는지 등 데이터 기반 최적화 포인트 파악
용량 계획: 트래픽 추이, CPU/메모리 사용량 분석으로 향후 필요한 인프라 자원 예측
Prometheus와 Grafana 개요
Prometheus
Pull 방식으로
/metrics엔드포인트에서 데이터 수집시계열 데이터 저장에 특화
PromQL 쿼리 언어 제공
Alertmanager를 통한 알림 기능
Grafana
다양한 데이터 소스 지원
유연한 시각화 패널
동적 대시보드 구성
커뮤니티 템플릿 활용 가능
Django DRF에 django-prometheus 적용
1. 라이브러리 설치
pip install django-prometheus2. settings.py 설정
INSTALLED_APPS = [
'django_prometheus',
]
MIDDLEWARE = [
'django_prometheus.middleware.PrometheusBeforeMiddleware',
# ... other middlewares
'django_prometheus.middleware.PrometheusAfterMiddleware',
]3. urls.py 설정
urlpatterns = [
path('', include('django_prometheus.urls')),
]Prometheus 서버 설정
prometheus.yml 파일 작성
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'django-app'
static_configs:
- targets: ['host.docker.internal:8000']Docker 실행
docker run -p 9090:9090 -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheusGrafana 대시보드 구성
Docker 실행
docker run -d -p 3000:3000 grafana/grafana데이터 소스 연결
Prometheus를 데이터 소스로 추가
URL:
http://host.docker.internal:9090
주요 PromQL 쿼리
API 요청률:
sum(rate(django_http_requests_total_by_method_view_transport_status[5m])) by (view)API 에러율:
(sum(rate(django_http_requests_total_by_method_view_transport_status{status=~"5.."}[5m])) / sum(rate(django_http_requests_total_by_method_view_transport_status[5m]))) * 100응답 시간:
histogram_quantile(0.95, sum(rate(django_http_requests_latency_seconds_bucket[5m])) by (le, view))
주의사항
메트릭 카디널리티: 고유한 값을 갖는 label 남용으로 인한 Prometheus 서버 부하 방지
보안:
/metrics엔드포인트는 특정 IP에서만 접근 가능하도록 제한알림 설정: 임계치 초과 시 자동 알림 체계 구축 필수
Last updated
