/툴 리뷰/Uptime Kuma vs Netdata vs Prometheus, 소규모 서버 모니터링 추천
툴 리뷰서버모니터링UptimeKuma

Uptime Kuma vs Netdata vs Prometheus, 소규모 서버 모니터링 추천

1~5대 서버 운영자를 위한 Uptime Kuma·Netdata·Prometheus 비교. 설치 난이도·리소스·알림·지표 보존 기준으로 골라주고, 복붙 설치와 텔레그램·슬랙 알림 연동, 상황별 추천 분기까지 정리했습니다.

Uptime Kuma vs Netdata vs Prometheus, 소규모 서버 모니터링 추천

Uptime Kuma vs Netdata vs Prometheus, 소규모 서버엔 뭘 써야 할까

"그냥 서버 안 죽었는지만 알고 싶은데, 뭘 깔아야 하죠?"

VPS 한두 대, 혹은 사무실 구석의 온프렘 서버 몇 대를 굴리다 보면 새벽에 서비스가 죽었는데 아침에야 알게 되는 사고를 한 번쯤 겪습니다. Datadog 같은 SaaS는 호스트당 월 과금이라 1인 개발자에겐 부담이고, 무료 셀프호스팅 도구를 검색하면 Uptime Kuma, Netdata, Prometheus가 줄줄이 나오는데 다 비슷해 보여 선택 마비에 빠지죠.

이 글은 "모니터링이란 무엇인가" 같은 개념 설명을 하지 않습니다. 당신 상황(서버 대수·필요한 지표·운영 여력)에 셋 중 무엇이 정답인지 5분 안에 골라주고, 그대로 복붙해 설치·알림 연동까지 끝내는 게 목표입니다. 먼저 결론부터 보시죠.

항목Uptime KumaNetdataPrometheus + Grafana
설치 난이도★☆☆ (docker 한 줄)★☆☆ (kickstart 한 줄)★★★ (compose 다중 컴포넌트)
리소스 사용량매우 가벼움(~100MB)중간(기본 200~400MB)높음(디스크·메모리 폭증 주의)
알림 채널90종+ (텔레그램/슬랙/디스코드 등)다수(이메일/슬랙/텔레그램)Alertmanager 경유 다수
지표 보존외형 상태·응답시간만(SQLite)기본 단기, dbengine로 장기기본 15일 TSDB, 조정 가능
대시보드 품질단순·직관적(업/다운 중심)매우 상세·실시간(초 단위)최강(Grafana, 무한 커스텀)
적합 규모1~수십 엔드포인트단일~소수 서버여러 서버·장기 운영

한눈에 비교 + 상황별 추천 분기

위 표가 와닿지 않는다면, 아래 세 갈래에서 본인 케이스를 바로 찾으세요.

① 단순 업/다운 + 알림만 원함 → Uptime Kuma

  • 이런 사람: "웹사이트·API가 살아있는지, 죽으면 텔레그램으로 알려주기만 하면 됨."
  • 이건 포기해야 함: CPU·메모리·디스크 같은 시스템 내부 지표는 못 봄. Kuma는 외부에서 핑·HTTP를 찌르는 외형 감시 도구입니다.

② 단일 서버 실시간 상세 지표 → Netdata

  • 이런 사람: "한 대짜리 서버의 CPU·디스크 I/O·네트워크를 초 단위로 들여다보고 싶다."
  • 이건 포기해야 함: 여러 서버를 한 화면에 묶어 장기 추세를 분석하기엔 부족(클라우드 연동 없이는 노드별 분산). 기본 메모리 점유도 가볍지 않음.

③ 여러 서버 + 장기 지표·그래프·확장 → Prometheus + Grafana

  • 이런 사람: "서버 3대 이상, 6개월 전 디스크 추세까지 보고 알림 규칙을 코드로 관리하고 싶다."
  • 이건 포기해야 함: 설치·운영 학습 곡선. 컴포넌트가 많고 디스크 관리도 직접 해야 합니다.

