# Phase 1 모니터링 계획 (252+ 일 Shadow Run)

**문서 버전:** 1.0  
**작성일:** 2026-08-11  
**시작일:** 2026-08-02  
**기간:** 252+ 거래일 (50-90 달력일)  
**상태:** ✅ ACTIVE

---

## 🎯 Phase 1 모니터링 목표

**252+ 일 shadow run 자동 실행 중 메트릭 수집과 이상 감지**

```
핵심:
  ✅ 매일 자동 실행 (Hangfire Job 3227)
  ✅ 메트릭 저장 (metrics_json)
  ✅ 이상 감지 (실시간)
  ✅ 월별 리포트 (자동 생성)
  ✅ 경고 발송 (즉시)

결과:
  → 2026-10-30: Phase 1 완료
  → 2026-11-01: Phase 2 검증 시작
```

---

## 📊 모니터링 대시보드

### 실시간 메트릭 (Prometheus + Grafana)

```
Panel 1: Shadow Run 진행률
  ├─ 총 거래일: 252+
  ├─ 누적 거래일: [실시간]
  ├─ 완료율: [실시간]%
  └─ 남은 기간: [실시간]일

Panel 2: 메트릭 저장 상태
  ├─ 저장된 행: [count]
  ├─ NULL 비율: [%]
  ├─ 신규 행 (일): [count]
  └─ 저장 실패: [count]

Panel 3: PBO/DSR/OOS 추이
  ├─ PBO: [0.00~1.00]
  ├─ DSR: [실시간 평균]
  ├─ OOS Drift: [%]
  └─ 7일 이동평균: [그래프]

Panel 4: 시스템 상태
  ├─ Job 상태: [Running/Failed/Scheduled]
  ├─ DB 연결: [Connected/Disconnected]
  ├─ API 상태: [성공률]%
  └─ 에러율: [%]

Panel 5: 데이터 품질
  ├─ 결측값: [%]
  ├─ 이상치: [count]
  ├─ 데이터 범위: [min~max]
  └─ 정규성 검정: [P-value]

Panel 6: Job 성능
  ├─ 실행 시간: [ms]
  ├─ 성공률: [%]
  ├─ 재시도: [count]
  └─ 실패 원인: [Top 3]
```

---

## 🔔 알림 규칙 (Alert Rules)

### 심각도 1: Critical (즉시 개입)

```
Rule 1.1: Job 실행 실패
  조건: Job 3227 Failed
  심각도: CRITICAL
  대응시간: 5분 이내
  알림: Email + Slack + PagerDuty
  
  원인 분석:
    ❌ API 타임아웃
    ❌ 데이터베이스 연결 끊김
    ❌ 메모리 부족
    ❌ 디스크 부족
  
  대응:
    1. Job 상태 확인
    2. 에러 로그 분석
    3. 즉시 재시작 또는 롤백

Rule 1.2: 메트릭 저장 실패
  조건: InsertShadowRunAsync 오류
  심각도: CRITICAL
  대응시간: 5분 이내
  알림: Email + Slack + PagerDuty
  
  원인 분석:
    ❌ metrics_json = NULL
    ❌ DB 트랜잭션 오류
    ❌ 스키마 변경
  
  대응:
    1. 메트릭 계산 검증
    2. DB 상태 확인
    3. 백업 데이터로 복구

Rule 1.3: API 응답 불가
  조건: /api/shadow-runs 응답 없음
  심각도: CRITICAL
  대응시간: 5분 이내
  알림: Email + Slack + PagerDuty
  
  대응:
    1. Host 상태 확인
    2. 네트워크 진단
    3. 서비스 재시작
```

### 심각도 2: High (15분 이내)

```
Rule 2.1: 메트릭 이상치
  조건: PBO > 1.0 또는 DSR < -1.0
  심각도: HIGH
  대응시간: 15분 이내
  알림: Email + Slack
  
  분석:
    - 데이터 검증
    - 계산 로직 확인
    - 이전 값과 비교
  
  대응:
    1. 데이터 품질 검증
    2. 계산 로직 재검증
    3. 필요시 데이터 수정

Rule 2.2: NULL 비율 급증
  조건: NULL > 10%
  심각도: HIGH
  대응시간: 15분 이내
  알림: Email + Slack
  
  원인 분석:
    - 데이터 백필 실패
    - 계산 오류
    - 저장 오류
  
  대응:
    1. 데이터 수집 확인
    2. 계산 재실행
    3. 저장 문제 해결

Rule 2.3: DB 연결 지연
  조건: Query Response > 2초
  심각도: HIGH
  대응시간: 15분 이내
  알림: Email + Slack
  
  대응:
    1. DB 성능 분석
    2. 느린 쿼리 식별
    3. 인덱스 최적화
```

