−25%

Windows 연간 결제, 10월 31일까지. 요금제 보기

EQVPS

Grafana + Prometheus 서버 모니터링용 VPS

모든 서버의 CPU, RAM, 디스크, 서비스 지표를 한곳에 모으세요. VPS에서 HTTPS 뒤에 Prometheus, node_exporter, Grafana를 둡니다.

“서버가 느려요”는 쓸모없는 버그 보고입니다. 그래프를 열어 장애 사흘 전부터 메모리가 계속 올라갔다는 걸 확인할 수 있다면 이야기가 달라집니다. 바로 그것을 Prometheus와 Grafana가 제공합니다. 모든 서버의 CPU, RAM, 디스크, 네트워크를 15초마다 기록하고, 거슬러 올라가며 볼 수 있는 그래프로 그려 줍니다. 전용의 작은 VPS에 두면 운영 서버가 쓰러져도 계속 지켜봅니다.

구성 요소

필요한 것

1. 각 대상 서버의 node_exporter

apt install -y prometheus-node-exporter
# allow only the monitoring server to scrape it
ufw allow from 203.0.113.10 to any port 9100 proto tcp

203.0.113.10을 모니터링 VPS의 주소로 바꾸세요. 9100번을 전 세계에 열어 두면 안 됩니다. 서버에 대한 정보가 많이 새어 나갑니다.

2. 모니터링 VPS의 Prometheus와 Grafana

apt update && apt install -y docker.io docker-compose-v2 caddy
mkdir -p /opt/monitoring && cd /opt/monitoring

cat > prometheus.yml <<'EOF'
global:
  scrape_interval: 15s
scrape_configs:
  - job_name: nodes
    static_configs:
      - targets: ['198.51.100.21:9100', '198.51.100.22:9100']
EOF

cat > compose.yml <<'EOF'
services:
  prometheus:
    image: prom/prometheus
    volumes: [ "./prometheus.yml:/etc/prometheus/prometheus.yml:ro", "prom:/prometheus" ]
    command: [ "--config.file=/etc/prometheus/prometheus.yml", "--storage.tsdb.retention.time=15d", "--web.enable-remote-write-receiver" ]
    ports: [ "127.0.0.1:9090:9090" ]
    restart: unless-stopped
  grafana:
    image: grafana/grafana
    volumes: [ "grafana:/var/lib/grafana" ]
    ports: [ "127.0.0.1:3000:3000" ]
    restart: unless-stopped
volumes: { prom: {}, grafana: {} }
EOF

docker compose up -d

Grafana 앞에 HTTPS를 둡니다.

echo 'grafana.example.com {
    reverse_proxy 127.0.0.1:3000
}' > /etc/caddy/Caddyfile && systemctl reload caddy

로그인(admin / admin 후 변경)하고, http://prometheus:9090을 Prometheus 데이터 소스로 추가한 뒤, 커뮤니티 대시보드 “Node Exporter Full”(ID 1860)을 가져옵니다. 1분 정도면 완전한 시스템 대시보드가 생깁니다.

NAT 요금제의 서버

NAT 서버는 개인 SSH 포트에서만 들어오는 연결을 받으므로, Prometheus가 그 익스포터를 스크레이프할 수 없습니다. 방향을 뒤집으세요. NAT 머신에서 Prometheus를 에이전트 모드로 실행하고, 이미 원격 쓰기를 받고 있는 모니터링 서버(위의 --web.enable-remote-write-receiver 플래그)로 밀어 넣습니다.

# /etc/prometheus/agent.yml on the NAT server
scrape_configs:
  - job_name: self
    static_configs: [ { targets: ['127.0.0.1:9100'] } ]
remote_write:
  - url: https://prom-push.example.com/api/v1/write

9090번을 그대로 여는 대신, 그 수신 엔드포인트는 Caddy를 통해 basic auth와 함께 공개하세요.

솔직한 메모

Prometheus는 풀(pull) 방식입니다. 직접 관리하는 서버 무리에는 훌륭하지만 NAT 뒤에 있는 것에는 불편해서 에이전트 방식이 필요합니다. 로컬 스토리지는 수년치 이력을 위한 것이 아니므로, 장기 보관이 필요하면 나중에 원격 스토리지를 추가하세요. 그리고 대시보드는 가치의 절반일 뿐입니다. 첫날 최소 세 가지 알림(디스크 85% 초과, 메모리 압박, 대상 다운)을 설정하지 않으면, 무언가 이미 망가진 뒤에야 그래프를 보게 됩니다.

관련

배포할 준비가 되셨나요? 암호화폐로 결제, KYC 없음 — 약 1분 만에 온라인.

지금 배포 →

FAQ

Uptime Kuma와 무엇이 다른가요?

Uptime Kuma는 “살아 있나?”에 답합니다. Prometheus와 Grafana는 “왜 느린지, 언제부터인지?”에 답합니다. CPU, 메모리, 디스크, 네트워크, 애플리케이션 지표를 시간에 따라 보여 줍니다. 둘 다 쓰는 사람도 많습니다. 장애 알림은 Kuma, 추세와 용량 계획은 Grafana입니다.

Prometheus는 디스크를 얼마나 쓰나요?

압축 후 샘플당 약 1~2바이트입니다. 각각 1,000개 시리즈를 내보내는 서버 10대를 15초마다 수집하면 하루 약 6,000만 샘플, 대략 100 MB입니다. 기본 보존 기간 15일이면 몇 기가바이트입니다.

NAT 요금제의 서버도 모니터링할 수 있나요?

가능하지만 스크레이핑으로는 안 됩니다. NAT 서버는 익스포터로 들어오는 연결을 받지 않기 때문입니다. NAT 머신에서 Prometheus를 에이전트 모드로 실행하고 remote_write로 모니터링 서버에 지표를 밀어 넣으세요. 모니터링 서버 자체는 전용 IP 요금제에 두어야 합니다.

모니터링 서버는 어떤 요금제가 좋을까요?

Micro-IP(RAM 2 GB, 월 $10)면 호스트 한두 다스를 편하게 감당합니다. 카디널리티가 높은 애플리케이션 지표를 추가하거나 몇 달치 데이터를 보관한다면 Small-IP로 올리세요. 전용 IP가 있으면 Grafana에 HTTPS를 적용하고, 대상 서버에서 허용 목록에 넣을 고정 주소도 생깁니다.

모니터링 서버는 모니터링 대상과 분리해야 하나요?

네. Grafana가 방금 메모리가 바닥난 서버에서 돌고 있다면, 가장 필요한 순간에 문제를 볼 수 없게 됩니다. 별도의 작은 VPS는 운영 서버가 쓰러져도 계속 동작합니다.

댓글

아직 댓글이 없습니다. 첫 번째가 되세요.

댓글 남기기

댓글은 표시되기 전에 검토됩니다.