이 글에서 얻는 것
- Prometheus로 메트릭을 수집하고 저장합니다.
- PromQL로 메트릭을 쿼리합니다.
- Grafana로 대시보드를 만듭니다.
- 알림 규칙을 설정합니다.
1) Prometheus 기본
# docker-compose.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
grafana:
image: grafana/grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
prometheus.yml:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'spring-boot-app'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['app:8080']
2) Spring Boot 통합
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus'
}
management:
endpoints:
web:
exposure:
include: health,metrics,prometheus
metrics:
export:
prometheus:
enabled: true
3) PromQL 기본
# HTTP 요청 수
http_server_requests_seconds_count
# 초당 요청 수 (RPS)
rate(http_server_requests_seconds_count[5m])
# 평균 응답 시간
rate(http_server_requests_seconds_sum[5m]) / rate(http_server_requests_seconds_count[5m])
# P95 응답 시간
histogram_quantile(0.95, rate(http_server_requests_seconds_bucket[5m]))
# 에러율
rate(http_server_requests_seconds_count{status=~"5.."}[5m]) / rate(http_server_requests_seconds_count[5m])
4) Grafana 대시보드
1. Data Source 추가:
Configuration → Data Sources → Prometheus
URL: http://prometheus:9090
2. Dashboard 생성:
- Requests Per Second (RPS)
- Response Time (P50/P95/P99)
- Error Rate
- JVM Memory
- CPU Usage
3. 템플릿 변수:
- $app: 애플리케이션 선택
- $env: 환경 선택
5) 알림 규칙
# alert-rules.yml
groups:
- name: app_alerts
rules:
- alert: HighErrorRate
expr: rate(http_server_requests_seconds_count{status=~"5.."}[5m]) > 0.05
for: 5m
labels:
severity: critical
annotations:
summary: "High error rate detected"
요약
- Prometheus: 메트릭 수집 및 저장
- PromQL: 메트릭 쿼리 언어
- Grafana: 시각화 대시보드
- 알림으로 장애 조기 감지
다음 단계
- APM:
/learning/deep-dive/deep-dive-apm-basics/ - 알림 전략:
/learning/deep-dive/deep-dive-alerting-strategy/
💬 댓글