RT-O19: OMS 실시간 KPI 모니터링

🎯 KPI 모니터링이란?Actionable Alert First

모니터링은 단순 그래프가 아니라 actionable alert가 핵심이다. 이상이 그래프에 보이는 것만으로는 부족하고, 누가·언제·어떻게 조치할지 정해진 알림이 30초 이내 담당자에게 도달해야 의미가 있다.

RT-O19는 (a) 각 서비스 / OTel 기반 Prometheus exporter, (b) 역할별 view를 가진 Grafana 대시보드, (c) Alertmanager → Slack/SMS 라우팅, (d) 알림에 자동 첨부되는 런북(runbook) 링크 4개 축으로 구성된다. OMS AI 전 모듈의 임계는 EDD 달성률 90% 미만, p99 500ms 초과, error 1% 초과 세 가지를 기준으로 잡는다.

🧭 KPI 모니터링 파이프라인5 stages · metric_emit → runbook_link
STEP 1
metric_emit

각 서비스에서 Prometheus exporter로 metric 노출. EDD/p99/error/queue 4종 + 비즈니스 KPI 32종.

STEP 2
aggregate

Prometheus가 30초 주기 scrape + 1분 rollup. 라벨 집계로 서비스/리전/우선순위별 분리.

STEP 3
rule_eval

alert_rules 각 윈도우별 평가 (30m / 5m / 1m). recurring spike는 자동 suppress 그룹으로 묶임.

STEP 4
alert_route

Slack 채널 + 담당자 SMS + PagerDuty escalation. 심각도/시간대별로 채널이 갈라지고, 30초 이내 도달 보장.

STEP 5
runbook_link

자동 runbook 링크 + Grafana drill-down 첨부. ack 시 MTTA가 측정되어 메타 메트릭으로 재투입.

🐍 알림 룰 정의 (Python)
# Grafana + Prometheus 기반 실시간 모니터링
alert_rules = [
    {"metric": "edd_rate",    "threshold": 0.90, "window": "30m"},
    {"metric": "api_p99",     "threshold": 500,  "window": "5m"},
    {"metric": "error_rate", "threshold": 0.01,  "window": "1m"},
]
# 임계값 초과 시 Slack + SMS 자동 알림
def evaluate(metric, value, rule):
    if value > rule["threshold"]:
        notify(channel="slack", severity="P2")
        notify(channel="sms",   severity="P1")
        attach(runbook(metric))
➗ 알림 지연 & MTTA 모델scrape → eval → route → ack
alert_latency = scrape_lag + eval_lag + route_lag
MTTA = ack_timefire_time
# alert_latency 목표 ≤ 30s · MTTA 목표 ≤ 60s · false positive ≤ 1.5%
edd .30edd_rate < 0.90 · 30분 윈도우. EDD 달성률이 임계 미만이면 P2 (Slack) 발송.
p99 .25api_p99 > 500ms · 5분 윈도우. DB slow query / GC pause 의심 → runbook 자동 첨부.
error .25error_rate > 1% · 1분 윈도우. P1 SMS + PagerDuty 에스컬레이션 동시 발송.
queue .20queue_depth > 1k · 백프레셔 신호. 직접 알림보다 capacity dashboard 갱신 트리거.

예) p99가 720ms로 5분간 지속되면 5m 윈도우 임계 초과로 alert가 발사된다. scrape_lag 12s + eval_lag 4s + route_lag 8s = 약 24초 후 Slack 알림이 도착하고, runbook 링크에서 DB slow query 검색 쿼리가 자동 실행된다.

📡 알림 채널 SLA10월 측정 기반 · 채널별 도달/인식 시간
채널도달 시간인식 시간사용 사례비고
Slack6s30s일반채널별 라우팅 + thread reply ack
SMS12s90s심각P1 전용 · 통신사 deliverability 의존
PagerDuty8s60s야간/주말온콜 로테이션 · 미응답 시 escalation
이메일38s6m비긴급주간 리포트 · 정책 변경 알림

심각도별로 채널을 다르게 매핑한다. P1(error/edd 심각)은 SMS + PagerDuty 동시 발송, P2는 Slack 단일, P3 비긴급은 이메일로만 송출된다. 이메일을 P1에 사용하지 않는 이유는 인식 시간이 분 단위라 30초 SLA를 충족할 수 없기 때문이다.

참고문헌
[1] 김지훈 외, "OMS 실시간 KPI 모니터링 대시보드와 알림 룰 설계", IntraLogis 사내 보고서, 2026.10
[2] Prometheus Authors, "Prometheus Documentation: Alerting Rules", 공식 문서, 2025
[3] Grafana Labs, "Grafana Alerting Best Practices", Grafana Docs, 2024
[4] Beyer, B. et al. The Site Reliability Workbook, O'Reilly, 2018
[5] Datadog, "Reducing Alert Fatigue at Scale", Datadog Engineering Blog, 2023