4.3 KiB
4.3 KiB
monitor - 모니터링 및 알림
개요
monitor 컴포넌트는 시스템 상태 감시, 이상 탐지, 알림 발송을 담당합니다.
책임
- 컴포넌트 헬스 체크 및 연결 상태 모니터링
- 이상 거래/리스크 이벤트 탐지
- 알림 규칙 관리 및 다채널 발송
- 대시보드용 실시간 지표 제공
의존성
graph LR
Monitor[monitor] --> Balance[balance]
Monitor --> Analytics[analytics]
Monitor --> Risk[risk]
Monitor --> DB[(Database)]
Scheduler[scheduler] --> Monitor
style Monitor fill:#009688,color:#fff
주요 기능
1. 시스템 헬스 체크
checkSystemHealth(): HealthStatus
monitorApiConnections(): ConnectionStatus[]
2. 이상 거래 탐지
detectAnomalies(containerId: string): Anomaly[]
checkMarketConditions(): MarketAlert[]
3. 알림 관리
sendAlert(alert: Alert): void
configureAlertRules(rules: AlertRule[]): void
getAlertHistory(from: Date, severity?: AlertSeverity): Alert[]
4. 대시보드 데이터
getDashboardData(): DashboardSnapshot
getRealtimeMetrics(containerId: string): RealtimeMetrics
5. 성능 모니터링
trackLatency(operation: string, duration: number): void
logError(error: Error, context: any): void
데이터 모델
interface HealthStatus {
overall: 'HEALTHY' | 'DEGRADED' | 'DOWN'
components: {
name: string
status: 'UP' | 'DOWN' | 'SLOW'
responseTime?: number
lastCheck: Date
message?: string
}[]
connections: {
broker: 'CONNECTED' | 'DISCONNECTED' | 'ERROR'
database: 'CONNECTED' | 'DISCONNECTED'
dataProviders: Record<string, 'CONNECTED' | 'DISCONNECTED'>
}
resources: {
cpuUsage: number
memoryUsage: number
diskUsage: number
}
checkedAt: Date
}
interface Anomaly {
type: 'POSITION_SPIKE' | 'UNUSUAL_ORDER' | 'UNEXPECTED_FILL' | 'HIGH_IMPACT'
severity: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL'
containerId: string
description: string
details: {
expected?: any
actual: any
threshold?: any
}
detectedAt: Date
resolved: boolean
}
interface Alert {
id: string
type: 'SYSTEM' | 'RISK' | 'EXECUTION' | 'PERFORMANCE' | 'ANOMALY'
severity: 'INFO' | 'WARNING' | 'ERROR' | 'CRITICAL'
title: string
message: string
source: string
containerId?: string
channels: ('EMAIL' | 'SMS' | 'PUSH' | 'SLACK')[]
sentAt?: Date
acknowledged: boolean
acknowledgedAt?: Date
acknowledgedBy?: string
createdAt: Date
}
interface AlertRule {
id: string
name: string
description: string
condition: {
metric: string
operator: '>' | '<' | '=' | '>=' | '<='
threshold: number
}
severity: AlertSeverity
channels: AlertChannel[]
throttle: {
enabled: boolean
minIntervalMinutes: number
}
isActive: boolean
}
interface DashboardSnapshot {
accounts: {
accountId: string
totalEquity: number
cashBalance: number
todayPnL: number
todayReturn: number
}[]
containers: {
containerId: string
name: string
status: 'ACTIVE' | 'PAUSED'
equity: number
todayReturn: number
activeStrategy: string
lastRebalanced: Date
}[]
recentExecutions: {
executionId: string
containerId: string
status: string
completedAt: Date
}[]
activeAlerts: Alert[]
systemHealth: 'HEALTHY' | 'DEGRADED' | 'DOWN'
timestamp: Date
}
interface RealtimeMetrics {
containerId: string
current: {
equity: number
cash: number
positionsCount: number
}
today: {
pnl: number
return: number
tradesCount: number
}
risk: {
currentDrawdown: number
VaR95: number
leverage: number
}
updatedAt: Date
}
API 명세
GET /api/monitor/health
헬스 체크 상태 조회
GET /api/monitor/alerts
알림 이력 조회
구현 고려사항
- 알림 폭주를 방지하기 위해 스로틀 정책을 필수로 둡니다.
- 심각도 기준을 명확히 정의하고 대시보드에 반영합니다.