7.1 Alert 설계
Alert의 목적은 이상한 숫자를 알리는 것이 아니라 사람이 행동해야 할 상황을 전달하는 것입니다. Page, ticket, dashboard를 구분하면 야간 noise를 줄이면서 위험 신호를 놓치지 않을 수 있습니다.
세 등급
| 등급 | 조건 | 예시 |
|---|---|---|
| Page | 사용자가 영향을 받고 즉시 완화 필요 | 오류율 급증/write 불가/SLO 빠른 소진 |
| Ticket | 아직 영향은 작지만 근무 시간 내 조치 필요 | volume 여유 감소/inactive slot WAL 증가 |
| Dashboard | 분석 context이며 단독 행동 불필요 | cache hit 변화/table별 dead tuple |
pg_up == 0을 항상 page로 보내면 monitoring network 장애와 database 장애를 구분하지 못합니다. 사용자 요청 성공률이나 synthetic check가 정상인 경우에는 ticket 등급으로 조사합니다.
증상과 원인 분리
Page는 사용자 증상에 가깝게 둡니다.
- 요청 error ratio
- p95/p99 latency SLO 위반
- transaction 성공률
- write/read freshness
- critical workflow synthetic test
원인 후보는 진단용 alert나 dashboard로 둡니다.
- CPU utilization
- connection 사용률
- dead tuple
- checkpoint 빈도
- replica lag
- storage latency
Replica lag의 등급은 서비스가 replica read나 failover freshness를 요구하는지에 따라 달라집니다.
Exporter 상태를 분리한다
- alert: PostgreSQLExporterUnreachable
expr: up{job="postgres"} == 0
for: 5m
labels:
severity: ticket
annotations:
summary: "Prometheus cannot scrape PostgreSQL Exporter"
- alert: PostgreSQLCollectionFailed
expr: up{job="postgres"} == 1 and pg_up == 0
for: 2m
labels:
severity: ticket
annotations:
summary: "Exporter is reachable but PostgreSQL collection fails"
첫 alert는 scrape 경로, 두 번째는 PostgreSQL connection이나 collector를 조사하며 각각 별도 runbook에 연결합니다.
for와 지속성
순간적인 spike를 모두 alert로 만들지 않습니다.
- alert: PostgreSQLConnectionsNearLimit
expr: instance:pg_connection_utilization:ratio > 0.85
for: 15m
Connection 85%는 예시이며 실제 임계값의 검토 요소는 pooling 방식, reserved connection, 평소 변동, capacity 확보 시간입니다.
Alert annotation
Alert 하나로 첫 조사를 시작할 수 있어야 합니다.
- 무엇이 실패했는지
- 어떤 사용자 영향이 예상되는지
- cluster/instance/database
- 시작 시각과 현재값
- dashboard URL
- runbook URL
- 최근 변경 링크
Annotation에는 metric 이름과 query뿐 아니라 수신자가 바로 조사할 의미와 context를 함께 기록합니다.
Noise review
매달 alert별로 다음을 집계합니다.
- firing 횟수와 시간대
- 사람이 실제 행동한 비율
- 자동 복구된 비율
- 중복 page 수
- false positive와 false negative
- acknowledgement와 완화까지 걸린 시간
Review 결과에 따라 행동하지 않은 page의 threshold를 조정하거나 등급을 ticket으로 내리거나 해당 alert를 삭제합니다.
참고: Prometheus alerting practices, Google SRE Monitoring Distributed Systems