홈으로 돌아가기

60초 만에 eBPF 서버 진단: melisai

Melisai가 Linux 서버 진단을 자동화: eBPF/BCC-metrics 수집, procfs, sysfs를 60초 만에 JSON으로. 37개 이상 탐지, sysctl 명령 생성, MCP를 통한 AI 통합. 인시던트 루틴 절약.

60초 만에 eBPF Linux 진단: melisai 도구
Advertisement 728x90

리눅스 서버 자동 진단: 수동 검사에서 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 바이너리입니다. 실행은 간단해요:

Google AdInline article slot
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단계만 실행.

Google AdInline article slot

2단계 수집과 속도 기반 지표

관측자 효과를 피하기 위해 수집을 분리했습니다:

  • 베이스라인: 1단계 지표 (CPU, 메모리, I/O, 네트워크).
  • eBPF: 베이스라인 후 BCC 도구 실행.

속도 기반 계산: 측정 간 델타. 누적 카운터가 아닌 속도(200일 업타임 서버에서 softnet_dropped=5000은 정상, softnet_drop_rate=50/sec가 이상 징후).

Gregg와 운영 경험 기반 37개 이상 규칙:

Google AdInline article slot

| 카테고리 | 예시 임계값 |

|----------|--------------|

| 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

Advertisement 728x90

다음 읽기