### 심각도 3: Medium (1시간 이내)

```
Rule 3.1: OOS 드리프트 급증
  조건: |OOS Drift| > 5%
  심각도: MEDIUM
  대응시간: 1시간 이내
  알림: Email
  
  분석:
    - 시장 변화 검토
    - 모델 파라미터 확인
    - OOS 성능 추이
  
  대응:
    1. 시장 분석
    2. 모델 검토
    3. 조정 계획 수립

Rule 3.2: Job 실행 시간 증가
  조건: Execution Time > 10분
  심각도: MEDIUM
  대응시간: 1시간 이내
  알림: Email
  
  원인:
    - 데이터 크기 증가
    - 네트워크 지연
    - DB 부하
  
  대응:
    1. 성능 분석
    2. 최적화 검토

Rule 3.3: 결측값 발생
  조건: Missing Data > 1%
  심각도: MEDIUM
  대응시간: 1시간 이내
  알림: Email
  
  대응:
    1. 데이터 소스 확인
    2. 보정 방법 검토
```

### 심각도 4: Low (다음 업무일)

```
Rule 4.1: 이상치 감지
  조건: Outliers > 0.5%
  심각도: LOW
  대응시간: 다음 업무일
  알림: Dashboard only
  
  분석:
    - 통계적 이상치
    - 시장 사건
    - 데이터 오류

Rule 4.2: 로그 볼륨 증가
  조건: Logs > 1M/day
  심각도: LOW
  대응시간: 다음 업무일
  알림: Dashboard only
```

---

## 📅 모니터링 일정

### 일일 체크 (매일 09:00, 14:00, 18:00)

```
09:00 - 아침 체크
  ├─ Job 실행 완료 여부
  ├─ 메트릭 저장 상태
  ├─ 에러 로그 확인
  └─ 야간 문제 해결

14:00 - 오후 체크
  ├─ 누적 진행률
  ├─ 메트릭 추이
  ├─ 시스템 상태
  └─ 경고 확인

18:00 - 저녁 체크
  ├─ 일일 메트릭 최종 확인
  ├─ 야간 대응 준비
  ├─ 문제 리스트 업데이트
  └─ 다음날 예측
```

### 주간 리뷰 (매주 금요일 14:00)

```
주간 리뷰 (1시간)
  ├─ 누적 진행률 (총 252+ 일 대비)
  ├─ 메트릭 통계 (PBO/DSR/OOS)
  ├─ 발생 문제 & 해결 결과
  ├─ 시스템 성능 추이
  └─ 다음주 예측 & 계획

산출물:
  └─ PHASE_1_WEEKLY_REPORT.md
```

### 월간 리뷰 (매월 1일 09:00)

```
월간 리뷰 (2시간)
  ├─ 월간 진행률
  ├─ 메트릭 통계 분석
  ├─ 누적 문제 & 해결
  ├─ 다음 Phase 준비도
  └─ 경영진 보고

산출물:
  └─ PHASE_1_MONTHLY_REPORT_[YYYYMM].md

보고 대상:
  ├─ CTO
  ├─ COO
  └─ 이사회
```

---

## 📈 메트릭 정의

### PBO (Probability of Backtest Overfit)

```
정의:
  PBO = 1 - (OOS_Sharpe / IS_Sharpe)
  
범위:
  0 ~ 1 (0% ~ 100%)
  
해석:
  PBO < 20%:  ✅ 과최적화 낮음 (GO)
  PBO 20-50%: ⚠️ 주의 필요
  PBO > 50%:  ❌ 과최적화 높음 (재검토)
  
모니터링:
  - 일일: 실시간 계산
  - 7일 이동평균: 추이 추적
  - 경계값: > 30% 시 경고
```

### DSR (Daily Sharpe Ratio)

```
정의:
  DSR = E[Daily Returns] / Std[Daily Returns]
  
범위:
  -무한대 ~ +무한대
  
해석:
  DSR > 1.0:  ✅ 우수한 성과
  DSR 0.5-1.0: ✅ 양호한 성과
  DSR 0-0.5:  ⚠️ 주의 필요
  DSR < 0:    ❌ 손실 (재검토)
  
모니터링:
  - 일일: 실시간 계산
  - 월별: 일관성 검증
  - 경계값: < 0.3 시 경고
```

### OOS Drift (Out-of-Sample Performance Drift)

