2025-12-28 23:57:22 +09:00
2025-12-28 16:00:24 +09:00
2025-12-28 23:49:11 +09:00
2025-12-28 18:09:10 +09:00
2025-12-28 23:57:22 +09:00
2025-12-28 15:00:43 +09:00
2025-12-28 15:07:33 +09:00
2025-12-28 14:55:00 +09:00
2025-12-28 12:03:48 +09:00
2025-12-28 15:27:36 +09:00
2025-12-28 15:35:33 +09:00
2025-12-28 23:06:44 +09:00
2025-12-28 16:00:24 +09:00
2025-12-28 23:44:40 +09:00
2025-12-28 12:03:48 +09:00

OSOLIT Monitor

시스템 헬스체크 & 모니터링 대시보드 (Nuxt 3 + PostgreSQL + WebSocket)

주요 기능

📊 실시간 대시보드

  • 서버 상태 모니터링: 다중 서버 헬스체크 및 상태 표시
  • 네트워크 점검: Public(외부망) / Private(내부망) 분리 모니터링
  • 위치별 통계: 서버 위치(Location)별 현황 요약
  • WebSocket 기반 실시간 업데이트
  • 다크/라이트 테마 지원

🌐 네트워크 모니터링

  • Public Network (pubnet): 외부망 연결 상태 점검
  • Private Network (privnet): 내부망 연결 상태 점검
  • 응답 시간 측정 및 에러 메시지 상세 표시

🖥️ 서버 모니터링

  • 다중 서버 대상 관리
  • 서버별 헬스체크 이력 조회
  • 위치별 서버 현황 통계
  • 스케줄러 제어 (시작/중지)

📈 이상탐지 (Anomaly Detection)

  • Baseline 분석: 정상 기준선 대비 이상 탐지
  • Z-Score 분석: 통계적 이상치 탐지
  • Trend 분석: 장기 추세 분석
  • Short-term 분석: 단기 변동 탐지
  • Chart.js 기반 시각화

⚙️ 설정 관리

  • 임계값(Threshold) 설정
  • 스케줄러 간격 조정

기술 스택

구분 기술
Frontend Nuxt 3, Vue 3, Chart.js
Backend Nitro (Node.js)
Database PostgreSQL
Real-time WebSocket
Container Docker
Timezone Asia/Seoul

프로젝트 구조

osolit-monitor/
├── frontend/                    # 프론트엔드 (Pages & Components)
│   ├── index.vue               # 📊 메인 대시보드
│   ├── components/
│   │   ├── DashboardControl.vue
│   │   ├── ServerPortlet.vue
│   │   ├── NetworkPortlet.vue
│   │   ├── LocationStatsPortlet.vue
│   │   ├── SidebarNav.vue
│   │   └── ThemeToggle.vue
│   ├── network/                # 네트워크 모니터링
│   ├── server/                 # 서버 모니터링
│   │   ├── list.vue
│   │   └── history.vue
│   ├── anomaly/                # 이상탐지
│   │   ├── baseline.vue
│   │   ├── zscore.vue
│   │   ├── trend.vue
│   │   └── short-term.vue
│   ├── settings/               # 설정
│   ├── assets/css/
│   └── composables/
│
├── backend/                     # 백엔드 (API & Plugins)
│   ├── api/
│   │   ├── network/
│   │   │   ├── pubnet/         # 외부망 API
│   │   │   └── privnet/        # 내부망 API
│   │   ├── server/             # 서버 모니터링 API
│   │   │   ├── status.get.ts
│   │   │   ├── location-stats.get.ts
│   │   │   ├── targets/
│   │   │   ├── history/
│   │   │   └── scheduler/
│   │   ├── anomaly/            # 이상탐지 API
│   │   │   ├── baseline.get.ts
│   │   │   ├── zscore.get.ts
│   │   │   ├── trend.get.ts
│   │   │   ├── short-term.get.ts
│   │   │   ├── chart.get.ts
│   │   │   └── logs.get.ts
│   │   └── settings/           # 설정 API
│   │       ├── thresholds.get.ts
│   │       └── thresholds.put.ts
│   ├── plugins/
│   │   ├── pubnet-init.ts      # 외부망 스케줄러 초기화
│   │   ├── privnet-init.ts     # 내부망 스케줄러 초기화
│   │   └── server-init.ts      # 서버 스케줄러 초기화
│   ├── routes/                  # WebSocket 라우트
│   └── utils/
│       ├── db.ts               # PostgreSQL 연결
│       ├── pubnet-scheduler.ts
│       ├── privnet-scheduler.ts
│       └── server-scheduler.ts
│
├── database/                    # DB 관련 (마이그레이션 등)
├── .env                        # 개발 환경변수
├── .env.prod                   # 운영 환경변수
├── Dockerfile                  # 프로덕션 Docker 이미지
├── nuxt.config.ts
└── package.json

설치 및 실행

환경 요구사항

  • Node.js 20+
  • PostgreSQL 14+

1. 의존성 설치

npm install

2. 환경변수 설정

# .env 파일 생성
cp .env.example .env
# 환경 설정
NODE_ENV=development

