온프레미스 서버 실시간 모니터링 대시보드 구축

온프레미스 서버를 여러 대 운영하다 보면 매번 터미널로 일일이 접속해서 top이나 vmstat을 치며 상태를 확인하는 데 한계가 오기 마련입니다.

서버가 예고도 없이 죽거나 디스크 용량이 꽉 차서 서비스가 먹통이 되는 사고를 막으려면, 한눈에 서버 상태를 파악할 수 있는 실시간 모니터링 체계가 필수인데요.

요즘 IT 현장에서 가장 널리 쓰이는 표준 조합인 Prometheus(프로메테우스)와 Grafana(그라파나), 그리고 Node Exporter(노드 엑스포터)를 활용해 온프레미스 서버를 한눈에 모니터링하고 이상 징후 발생 시 텔레그램이나 슬랙으로 즉시 알림을 받는 환경 구축법을 풀어 정리했습니다.

1. 모니터링의 기본 구조와 TSDB(시계열 데이터베이스)의 개념

본격적인 설치에 앞서 이 시스템이 어떤 구조로 흘러가는지 이해해 두면 훨씬 쉽습니다.

  • Node Exporter (지표 수집기): 모니터링 대상이 되는 개별 서버에 설치되어 CPU, 메모리, 디스크, 네트워크 사용량 등 서버의 생생한 생체 지표를 수집해 외부로 노출해 주는 일종의 ‘센서’입니다.
  • Prometheus (지표 저장 및 알림 관리): Node Exporter가 노출한 지표를 주기적으로 당겨와서(Pull 방식) 저장하는 메인 시스템입니다. 일반적인 데이터베이스와 달리 ‘시계열 데이터베이스(TSDB)’ 방식을 사용합니다.
  • Grafana (대시보드 시각화): Prometheus에 저장된 복잡한 숫자 데이터를 보기 좋은 차트나 그래프로 그려주는 예쁜 대시보드 도구입니다.

쉽게 이해하는 TSDB(Time Series Database)란?

일반 데이터베이스가 ‘사용자 정보’ 같은 현재 상태 데이터 저장에 특화되어 있다면, TSDB는 **’시간의 흐름에 따라 변화하는 수치 데이터’**를 저장하는 데 최적화된 DB입니다. “오전 10시 01분의 CPU 사용량 20%”, “오전 10시 02분의 CPU 사용량 85%”처럼 시간 축을 기준 삼아 연속된 데이터를 아주 가볍고 빠르게 저장하고 조회할 수 있습니다.

2. 단계별 구축 과정

① 모니터링 대상 온프레미스 서버 Node Exporter 설치

모니터링하고 싶은 대상 온프레미스 서버에 Node Exporter를 다운로드하고 서비스로 등록합니다.

Bash

# Node Exporter 다운로드 및 압축 해제 (최신 버전 기준)
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar xvfz node_exporter-1.8.2.linux-amd64.tar.gz
cd node_exporter-1.8.2.linux-amd64

# 실행 (기본적으로 9100번 포트로 수집 지표를 노출합니다)
./node_exporter &

 

정상적으로 켜지면 http://서버IP:9100/metrics 주소로 들어갔을 때 수많은 서버 상태 텍스트 지표들이 출력되는 것을 확인할 수 있습니다.

② Prometheus 설정 및 실행

이제 모니터링 서버(별도 서버 또는 중앙 서버)에 Prometheus를 설치하고, 방금 만든 Node Exporter 주소를 등록해 줍니다. prometheus.yml 설정 파일을 열어 수집 대상을 추가합니다.

YAML

global:
  scrape_interval: 15s # 15초마다 지표를 수집하겠다는 설정

scrape_configs:
  job_name: ‘onpremise_servers’
    static_configs:
      targets: [‘192.168.1.10:9100’, ‘192.168.1.11:9100’] # 수집할 서버 IP와 포트

 

설정 후 Prometheus를 실행하고 http://모니터링서버IP:9090으로 접속해 Target 항목이 ‘UP’ 상태로 잘 연결되었는지 체크합니다.

③ Grafana 연동 및 모니터링 대시보드 구성

Grafana(http://모니터링서버IP:3000)에 접속한 뒤, 데이터 소스(Data Source)로 미리 구축해 둔 Prometheus를 연결합니다.

그래프를 일일이 하나씩 그려 넣을 필요는 없습니다. Grafana 공식 홈페이지 패널 마켓플레이스에서 ‘Node Exporter Full’ (ID: 1860) 대시보드 템플릿 번호를 복사해 Import만 해주면, CPU, 메모리, 디스크 I/O, 네트워크 트래픽이 한꺼번에 표시되는 근사한 실시간 모니터링 화면이 완성됩니다.

3. 온프레미스 서버 이상 징후 발생 시 텔레그램 / 슬랙 알림(Alert) 연동

대시보드를 하루 종일 쳐다보고 있을 수는 없기 때문에, 서버에 문제가 생겼을 때 담당자의 스마트폰으로 메시지가 날아오도록 Alertmanager(알럿매니저) 또는 Grafana의 자체 Unified Alerting 기능을 세팅해야 합니다.

슬랙(Slack) 연동 예시 (Grafana Alerting 활용)

  1. 슬랙 워크스페이스에서 Incoming Webhooks 앱을 추가하여 Webhook URL을 발급받습니다.
  2. Grafana의 Alerting > Contact points 메뉴로 들어가 연동 방식을 Slack으로 선택하고 발급받은 URL을 붙여넣습니다.
  3. 임계치 알림 규칙(Notification Rule)을 설정합니다.
  • 예시 조건: CPU 사용량이 5분 이상 90%를 초과할 때
  • 예시 조건: 사용 가능한 디스크 용량이 10% 미만으로 떨어졌을 때
  • 예시 조건: Node Exporter 응답이 끊겼을 때 (서버 다운)

조건이 충족되어 경보가 발령되면 슬랙이나 텔레그램 방으로 “[WARNING] 서버 CPU 사용량 95% 초과 감지!”라는 경고 메시지가 즉시 전송됩니다.

서버 모니터링 체계를 갖추는 것은 장애 발생 후 뒤늦게 대처하는 소위 ‘불 끄기식 운영’에서 벗어나, 장애를 예방하고 예측하는 프로액티브한 시스템 관리로 나아가는 첫걸음입니다.

무료 오픈소스 조합인 Prometheus, Grafana, Node Exporter를 활용해 내 서버실 환경을 단단하게 지켜주는 실시간 통합 대시보드를 직접 구축해 보시길 권해드립니다.

Leave a Comment