Skip to content

bisibesi/log-sniper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

로그 스나이퍼 (Log Sniper)

폐쇄망 환경에서도 설치 없이 실행 가능한 실시간 로그 모니터링 도구 (단일 실행 파일)

License Go Version Platform

🎯 주요 특징

  • 🚀 설치 불필요: 단일 실행 파일로 즉시 실행
  • 🌐 로컬/원격 동시 수집: SSH를 통한 원격 서버 로그 및 로컬 파일 동시 모니터링
  • 📊 분할 뷰 (Split View): 통합 로그 뷰와 에러 전용 뷰를 동시에 표시
  • 🔄 자동 인코딩 감지: EUC-KR/UTF-8 자동 변환으로 한글 로그 완벽 지원
  • 💪 자동 연결 복구: SSH 연결 끊김 시 자동 재연결
  • 🎨 실시간 WebSocket 스트리밍: 밀리초 단위 실시간 로그 업데이트
  • 📦 임베디드 UI: 별도 프론트엔드 빌드 불필요, 단일 바이너리에 UI 포함
  • 🔔 Slack 알림: 에러 발생 시 자동 알림 전송
  • 💾 스냅샷 다운로드: 현재 보고 있는 로그를 .txt 파일로 저장

📸 스크린샷

┌────────────────────────────────────────────────────────────┐
│  🎯 로그 스나이퍼 (Log Sniper)     🟢 정상                    │
│  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  │
│  전체 로그: 1,234 | 에러: 12 | 수집 대상: 3                  │
│  [💾 전체 저장] [⚠️ 에러 저장]                              │
├────────────────────────────────────────────────────────────┤
│  📋 통합 로그 (1234)          🚨 에러/경고 (12)             │
│  ┌─────────────────────┐     ┌─────────────────────┐       │
│  │ [App] 23:15:45.123 │     │ [DB] 23:16:01.456  │       │
│  │ INFO: Server start │     │ ERROR: Connection  │       │
│  │                    │     │ failed             │       │
│  │ [Web] 23:15:46.789 │     └─────────────────────┘       │
│  │ INFO: Request /api │                                   │
│  └─────────────────────┘                                   │
└────────────────────────────────────────────────────────────┘

🚀 빠른 시작

1. 실행 파일 다운로드

# 릴리스 페이지에서 다운로드 또는 직접 빌드
go run builder/release.go

빌드 완료 후 dist/ 폴더에 생성된 실행 파일:

  • logsniper-windows-amd64.exe (Windows용)
  • logsniper-linux-amd64 (Linux용)

2. 설정 파일 작성

실행 파일과 같은 디렉토리에 config.yaml 파일을 생성하세요:

# 서버 설정
server:
  port: 8080  # 웹 UI 포트

# 로그 수집 대상
targets:
  # 로컬 파일 수집
  - name: "애플리케이션 로그"
    type: local
    path: "/var/log/app/application.log"
    encoding: utf-8
    color: "#3B82F6"  # 파란색

  # SSH 원격 서버 로그 수집
  - name: "운영 서버"
    type: ssh
    path: "/var/log/syslog"
    encoding: euc-kr  # 또는 utf-8
    color: "#10B981"  # 초록색
    ssh:
      host: "192.168.1.100:22"
      user: "admin"
      privateKeyPath: "/home/user/.ssh/id_rsa"
      # password: "암호"  # private key 대신 사용 가능

  - name: "데이터베이스 로그"
    type: ssh
    path: "/var/log/mysql/error.log"
    encoding: utf-8
    color: "#EF4444"  # 빨간색
    ssh:
      host: "db.example.com:22"
      user: "dbadmin"
      privateKeyPath: "/path/to/key"

# 에러 감지 키워드
error_keywords:
  - error
  - fatal
  - exception
  - 오류
  - 에러
  - 실패

# Slack 알림 (선택사항)
alert:
  enabled: false
  webhookURL: "https://hooks.slack.com/services/YOUR/WEBHOOK/URL"

3. 실행

Windows:

logsniper-windows-amd64.exe

Linux:

chmod +x logsniper-linux-amd64
./logsniper-linux-amd64

4. 브라우저 접속

웹 브라우저에서 다음 주소로 접속:

http://localhost:8080

📖 사용 방법

기본 기능

  1. 통합 로그 뷰 (왼쪽 패널)

    • 모든 수집 대상의 로그를 시간순으로 통합 표시
    • 각 로그는 출처별 색상으로 구분
    • 🗑️ 화면 지우기: 현재 표시된 로그 제거
    • ⏸️ 일시정지: 자동 스크롤 중지
  2. 에러/경고 뷰 (오른쪽 패널)

    • error_keywords에 정의된 키워드가 포함된 로그만 필터링
    • 에러만 집중 모니터링 가능
    • 독립적인 화면 지우기 및 일시정지 기능
  3. 스냅샷 저장

    • 💾 전체 저장: 현재 수집된 모든 로그를 .txt 파일로 다운로드
    • ⚠️ 에러 저장: 에러 로그만 별도 저장
  4. 자동 스크롤

    • 기본적으로 최신 로그로 자동 스크롤
    • 화면을 위로 스크롤하면 자동 정지
    • "⬇️ 최신 로그 보기" 버튼으로 재개