# PostgreSQL 연결 정보
DB_HOST=localhost
DB_PORT=5432
DB_NAME=osolit_monitor
DB_USER=postgres
DB_PASSWORD=your_password

# 스케줄러 자동시작 (development: false 권장)
AUTO_START_SCHEDULER=false

3. 개발 서버 실행

npm run dev

4. 프로덕션 빌드

npm run build
npm run preview

Docker 배포

빌드 및 실행

# 이미지 빌드
docker build -t osolit-monitor .

# 컨테이너 실행
docker run -d \
  --name osolit-monitor \
  -p 4055:4055 \
  -e DB_HOST=your-db-host \
  -e DB_PORT=5432 \
  -e DB_NAME=osolit_monitor \
  -e DB_USER=osolit \
  -e DB_PASSWORD=your_password \
  osolit-monitor

Docker 특징

  • Multi-stage 빌드 (최적화된 이미지 크기)
  • Asia/Seoul 타임존 설정
  • 비root 사용자 실행 (보안)
  • 환경변수 기반 설정

화면 구성

메인 대시보드 (/)

┌─────────────────────────────────────────────────────────┐
│ 📊 대시보드                           2024-12-25 14:30:00 │
├─────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────┐ ┌─────────────────┐ │
│ │                                 │ │ 🌐 Public   ✓  │ │
│ │         서버 현황 (90%)          │ │    [UP]        │ │
│ │                                 │ ├─────────────────┤ │
│ │   서버 목록 & 상태               │ │ 🔒 Private  ✓  │ │
│ │                                 │ │    [UP]        │ │
│ │                                 │ ├─────────────────┤ │
│ │                                 │ │ 📍 위치별 통계  │ │
│ └─────────────────────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────┘
                                        🟢 연결됨

서버 관리 (/server/list, /server/history)

  • 모니터링 대상 서버 목록 관리
  • 서버별 헬스체크 이력 조회

이상탐지 (/anomaly/*)

  • Baseline / Z-Score / Trend / Short-term 분석
  • 차트 기반 시각화

설정 (/settings/*)

  • 임계값 설정 관리

API 엔드포인트

네트워크

Method Endpoint 설명
GET /api/network/pubnet/status 외부망 상태
GET /api/network/privnet/status 내부망 상태

서버

Method Endpoint 설명
GET /api/server/status 서버 현황
GET /api/server/location-stats 위치별 통계
GET /api/server/targets 모니터링 대상 목록
GET /api/server/history 헬스체크 이력

이상탐지

Method Endpoint 설명
GET /api/anomaly/baseline Baseline 분석
GET /api/anomaly/zscore Z-Score 분석
GET /api/anomaly/trend Trend 분석
GET /api/anomaly/short-term 단기 분석
GET /api/anomaly/chart 차트 데이터

설정

Method Endpoint 설명
GET /api/settings/thresholds 임계값 조회
PUT /api/settings/thresholds 임계값 수정

WebSocket 통신

연결

const ws = new WebSocket('ws://localhost:4055/_ws')

메시지 타입

클라이언트 → 서버:

// 새로고침 간격 설정
{ type: 'set_interval', interval: 1 }

// 자동 새로고침 토글
{ type: 'set_auto_refresh', enabled: true }

// 즉시 새로고침
{ type: 'refresh' }

// 특정 시점 데이터 조회
{ type: 'fetch_at', datetime: '2024-12-25T14:30:00' }

서버 → 클라이언트:

// 실시간 상태
{ type: 'status', data: { pubnet: {...}, privnet: {...} } }

// 서버 현황
{ type: 'server', data: { servers: [...], summary: {...} } }

// 과거 데이터
{ type: 'historical', data: {...} }

데이터베이스

PostgreSQL 연결

// backend/utils/db.ts
const config = {
  host: process.env.DB_HOST,
  port: parseInt(process.env.DB_PORT || '5432'),
  database: process.env.DB_NAME,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
}

주요 테이블

  • health_check_log: 헬스체크 로그
  • server_targets: 모니터링 대상 서버
  • thresholds: 임계값 설정

스케줄러

동작 방식

  • 개발 환경: 수동 시작 (AUTO_START_SCHEDULER=false)
  • 운영 환경: 자동 시작 (AUTO_START_SCHEDULER=true)

스케줄러 종류

스케줄러 설명 간격
pubnet-scheduler 외부망 점검 적응형 (정상 5분, 장애 1분)
privnet-scheduler 내부망 점검 적응형 (정상 5분, 장애 1분)
server-scheduler 서버 점검 설정 가능

브라우저 호환성

  • Chrome
  • Firefox
  • Safari
  • Edge
  • IE (미지원)

개발 로드맵

  • 서버 모니터링 포틀릿
  • 네트워크 모니터링 (Public/Private)
  • 이상탐지 기능
  • Chart.js 차트
  • 다크/라이트 테마
  • Docker 지원
  • 장애 알림 (이메일/Slack)
  • 오래된 로그 자동 삭제
  • Jenkins Job 통합

라이선스

Private - TurboSoft

Description
No description provided
Readme 11 MiB
Languages
Vue 64.1%
TypeScript 31.6%
CSS 4%
Dockerfile 0.3%