리눅스 서버 자동 진단: 수동 검사에서 eBPF 분석까지 단 몇 분 만에
리눅스 경험이 있는 개발자와 시스템 관리자라면 익숙할 겁니다. "서버가 느려요"라는 불만이 들어오면 보통 top, vmstat, iostat, ss 같은 기본 도구를 돌려보죠. 이건 1단계 진단으로, 20~40분 정도 걸립니다. 그 다음엔 Brendan Gregg의 eBPF 도구인 runqlat, biolatency, tcpretrans 같은 걸 들여다봅니다. 문제는 드문 사고가 기억에서 지워지기 때문에 /proc 파일, sysctl 파라미터, BCC 도구 문법을 계속 구글링해야 한다는 거예요.
AI(ChatGPT, Claude)는 로그 분석을 간편하게 해주지만 데이터 수집은 못 합니다. 신경망이 알아서 도구를 실행하거나 PruneCalled와 TCP 메모리 같은 지표 간 연결을 찾아주진 않죠. AI에 넣어줄 구조화된 데이터 수집기가 필요합니다.
Melisai: 모든 데이터를 하나의 JSON으로 수집
Melisai는 의존성 없는 정적 Go 바이너리입니다. 실행은 간단해요:
sudo melisai collect --profile quick -o report.json
Quick 모드는 10초, Deep 모드는 60초 걸립니다. 출력은 CPU, 메모리, 디스크, 네트워크, 프로세스, 컨테이너, GPU 지표가 담긴 JSON입니다.
수집 항목:
- 1단계: procfs, sysfs,
ss,ethtool,nvidia-smi(루트 불필요). - 2단계: 67개 BCC/eBPF 도구 (
runqlat,biolatency,tcpretrans등, 루트 + bcc-tools 필요). - 3단계: cilium/ebpf를 통한 네이티브 eBPF (루트 + 커널 ≥5.8에 BTF 필요).
대체: 2/3단계 불가 시 1단계만 실행.
2단계 수집과 속도 기반 지표
관측자 효과를 피하기 위해 수집을 분리했습니다:
- 베이스라인: 1단계 지표 (CPU, 메모리, I/O, 네트워크).
- eBPF: 베이스라인 후 BCC 도구 실행.
속도 기반 계산: 측정 간 델타. 누적 카운터가 아닌 속도(200일 업타임 서버에서 softnet_dropped=5000은 정상, softnet_drop_rate=50/sec가 이상 징후).
Gregg와 운영 경험 기반 37개 이상 규칙:
| 카테고리 | 예시 임계값 |
|----------|--------------|
| CPU | 이용률>95%, PSI>5%, runqlat p99>50ms |
| 메모리 | direct reclaim>10/s, THP splits>1/s, NUMA miss>5% |
| 디스크 | 이용률>90%, 지연>50ms |
| 네트워크 | 재전송>50/s, conntrack>90% |
| GPU | NUMA 불일치 GPU-NIC |
사례 연구: Docker 호스트의 연쇄 장애
운영 환경: 8코어, 32GB RAM, HDD RAID. 증상: 전체 속도 저하.
sudo melisai collect --profile deep --ai-prompt -o report.json
결과 (60초):
건강 점수: 46/100
이상 징후:
[CRITICAL] tcp_retransmits 134/sec
[WARNING] disk_util 80.5%
[WARNING] cpu_psi 17.6%
[WARNING] io_psi 12.8%
[WARNING] disk_latency 12.1ms
[WARNING] tcp_close_wait 1 socket
연쇄 과정:
- HDD p99=49ms → 블록 I/O 지연 (
biolatency). - PruneCalled=105 → TCP 버퍼 트림 (메모리 압박).
- TCP 재전송=31/s → 서버 내부 패킷 손실.
- WireGuard tx_dropped=226k → VPN 터널 피해.
근본 원인: HDD 병목. 권장: sysctl -w net.ipv4.tcp_mem='1048576 2097152 4194304'.
MCP를 통한 AI 통합
Claude Desktop/Cursor용 내장 MCP 서버:
{
"mcpServers": {
"melisai": {
"command": "ssh",
"args": ["root@server", "/usr/local/bin/melisai", "mcp"]
}
}
}
AI 호출:
get_health— 점수 + 이상 징후.explain_anomaly— 근본 원인 + 수정 명령.collect_metrics— 히스토그램 포함 전체 보고서.
JSON에 27개 안티패턴 포함 ai_context.prompt 제공.
권장 사항과 제한
권장 사항은 바로 실행 가능한 명령:
{
"type": "fix",
"title": "TCP 메모리 압박 (PruneCalled)",
"commands": ["sysctl -w net.ipv4.tcp_mem='1048576 2097152 4194304'"],
"evidence": "PruneCalled=105"
}
제한:
- 모니터링 아님 (스냅샷, Prometheus 아님).
- 알림 없음 (수동/크론만).
- 앱 프로파일링 아님 (
pprof사용). - NVIDIA GPU만 (ROCm 로드맵 예정).
설치와 빌드
curl -sSL https://melisai.dev/install | sh
빌드:
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o melisai ./cmd/melisai/
Apache 2.0.
주요 요약
- 67개 eBPF 도구 + 1단계 지표를 10~60초 만에 구조화 JSON으로 수집.
- 속도 지표로 장기 업타임 서버의 오경보 제거.
- 37개 이상 규칙 + 즉시 sysctl 명령.
- MCP 통합: AI가 직접 분석, 복붙 불필요.
- 2단계 수집으로 관측자 효과 최소화.
— Editorial Team
아직 댓글이 없습니다.