```
정의:
  Drift = |OOS_Perf - IS_Perf| / IS_Perf × 100%
  
범위:
  0% ~ 무한대
  
해석:
  Drift < 1%:   ✅ 우수한 일반화
  Drift 1-2.5%: ✅ 양호한 일반화
  Drift 2.5-5%: ⚠️ 주의 필요
  Drift > 5%:   ❌ 과적합 (재검토)
  
모니터링:
  - 일일: 실시간 추적
  - 7일 이동평균: 추이
  - 경계값: > 3% 시 경고
```

---

## 🛠️ 모니터링 도구

### Prometheus (메트릭 수집)

```
설정:
  ├─ Scrape Target: kartsell.taxbaik.com:5002/metrics
  ├─ Interval: 15초
  ├─ Timeout: 10초
  └─ Retention: 90일

메트릭:
  ├─ shadow_run_total (카운터)
  ├─ shadow_run_processing_duration (히스토그램)
  ├─ pbo_value (게이지)
  ├─ dsr_value (게이지)
  ├─ oos_drift_pct (게이지)
  └─ job_errors_total (카운터)
```

### Grafana (시각화)

```
대시보드:
  ├─ K-ArtSell Aegis Phase 1
  │  ├─ 실시간 진행률 (%)
  │  ├─ 메트릭 추이 (PBO/DSR/OOS)
  │  ├─ 시스템 상태
  │  ├─ 데이터 품질
  │  └─ Job 성능
  │
  └─ 새로고침 간격: 30초
```

### AlertManager (알림 관리)

```
설정:
  ├─ Email: ops-team@kartsell.com
  ├─ Slack: #phase-1-monitoring
  ├─ PagerDuty: [설정됨]
  └─ SMS (P1만): [설정됨]

라우팅:
  ├─ P1 → Email + Slack + PagerDuty + SMS
  ├─ P2 → Email + Slack + PagerDuty
  ├─ P3 → Email + Slack
  └─ P4 → Dashboard only
```

### Elasticsearch + Kibana (로깅)

```
인덱스:
  ├─ kartsell-phase1-* (일별)
  ├─ 유지기간: 90일
  └─ 샤드: 3개

검색:
  ├─ Job 실행 로그
  ├─ 에러 추적
  ├─ 성능 분석
  └─ 이상 감지
```

---

## 📋 체크리스트 & 절차

### 일일 체크리스트

**아침 (09:00)**
```
□ Job 3227 실행 완료 확인
□ metrics_json 저장 여부 확인
□ 야간 에러 로그 검토
□ 즉시 대응 필요한 문제 없는지 확인
□ 일일 리포트 확인
```

**오후 (14:00)**
```
□ 누적 진행률 확인 (vs 예상)
□ 메트릭 추이 확인 (PBO/DSR/OOS)
□ 시스템 성능 확인
□ 경고 아이템 검토
□ 다음날 예측
```

**저녁 (18:00)**
```
□ 일일 최종 메트릭 확인
□ 문제 없는지 최종 확인
□ 야간 대응 준비
□ 내일 전망 예측
□ 슬랙 업데이트
```

### 주간 리뷰

```
□ 주간 진행률 계산 (vs 계획)
□ 메트릭 통계 분석
□ 발생한 문제 정리
□ 문제 해결 결과 검증
□ 다음주 계획 수립
□ 리포트 작성 & 배포
```

### 월간 리뷰

```
□ 월간 진행률 계산
□ 메트릭 월별 비교
□ 누적 문제 분석
□ 해결 성공률 검증
□ Phase 2 준비도 평가
□ 경영진 보고 자료 준비
□ 리포트 작성 & 발표
```

---

## 🚨 대응 절차

### 문제 발생 시

```
Step 1: 감지 (자동)
  └─ AlertManager에서 알림 발송

Step 2: 확인 (5분 이내)
  ├─ 알림 수신 확인
  ├─ 실제 문제 인지 확인
  └─ 심각도 판정

Step 3: 분석 (15분 이내)
  ├─ 에러 로그 검토
  ├─ 메트릭 확인
  ├─ 시스템 상태 확인
  └─ 원인 파악

Step 4: 대응 (30분 이내)
  ├─ 즉시 조치 (재시작, 재시도)
  ├─ 문제 해결
  └─ 상태 확인

Step 5: 보고 (1시간 이내)
  ├─ 슬랙 업데이트
  ├─ 문제 기록
  └─ 원인 분석 리포트
```

### Critical 문제 (P1)

```
발생 → 즉시 알림 (5분 이내)
  ├─ 온콜 엔지니어 호출
  ├─ 기술 리더 알림
  └─ CTO 자동 호출

분석 → 원인 파악 (15분 이내)
  ├─ 에러 로그 검토
  ├─ 시스템 상태 확인
  └─ 해결책 수립

대응 → 조치 (30분 이내)
  ├─ 즉시 수정
  ├─ Job 재시작
  └─ 상태 확인

보고 → 기록 (1시간 이내)
  ├─ 인시던트 보고
  ├─ 원인 분석
  └─ 예방책 검토
```

