Files
KArtSell.Aegis/docs/PHASE_1_MONITORING_PLAN.md
T
kjh2064 9ad79460ad 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>
2026-08-11 23:25:28 +09:00

698 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 (월간 리포트)