# LogHunter SFTP를 통해 원격 서버의 로그 파일을 수집하고, 등록된 패턴으로 에러를 검출하여 관리하는 데스크탑 애플리케이션 ## 개요 - **목적**: 폐쇄망 환경에서 여러 리눅스 서버의 로그를 수집하여 에러를 검출하고 관리 - **실행 환경**: Windows / macOS / Linux - **대상 서버**: Linux (SFTP) - **동작 방식**: 필요 시 수동 실행 → 웹 UI에서 분석 실행 및 결과 조회 ## 주요 기능 ### 로그 수집 및 분석 - SFTP를 통한 로그 파일 수집 (비밀번호 / 키 파일 인증) - 정규식 기반 에러 패턴 매칭 - 제외 패턴 지원 (오탐 방지) - 에러 발생 전후 컨텍스트 캡처 - 1개월 이내 파일만 분석 (성능 최적화) - 스캔 후 SQLite VACUUM 자동 실행 (DB 최적화) ### 대시보드 - 서버 목록 카드 형태 표시 - 서버별 최근 30일 에러 추이 차트 - 분석 실행 버튼 및 실시간 진행상황 표시 - 심각도별 색상 구분 (CRITICAL/ERROR/WARN) ### 에러 이력 - 전체 에러 조회/검색/필터 - 서버 선택 드롭다운 - 트리 구조 탐색 (경로 → 파일 2단계) - 파일명 툴팁으로 전체 경로 표시 - 페이지당 100건, 최신순 정렬 - 상세보기 (컨텍스트 포함) ### 통계 - **월별 현황**: 선택 월의 일별 에러 추이, 서버별 필터 - **일별 현황**: 선택 일의 15분 단위 에러 추이, 서버별 필터 - 이전/다음 버튼으로 기간 이동 - 차트 막대 위 총합 표시 ### 서버 관리 - 카드 형태 UI로 서버 정보 표시 - SFTP 서버 등록/수정/삭제 - 로그 경로 복수 등록 (경로, 파일 패턴, 설명) - 연결 테스트 - **분석 실행** 버튼 및 진행상황 표시 ### 패턴 관리 - 카드 형태 UI로 패턴 정보 표시 - 에러 패턴 등록/수정/삭제 - 정규식 테스트 기능 - 심각도 설정 (CRITICAL/ERROR/WARN) - 컨텍스트 라인 수 설정 ### 내보내기 - HTML 리포트 생성 - TXT 리포트 생성 - 설정에서 내보내기 경로 지정 ## 기술 스택 | 구분 | 기술 | |------|------| | Backend | Spring Boot 3.2, Java 17 | | Frontend | Vue 3, Vite, Chart.js | | Database | SQLite (파일 DB) | | SFTP | JSch | | 배포 | 단일 jar 파일 | ## 화면 구성 | # | 화면명 | URL | 설명 | |---|--------|-----|------| | 1 | 대시보드 | `/` | 서버 카드, 30일 차트, 분석 실행 | | 2 | 에러 이력 | `/errors` | 전체 에러 조회, 트리 탐색, 상세보기 | | 3 | 월별 현황 | `/stats/monthly` | 월별 에러 통계 차트 | | 4 | 일별 현황 | `/stats/daily` | 일별 15분 단위 에러 차트 | | 5 | 서버 관리 | `/servers` | 서버 CRUD, 분석 실행, 로그 경로 관리 | | 6 | 패턴 관리 | `/patterns` | 패턴 CRUD, 테스트 | | 7 | 설정 | `/settings` | 내보내기 경로, 보관 기간 | ## 폴더 구조 ``` log-hunter/ ├── src/ # Spring Boot 소스 │ └── main/ │ ├── java/ │ │ └── research/loghunter/ │ │ ├── controller/ # REST API │ │ ├── service/ # 비즈니스 로직 │ │ ├── repository/ # DB 접근 │ │ ├── entity/ # JPA Entity │ │ └── dto/ # 데이터 전송 객체 │ └── resources/ │ └── static/ # Vue3 빌드 결과물 ├── frontend/ # Vue3 (개발용) │ └── src/ │ ├── views/ # 페이지 컴포넌트 │ ├── components/ # 공통 컴포넌트 │ └── api/ # API 클라이언트 ├── data/ # SQLite DB ├── exports/ # HTML/TXT 내보내기 ├── start.sh # 실행 스크립트 (macOS/Linux) ├── start.bat # 실행 스크립트 (Windows) ├── build.gradle └── settings.gradle ``` ## 실행 방법 ### 개발 모드 ```bash # Frontend 개발 서버 실행 cd frontend npm run dev # Backend 실행 (별도 터미널) ./gradlew bootRun ``` ### 프로덕션 모드 ```bash # 통합 빌드 및 실행 ./start.sh # macOS/Linux start.bat # Windows ``` ### 실행 시 동작 ``` log-hunter.jar 실행 ↓ 내장 톰캣 (localhost:8080) ↓ 자동으로 브라우저 열림 ↓ 웹 UI에서 서버별 분석 실행 ``` --- ## 작업 현황 ### ✅ 완료된 기능 #### Backend - [x] Spring Boot 3.2 프로젝트 설정 - [x] SQLite 연동 (JPA) - [x] DB 스키마 설계 (6개 Entity) - [x] 서버/로그경로/패턴/설정 CRUD API - [x] 비밀번호/passphrase 암호화 - [x] SFTP 연결 (비밀번호 / 키 파일) - [x] 연결 테스트 API - [x] 로그 파싱 + 패턴 매칭 엔진 - [x] 에러 저장 (컨텍스트 포함) - [x] 분석 실행 API (SSE 진행상황) - [x] HTML/TXT 리포트 생성 - [x] 1개월 이내 파일만 분석 - [x] 스캔 후 VACUUM 자동 실행 - [x] 통계 API (월별/일별/시간대별) #### Frontend - [x] Vue 3 + Vite 프로젝트 설정 - [x] 레이아웃 (헤더, 사이드메뉴) - [x] 라우터 설정 - [x] API 클라이언트 (axios) - [x] 공통 컴포넌트 (Card, DataTable, Modal, FormInput, Badge, Button) - [x] 대시보드 (서버 카드, 30일 차트, 분석 실행, 진행상황) - [x] 에러 이력 (서버 선택, 트리 탐색, 페이지네이션, 상세보기) - [x] 월별 현황 (일별 차트, 이전/다음) - [x] 일별 현황 (15분 단위 차트, 이전/다음) - [x] 서버 관리 (카드 UI, 분석 실행, 진행상황, 로그 경로 모달) - [x] 패턴 관리 (카드 UI, 테스트 모달) - [x] 설정 (내보내기 경로, 보관 기간) - [x] Chart.js + datalabels 플러그인 --- ## TODO ### 1. 에러를 AI 분석을 통해 서버별 일일 리포트 만드는 기능 - [ ] OpenAI API 연동 - [ ] 일일 에러 요약 생성 - [ ] 에러 원인 분석 및 해결 방안 제시 - [ ] 서버별 리포트 자동 생성 - [ ] 리포트 이메일 발송 (선택) --- ## 변경 이력 | 일시 | 내용 | |------|------| | 2025-01-06 | 최초 작성, 요구사항 정리 | | 2025-01-06 | Step 1~6 완료 (기본 프로젝트 구조) | | 2025-01-06 | Step 7 완료 (모든 화면 개발) | | 2025-01-06 | TEST_GUIDE.md 작성 | | 2025-01-06 | Frontend 빌드 + Backend 실행 테스트 성공 | | 2025-01-07 | 에러 이력 정렬, 페이지당 100건, 전체 페이지 가로 해상도 최적화 | | 2025-01-07 | 에러 이력 개선 (서버 선택, 트리 구조 2단계, 검색 로직) | | 2025-01-07 | 1개월 이내 파일만 분석 | | 2025-01-07 | 통계 페이지 구현 (월별/일별 현황, 차트 datalabels) | | 2025-01-07 | 대시보드 서버별 30일 차트 추가 | | 2025-01-07 | SQLite VACUUM 자동화 (스캔 후 실행) | | 2025-01-07 | 서버/패턴 관리 UI 개선 (카드 형태) | | 2025-01-07 | 서버 관리에 분석 실행 + 진행상황 표시 추가 |