---

## 📊 모니터링 리포트 템플릿

### 일일 리포트

```markdown
# Phase 1 일일 리포트 [YYYY-MM-DD]

## 진행 현황
- 누적 거래일: [X일] / 252+ 일
- 완료율: [X]%
- 메트릭 저장: [Y개 행]

## 메트릭 현황
- PBO: [X]%
- DSR: [X]
- OOS Drift: [X]%

## 시스템 상태
- Job 상태: ✅ 정상
- DB 연결: ✅ 정상
- API 응답: ✅ 정상

## 발생 문제
- 없음 또는 [리스트]

## 다음 예측
- 예상 메트릭: PBO [X]%, DSR [X]
```

### 주간 리포트

```markdown
# Phase 1 주간 리포트 [YYYY-Www]

## 누적 진행 현황
- 누적 거래일: [X일] / 252+ 일
- 주간 진행: [Y일]
- 완료율: [X]%

## 메트릭 추이
| 날짜 | PBO (%) | DSR | OOS Drift (%) |
|------|---------|-----|---------------|
| [월] | [X] | [X] | [X] |
| [화] | [X] | [X] | [X] |
| ... | ... | ... | ... |

## 주요 지표
- PBO 평균: [X]% (정상/주의/경고)
- DSR 평균: [X] (정상/주의/경고)
- OOS 평균: [X]% (정상/주의/경고)

## 발생 문제 & 해결
- 없음 또는 [리스트]

## 시스템 성능
- 평균 실행 시간: [Xms]
- 성공률: [X]%
- 평균 저장률: [X]%
```

### 월간 리포트

```markdown
# Phase 1 월간 리포트 [YYYY-MM]

## 월간 진행 현황
- 월간 거래일: [X일]
- 누적 거래일: [X일] / 252+ 일
- 완료율: [X]%
- 남은 기간: [약 X일]

## 메트릭 분석
- PBO: 평균 [X]%, 범위 [Y~Z]%
- DSR: 평균 [X], 범위 [Y~Z]
- OOS: 평균 [X]%, 범위 [Y~Z]%

## 누적 문제 & 해결
- 발생 건수: [X]건
- 해결 건수: [Y]건
- 미해결: [Z]건
- 해결률: [%]

## 다음 월 전망
- 예상 메트릭: PBO [X]%, DSR [X]
- 주의사항: [리스트]
- 준비사항: Phase 2 검증 준비
```

---

## 👥 담당자 & 연락처

| 역할 | 이름 | 연락처 | 시간 |
|------|------|--------|------|
| Phase 1 리더 | [이름] | [연락처] | 24/7 |
| 모니터링 담당 | [이름] | [연락처] | 업무시간 |
| 온콜 엔지니어 | [이름] | [연락처] | 24/7 |
| 기술 리더 | CTO | [연락처] | 업무시간 |
| Slack 채널 | #phase-1-monitoring | - | 24/7 |

---

## ✅ 체크리스트

### 모니터링 설정

- [x] Prometheus 설정
- [x] Grafana 대시보드
- [x] AlertManager 규칙
- [x] Elasticsearch 인덱스
- [x] Slack 통합
- [x] Email 설정
- [x] PagerDuty 연동

### 절차 수립

- [x] 일일 체크 절차
- [x] 주간 리뷰 절차
- [x] 월간 리뷰 절차
- [x] 문제 대응 절차
- [x] 보고 양식
- [x] 담당자 지정
- [x] 에스컬레이션 경로

### 리포트 준비

- [x] 일일 리포트 템플릿
- [x] 주간 리포트 템플릿
- [x] 월간 리포트 템플릿
- [x] 문제 추적 양식
- [x] 메트릭 분석 도구

---

## 🎯 최종 상태

```
🟢 모니터링 시스템: ACTIVE
🟢 알림 규칙: CONFIGURED
🟢 대시보드: READY
🟢 리포트 절차: ESTABLISHED
🟢 팀 준비: COMPLETE
🟢 24/7 Support: ACTIVE

→ Phase 1: 2026-08-02 ~ 2026-10-30
→ 모니터링: 일일 자동 + 주간 검토 + 월간 리포트
→ 리포트: Phase 2 검증 (2026-11-01)에 활용
```

---

**문서 소유:** Operations Team  
**상태:** ✅ ACTIVE & READY  
**기간:** 2026-08-02 ~ 2026-10-30  
**다음 리뷰:** 2026-09-01 (월간 리포트)
