서버 운영 과정에서 실시간 상태 파악은 필수적이다. 서비스 지연이나 장애가 발생한 뒤 원인을 찾는 사후 대응 방식은 서비스 신뢰도를 떨어뜨린다. 이를 방지하기 위해 업계 표준으로 자리 잡은 Prometheus와 Grafana 조합을 Docker Compose로 구축하여 효율적인 모니터링 환경을 조성하는 방법을 알아본다.

1. Prometheus와 Grafana의 역할 및 장점

모니터링 시스템 구축 시 이 조합이 선호되는 이유는 데이터 수집과 시각화의 명확한 역할 분담 때문이다.

  • Prometheus(프로메테우스): 시계열 데이터베이스(TSDB)를 기반으로 동작하며, 대상 서버의 메트릭을 수집하고 저장하는 역할을 수행한다. 구조가 단순하여 확장성이 뛰어나며 강력한 쿼리 언어인 PromQL을 제공한다.
  • Grafana(그라파나): 수집된 수치 데이터를 시각화하는 도구다. 직관적인 대시보드를 제공하며 수만 개의 커뮤니티 템플릿을 통해 전문가 수준의 모니터링 화면을 즉시 구현할 수 있다.
  • Docker Compose: 복잡한 설치 과정 없이 설정 파일 하나로 전체 모니터링 스택을 컨테이너화하여 실행한다. 환경 구축의 일관성을 보장하고 관리 효율을 극대화한다.

2. 환경 구축 사전 준비

작업을 시작하기 전 해당 서버에 Docker 및 Docker Compose가 설치되어 있어야 한다. 본 가이드에서는 서버 자체의 자원을 수집하기 위한 Node Exporter를 포함하여 실질적인 데이터 흐름을 확인하는 과정을 다룬다.

3. 단계별 구축 절차

STEP 1: 프로젝트 디렉토리 구조 생성

설정 파일을 체계적으로 관리하기 위해 폴더를 생성하고 이동한다.

Bash

mkdir monitoring && cd monitoring
mkdir prometheus

STEP 2: Prometheus 설정 파일 작성

데이터 수집 대상을 정의하는 prometheus.yml 파일을 prometheus/ 디렉토리 안에 생성한다.

YAML

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node_exporter'
    static_configs:
      - targets: ['node-exporter:9100']

STEP 3: Docker Compose 파일 작성

전체 서비스를 통합 관리하는 docker-compose.yml 파일을 루트 디렉토리에 작성한다.

YAML

version: '3.8'

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    networks:
      - monitoring

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
    networks:
      - monitoring

  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    ports:
      - "9100:9100"
    networks:
      - monitoring

networks:
  monitoring:
    driver: bridge

4. 서비스 실행 및 접속 확인

터미널에서 아래 명령어를 입력하여 백그라운드에서 컨테이너를 실행한다.

Bash

docker-compose up -d

실행 후 브라우저를 통해 서비스 정상 작동 여부를 확인한다.

  1. Prometheus: http://localhost:9090 접속 후 ‘Status > Targets’에서 node_exporter 상태가 UP인지 확인한다.
  2. Grafana: http://localhost:3000 접속 시 로그인 화면이 나타나면 정상이다. 초기 계정 정보는 admin / admin이다.

5. Grafana 데이터 소스 연결 및 대시보드 구성

데이터 시각화를 위해 Grafana와 Prometheus를 연동해야 한다.

  1. 데이터 소스 추가: 좌측 메뉴의 ‘Connections > Data Sources’에서 ‘Add data source’를 선택하고 ‘Prometheus’를 클릭한다.
  2. 연결 설정: URL 항목에 http://prometheus:9090을 입력한다. 도커 네트워크 내에서 서비스 이름을 호스트로 사용하기 때문이다. 설정 후 하단의 ‘Save & Test’를 클릭한다.
  3. 대시보드 임포트: ‘Dashboards > New > Import’를 선택한다.
  4. 템플릿 활용: ID 입력 칸에 1860(Node Exporter Full)을 입력하고 로드한다. 데이터 소스로 방금 추가한 Prometheus를 지정하고 ‘Import’를 완료한다.

6. 실전 활용 및 모니터링 고도화

이제 대시보드를 통해 CPU 사용률, 메모리 가용량, 네트워크 트래픽 등 서버의 주요 지표를 실시간으로 확인할 수 있다. 모니터링 시스템의 핵심은 단순한 관찰이 아니라 선제적 대응에 있다.

예를 들어 특정 지표가 임계치를 넘었을 때 알림을 보내는 Alert 기능을 활용하면 서비스 장애가 발생하기 전 조치를 취할 수 있다. 또한 축적된 데이터를 분석하여 서버 증설 시점이나 리소스 최적화 방향을 결정하는 근거로 삼을 수 있다. 본 가이드에서 구축한 기본 환경을 바탕으로 향후 애플리케이션 전용 Exporter나 로그 분석 도구인 Loki 등을 통합하여 통합 관측 시스템으로 확장하는 것을 권장한다.

댓글 남기기