연결 상태 표시

  • 🟢 정상: WebSocket 연결 정상
  • 🔴 끊김: WebSocket 연결 끊김 (3초 후 자동 재연결)
  • 각 로그 항목의 점: 해당 수집 대상의 연결 상태
    • 🟢 초록색: 수집 정상
    • 🔴 빨간색: 연결 끊김
    • 🟡 노란색: 재연결 중

🔧 고급 설정

SSH 인증 방법

1. Private Key 인증 (권장):

ssh:
  host: "server.example.com:22"
  user: "admin"
  privateKeyPath: "/home/user/.ssh/id_rsa"

2. 비밀번호 인증:

ssh:
  host: "server.example.com:22"
  user: "admin"
  password: "your_password"

인코딩 설정

  • utf-8: 대부분의 최신 시스템 (권장)
  • euc-kr: 한국어 레거시 시스템

자동 감지 기능이 내장되어 있어, 잘못된 인코딩을 지정해도 자동으로 보정됩니다.

Slack 알림 설정

  1. Slack Workspace에서 Incoming Webhook 생성
  2. config.yaml에 설정:
alert:
  enabled: true
  webhookURL: "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXX"

알림은 30초마다 최대 1회로 제한되어 스팸을 방지합니다.

🛠️ 개발자 가이드

프로젝트 구조

log-sniper/
├── cmd/
│   └── logsniper/
│       └── main.go              # 애플리케이션 진입점
├── internal/
│   ├── config/
│   │   ├── config.go           # 설정 파일 파싱
│   │   └── config_test.go
│   ├── hub/
│   │   └── hub.go              # WebSocket 허브 (브로드캐스팅)
│   ├── parser/
│   │   ├── parser.go           # 에러 키워드 감지
│   │   └── parser_test.go
│   ├── slack/
│   │   ├── slack.go            # Slack 알림
│   │   └── slack_test.go
│   ├── tailer/
│   │   ├── tailer.go           # Tailer 인터페이스
│   │   ├── local_tailer.go     # 로컬 파일 수집기
│   │   ├── ssh_tailer.go       # SSH 원격 수집기
│   │   └── *_test.go
│   └── ui/
│       └── index.html          # 임베디드 웹 UI
├── builder/
│   └── release.go              # 멀티 플랫폼 빌드 스크립트
├── config.yaml.example         # 설정 예시 파일
├── build.sh                    # Unix 빌드 스크립트
├── build.bat                   # Windows 빌드 스크립트
├── go.mod
└── README.md

빌드 방법

로컬 개발 빌드:

# Windows
build.bat

# Linux/Mac
chmod +x build.sh
./build.sh

릴리스 빌드 (멀티 플랫폼):

go run builder/release.go

dist/ 폴더에 최적화된 바이너리 생성:

  • 디버그 심볼 제거 (-ldflags="-s -w")
  • CGO 비활성화 (완전한 정적 바이너리)
  • Windows/Linux x64 지원

테스트 실행

go test ./...

🐛 문제 해결

Q: 포트 8080이 이미 사용 중입니다

A: config.yaml에서 server.port를 다른 값으로 변경하세요:

server:
  port: 9090

Q: SSH 연결에 실패합니다

A: 확인 사항:

  1. 호스트 주소가 host:port 형식인지 확인 (예: 192.168.1.100:22)
  2. SSH 키 파일 경로와 권한 확인
  3. 방화벽에서 SSH 포트(22) 허용 여부 확인
  4. 서버에서 해당 사용자의 SSH 접근 권한 확인

Q: 로그가 표시되지 않습니다

A: 확인 사항:

  1. 파일 경로가 올바른지 확인
  2. 파일 읽기 권한이 있는지 확인 (로컬 파일의 경우)
  3. 브라우저 개발자 도구에서 WebSocket 연결 상태 확인
  4. 로그 파일이 실제로 업데이트되고 있는지 확인

Q: 한글이 깨져 보입니다

A: config.yaml에서 올바른 인코딩 설정:

targets:
  - name: "한글 로그"
    encoding: euc-kr  # 또는 utf-8

Q: 메모리 사용량이 높습니다

A: 로그 스나이퍼는 최대 2,000개의 로그를 메모리에 유지합니다. 수집 대상을 줄이거나 장기 보관이 필요한 경우 스냅샷 기능을 사용하세요.

📝 라이선스

이 프로젝트는 MIT 라이선스에 따라 배포됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.

🤝 기여하기

버그 리포트, 기능 요청, Pull Request는 언제나 환영합니다!

📧 문의

프로젝트 관련 문의사항은 GitHub Issues를 이용해주세요.


Built with ❤️ using Go

Copyright © 2026 Log Sniper Contributors

About

설치 없이 실행하는 초경량 실시간 로그 관제 도구 (Local/SSH 지원, 단일 바이너리).

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages