Files

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

알림 이력 조회

구현 고려사항

  • 알림 폭주를 방지하기 위해 스로틀 정책을 필수로 둡니다.
  • 심각도 기준을 명확히 정의하고 대시보드에 반영합니다.

관련 문서

관련 컴포넌트