📊 Prometheus + Grafana

데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약
📅 2026.03 작성 🏷️ monitoring 🏷️ metrics 🏷️ visualization 🔧 데브옵스 · 인프라 엔지니어

1. Prometheus + Grafana란?

Prometheus는 오픈소스 메트릭 수집 및 경고 시스템이며, Grafana는 메트릭 시각화 대시보드 플랫폼입니다. 두 도구는 함께 사용되어 인프라, 애플리케이션, AI/ML 파이프라인까지 실시간 모니터링을 제공합니다.

🔍 수집 (Scrape)

Prometheus가 대상 엔드포인트에서 HTTP로 메트릭을 주기적으로 가져옵니다. (Pull 방식)

📈 저장 & 질의

시계열 데이터베이스(TSDB)에 저장하며, PromQL로 유연하게 질의 가능.

📊 시각화 & 알림

Grafana 대시보드로 메트릭을 시각화하고, Alertmanager로 알림 전송.

2. 왜 써야 하는가?

기존 모니터링 대안 (Nagios, Zabbix, CloudWatch)과 비교한 핵심 차이점:

기능Prometheus + GrafanaNagios / ZabbixCloudWatch (AWS)
데이터 모델시계열 (레이블 기반)트리 기반시계열 (제한적 레이블)
질의 언어PromQL (강력한 집계)제한적CloudWatch Metrics Insights
Pull vs PushPull (기본)Push / AgentPush (API)
시각화Grafana (탁월한 대시보드)내장 (제한적)CloudWatch Dashboards
오픈소스완전 오픈소스부분 유료독점
✅ 핵심 장점 — 레이블 기반 메트릭, PromQL의 유연함, Grafana의 풍부한 시각화, 활발한 커뮤니티.

3. 핵심 개념

Prometheus 아키텍처는 아래와 같이 단순하면서도 강력합니다.

┌─────────────────────────────────────────────────────────────┐ │ Prometheus Server │ │ ┌──────────┐ ┌──────────────┐ ┌────────────────┐ │ │ │ TSDB │ │ Scraper │ │ Rules/Alert │ │ │ │ (시계열) │◄───│ (HTTP Pull) │───►│ (평가/알림) │ │ │ └──────────┘ └──────┬───────┘ └───────┬────────┘ │ │ │ │ │ └─────────────────────────┼────────────────────┼────────────┘ │ │ ┌─────────────▼──────┐ ┌───────▼──────────┐ │ Exporter / App │ │ Alertmanager │ │ (metrics endpoint)│ │ (Slack, Pager…) │ └────────────────────┘ └──────────────────┘ ▲ │ (Grafana Datasource) ┌───────┴────────┐ │ Grafana UI │ │ (대시보드) │ └────────────────┘
⚠️ 주의 — Prometheus는 Pull 기반이므로 네트워크 분할이나 방화벽에서 대상에 접근 가능해야 합니다. Pushgateway로 예외 처리 가능.

4. 퀵스타트

로컬 환경에서 Prometheus + Grafana를 빠르게 시작합니다. (Python 예제 포함)

4.1 설치 (Docker Compose)

# docker-compose.yml (최신 버전)
$ cat <<EOF > docker-compose.yml
version: '3.8'
services:
  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
EOF
$ docker compose up -d

4.2 Prometheus 설정 (prometheus.yml)

# prometheus.yml
global:
  scrape_interval: 15s
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'python-app'
    static_configs:
      - targets: ['host.docker.internal:8000']

4.3 Python 예제: 메트릭 노출

# app.py (pip install prometheus-client)
from prometheus_client import start_http_server, Counter, Histogram
import time, random

REQUEST_COUNT = Counter('app_requests_total', 'Total requests')
REQUEST_DURATION = Histogram('app_request_duration_seconds', 'Request duration')

def process():
    with REQUEST_DURATION.time():
        time.sleep(random.uniform(0.1, 0.5))
        REQUEST_COUNT.inc()

if __name__ == '__main__':
    start_http_server(8000)
    while True:
        process()
        time.sleep(1)
$ python app.py &

4.4 Grafana에서 데이터소스 연결

# 1. http://localhost:3000 (admin/admin)
# 2. Configuration → Data Sources → Add → Prometheus
# 3. URL: http://prometheus:9090 (docker network) 또는 http://localhost:9090
# 4. Save & Test → 대시보드 생성
💡 팁 — Grafana 대시보드 ID 1860 (Node Exporter) 또는 직접 PromQL로 패널 생성.

5. 핵심 설정 레퍼런스

설정 항목설명예시
scrape_interval메트릭 수집 주기15s
evaluation_interval규칙 평가 주기 (알림)15s
static_configs대상 목록 직접 지정targets: ['localhost:9090']
relabel_configs레이블 재작성 (필터링/변경)source_labels: [__meta_ec2_tag_Name]
alertingAlertmanager 엔드포인트alertmanagers: [...]
rule_files알림 규칙 파일 경로['alerts.yml']

Grafana에서는 Datasource 설정과 Dashboard provisioning (YAML)을 통해 자동화 가능.

6. 실무 팁 & 트러블슈팅

문제원인해결책
메트릭이 안 보임Scrape 대상이 /metrics 제공 안 함curl http://target:port/metrics 확인
Grafana "No data"데이터소스 시간 범위/레이블 불일치Prometheus 탐색기에서 PromQL 테스트
알림이 안 옴Alertmanager 설정 누락amtool check-config 로 검증
디스크 사용량 급증TSDB 보존 기간이 김--storage.tsdb.retention.time=30d
카디널리티 폭발레이블 값이 무한히 증가레이블 제한, __tmp_* 사용, relabel로 정리
🔥 실무 꿀팁 — Prometheus의 --web.enable-lifecycle 옵션으로 설정 리로드 (curl -X POST localhost:9090/-/reload). Grafana는 Provisioning 폴더로 대시보드와 데이터소스를 코드 관리하세요.

7. 참고 자료