실무 경험담: 저는 서버 2대 시절 Kuma만 썼고, 5대로 늘면서 Prometheus를 추가했습니다. 처음부터 Prometheus를 깔았다면 운영 부담에 지쳐 모니터링 자체를 방치했을 겁니다. 작게 시작하는 게 거의 항상 정답입니다.

5분 설치 + 알림 연동 실전 (3종 복붙 가이드)

Uptime Kuma — docker 한 줄

Bash
docker run -d --restart=always \
  -p 3001:3001 \
  -v uptime-kuma:/app/data \
  --name uptime-kuma \
  louislam/uptime-kuma:1

브라우저에서 http://서버IP:3001 접속 → 계정 생성 → Add New Monitor로 감시할 URL 등록. 알림은 Settings → Notifications → Setup Notification에서:

  • 텔레그램: @BotFather로 봇 생성 후 받은 Bot Token 입력, https://api.telegram.org/bot<토큰>/getUpdates로 Chat ID 확인해 입력.
  • 슬랙: Slack Incoming Webhook URL을 그대로 붙여넣기.

등록 후 Test 버튼을 누르면 첫 알림이 바로 옵니다.

Netdata — one-line 설치

Bash
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && \
  sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry

설치되면 http://서버IP:19999에서 즉시 대시보드가 뜹니다. 알림은 /etc/netdata/health_alarm_notify.conf 편집:

Bash
# 슬랙
SEND_SLACK="YES"
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/XXX/YYY/ZZZ"
DEFAULT_RECIPIENT_SLACK="#alerts"

# 텔레그램
SEND_TELEGRAM="YES"
TELEGRAM_BOT_TOKEN="123456:ABC-DEF..."
DEFAULT_RECIPIENT_TELEGRAM="-1001234567890"

저장 후 sudo systemctl restart netdata, 테스트는 sudo su -s /bin/bash netdata/usr/libexec/netdata/plugins.d/alarm-notify.sh test.

Prometheus + Grafana — docker-compose

YAML
# docker-compose.yml
services:
  prometheus:
    image: prom/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.retention.time=15d'
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prom-data:/prometheus
    ports: ["9090:9090"]
  node_exporter:
    image: prom/node-exporter
    ports: ["9100:9100"]
  alertmanager:
    image: prom/alertmanager
    volumes:
      - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
    ports: ["9093:9093"]
  grafana:
    image: grafana/grafana
    ports: ["3000:3000"]
    volumes:
      - grafana-data:/var/lib/grafana
volumes:
  prom-data:
  grafana-data:
YAML
# prometheus.yml
global:
  scrape_interval: 30s
rule_files:
  - alert.rules.yml
alerting:
  alertmanagers:
    - static_configs:
        - targets: ['alertmanager:9093']
scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['node_exporter:9100']
YAML
# alert.rules.yml
groups:
  - name: basic
    rules:
      - alert: InstanceDown
        expr: up == 0
        for: 1m
        labels: { severity: critical }
        annotations: { summary: "인스턴스 {{ $labels.instance }} 다운" }
      - alert: DiskAlmostFull
        expr: (1 - node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) > 0.8
        for: 5m
        labels: { severity: warning }
        annotations: { summary: "디스크 80% 초과" }
YAML
# alertmanager.yml
route:
  receiver: 'slack'
receivers:
  - name: 'slack'
    slack_configs:
      - api_url: 'https://hooks.slack.com/services/XXX/YYY/ZZZ'
        channel: '#alerts'
  # 텔레그램을 쓰려면 아래로 교체
  # telegram_configs:
  #   - bot_token: '123456:ABC-DEF...'
  #     chat_id: -1001234567890

docker compose up -d 후 Grafana(:3000, admin/admin)에서 Prometheus를 데이터소스로 추가하고 대시보드 ID 1860(Node Exporter Full)을 import하면 끝납니다.

