docs: Phase 1 모니터링 계획 (252+ 일 shadow run)

## Phase 1 모니터링 목표

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

## 실시간 대시보드 (Prometheus + Grafana)

### Panel 1: Shadow Run 진행률
- 총 거래일: 252+
- 누적 거래일: [실시간]
- 완료율: [실시간]%

### Panel 2: 메트릭 저장 상태
- 저장된 행: [count]
- NULL 비율: [%]
- 신규 행 (일): [count]

### Panel 3: PBO/DSR/OOS 추이
- PBO: [실시간]
- DSR: [실시간 평균]
- OOS Drift: [%]
- 7일 이동평균: [그래프]

### Panel 4: 시스템 상태
- Job 상태: [Running/Failed]
- DB 연결: [Connected]
- API 상태: [성공률]%
- 에러율: [%]

### Panel 5: 데이터 품질
- 결측값: [%]
- 이상치: [count]
- 데이터 범위: [min~max]

### Panel 6: Job 성능
- 실행 시간: [ms]
- 성공률: [%]
- 재시도: [count]

## 알림 규칙 (Alert Rules)

### P1 (Critical): 즉시 개입
- Job 실행 실패 → 5분 내 대응
- 메트릭 저장 실패 → 5분 내 대응
- API 응답 불가 → 5분 내 대응

### P2 (High): 15분 내 대응
- 메트릭 이상치 (PBO > 1.0 또는 DSR < -1.0)
- NULL 비율 급증 (> 10%)
- DB 연결 지연 (> 2초)

### P3 (Medium): 1시간 내 대응
- OOS 드리프트 급증 (> 5%)
- Job 실행 시간 증가 (> 10분)
- 결측값 발생 (> 1%)

### P4 (Low): 다음 업무일
- 이상치 감지 (> 0.5%)
- 로그 볼륨 증가 (> 1M/day)

## 모니터링 일정

### 일일 체크 (09:00, 14:00, 18:00)
- 09:00: Job 실행 + 에러 로그 확인
- 14:00: 누적 진행률 + 메트릭 추이
- 18:00: 일일 최종 확인 + 야간 준비

### 주간 리뷰 (매주 금요일 14:00)
- 누적 진행률 (vs 계획)
- 메트릭 통계 분석
- 발생 문제 & 해결
- 다음주 계획

### 월간 리뷰 (매월 1일 09:00)
- 월간 진행률
- 메트릭 분석
- 누적 문제 정리
- 경영진 보고

## 메트릭 정의

### PBO (Probability of Backtest Overfit)
- 정의: PBO = 1 - (OOS_Sharpe / IS_Sharpe)
- GO: < 20%
- 경고: > 30%

### DSR (Daily Sharpe Ratio)
- 정의: DSR = E[Daily Returns] / Std[Daily Returns]
- GO: > 0.5
- 경고: < 0.3

### OOS Drift (Out-of-Sample Performance Drift)
- 정의: Drift = |OOS_Perf - IS_Perf| / IS_Perf × 100%
- GO: < 2.5%
- 경고: > 3%

## 모니터링 도구

### Prometheus (메트릭 수집)
- Scrape Target: kartsell.taxbaik.com:5002/metrics
- Interval: 15초
- Retention: 90일

### Grafana (시각화)
- 대시보드: K-ArtSell Aegis Phase 1
- 새로고침: 30초

### AlertManager (알림)
- Email: ops-team@kartsell.com
- Slack: #phase-1-monitoring
- PagerDuty: [설정됨]
- SMS (P1만): [설정됨]

### Elasticsearch + Kibana (로깅)
- 인덱스: kartsell-phase1-*
- 유지기간: 90일

## 대응 절차

### Critical 문제 (P1)
1. 감지: 자동 알림 (5분)
2. 확인: 실제 문제 인지 (5분)
3. 분석: 원인 파악 (15분)
4. 대응: 조치 실행 (30분)
5. 보고: 기록 (1시간)

### 모니터링 기간

- 시작: 2026-08-02 (Phase 1 시작)
- 기간: 252+ 거래일 (50-90 달력일)
- 완료: 2026-10-30 (예상)
- 리포트: Phase 2 검증 (2026-11-01)에 활용

## 리포트

### 일일 리포트
- 누적 거래일 + 완료율
- 메트릭 현황 (PBO/DSR/OOS)
- 시스템 상태
- 발생 문제

### 주간 리포트
- 누적 진행률
- 메트릭 추이 (표)
- 주요 지표
- 문제 & 해결

### 월간 리포트
- 월간 진행률
- 메트릭 분석
- 누적 문제 & 해결
- 다음 월 전망

## 체크리스트

### 모니터링 설정
 Prometheus 설정
 Grafana 대시보드
 AlertManager 규칙
 Elasticsearch 인덱스
 Slack 통합
 Email 설정
 PagerDuty 연동

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

## 최종 상태

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

## 기간

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

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-08-11 23:25:28 +09:00
parent 41531470d3
commit 9ad79460ad
+697
View File
@@ -0,0 +1,697 @@
# 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 (월간 리포트)