온프레미스 서버를 여러 대 운영하다 보면 매번 터미널로 일일이 접속해서 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 활용)
- 슬랙 워크스페이스에서 Incoming Webhooks 앱을 추가하여 Webhook URL을 발급받습니다.
- Grafana의 Alerting > Contact points 메뉴로 들어가 연동 방식을 Slack으로 선택하고 발급받은 URL을 붙여넣습니다.
- 임계치 알림 규칙(Notification Rule)을 설정합니다.
- 예시 조건: CPU 사용량이 5분 이상 90%를 초과할 때
- 예시 조건: 사용 가능한 디스크 용량이 10% 미만으로 떨어졌을 때
- 예시 조건: Node Exporter 응답이 끊겼을 때 (서버 다운)
조건이 충족되어 경보가 발령되면 슬랙이나 텔레그램 방으로 “[WARNING] 서버 CPU 사용량 95% 초과 감지!”라는 경고 메시지가 즉시 전송됩니다.
서버 모니터링 체계를 갖추는 것은 장애 발생 후 뒤늦게 대처하는 소위 ‘불 끄기식 운영’에서 벗어나, 장애를 예방하고 예측하는 프로액티브한 시스템 관리로 나아가는 첫걸음입니다.
무료 오픈소스 조합인 Prometheus, Grafana, Node Exporter를 활용해 내 서버실 환경을 단단하게 지켜주는 실시간 통합 대시보드를 직접 구축해 보시길 권해드립니다.