현실 점검: 리소스 오버헤드 & 흔한 함정

세 도구 모두 "공짜"지만 운영 비용은 다릅니다. 1코어/1GB VPS 기준으로 정리하면:

  • Prometheus 디스크 폭증: 기본 retention 15일도 메트릭 카디널리티가 높으면 수 GB로 불어납니다. scrape_interval을 15초→30s로 늘리고, --storage.tsdb.retention.time=15d(또는 retention.size=2GB)로 상한을 두세요. 1GB VPS에서는 Prometheus+Grafana 동시 구동이 빠듯하므로 swap 확보를 권합니다.
  • Netdata 메모리 점유: 기본 1초 수집이라 가볍다고 보기 어렵습니다. /etc/netdata/netdata.conf에서 [db] update every = 2로 늘리고 dbengine 모드의 dbengine multihost disk space MB를 제한하면 RAM 점유를 200MB 안쪽으로 잡을 수 있습니다.
  • Uptime Kuma의 한계: CPU/RAM/디스크 같은 시스템 지표를 자체 수집하지 못합니다. 외형 감시 전용이라는 점을 잊으면 "왜 디스크 알림이 안 오지?"로 헤맵니다.

참고로 OpenTelemetry로 수렴하는 큰 흐름이 있지만, 소규모 1~5대 환경엔 아직 과합니다. node_exporter + Grafana 조합이 사실상 표준이니 그걸로 충분합니다.

결론: 단계적 성장 경로 + 최종 한 줄 추천

가장 흔하고 견고한 조합은 Kuma(외형 감시) + Netdata 또는 Prometheus(내부 지표) 병행입니다. 사용자 입장의 "서비스 살아있나"는 Kuma가, 내부 자원 상태는 Netdata/Prometheus가 맡습니다.

성장 경로는 이렇게 잡으세요:

  1. 서버 1~2대: Uptime Kuma로 시작 → 죽으면 알림 받기.
  2. 상세 지표 필요: Netdata 추가 → 단일 서버 실시간 진단.
  3. 3대 이상·장기 추세: Prometheus+Grafana 도입. 이때 Netdata를 http://서버IP:19999/api/v1/allmetrics?format=prometheus 엔드포인트로 노출하면 Prometheus가 그대로 스크랩할 수 있어 두 도구를 자연스럽게 잇습니다.

최종 한 줄 처방

  • "죽었는지만 알면 됨" → Uptime Kuma
  • "한 대를 깊게 보고 싶음" → Netdata
  • "여러 대·장기·확장" → Prometheus + Grafana

자주 묻는 질문 (FAQ)

Q. Uptime Kuma로 CPU·메모리도 볼 수 있나요? A. 기본적으로는 안 됩니다. Kuma는 외부에서 핑/HTTP로 살아있는지 확인하는 외형 감시 도구라, 시스템 내부 지표는 Netdata나 Prometheus(node_exporter)를 함께 써야 합니다.

Q. Netdata와 Prometheus 중 하나만 골라야 한다면? A. 서버가 1~2대이고 실시간 진단이 목적이면 Netdata, 3대 이상이고 장기 추세·알림 규칙 코드 관리가 필요하면 Prometheus+Grafana를 추천합니다.

Q. 1GB짜리 VPS 한 대에 셋 다 깔아도 되나요? A. 권장하지 않습니다. Prometheus+Grafana만으로도 메모리가 빠듯합니다. 1GB라면 Kuma + Netdata(수집 주기 2초로 조정) 정도가 현실적인 한계입니다.

✦ ✦ ✦
편집 검토 · Editorial Review

이 글은 AI 에이전트가 1차 초안을 작성한 뒤, 사람 편집자가 사실관계·출처·톤과 맥락을 검토하여 발행했습니다. 오류나 부정확한 내용이 확인되면 24시간 이내에 정정합니다.

작성 · Content Reviewer·검토 · 사람 편집자·발행 · 2026년 6월 16일

댓글

불러오는 중...