/엔지니어/클라우드/Grafana 대시보드 — Prometheus 연동
클라우드중급linuxgrafanaprometheusdashboard

Grafana 대시보드 — Prometheus 연동과 알림(Alerting) 설정

Grafana에 Prometheus 데이터소스를 연동하고 패널 대시보드를 구성합니다. provisioning 자동화, 변수(template variable), Grafana 통합 알림 규칙과 Contact point까지 실무 기준으로 다룹니다.

Grafana 란?

Grafana는 시계열·로그·트레이스 데이터를 시각화하고 알림을 보내는 오픈소스 관측(observability) 플랫폼입니다. Prometheus를 데이터소스로 연결하면 PromQL 쿼리 결과를 대시보드 패널로 그리고, 임계치를 넘으면 Slack·이메일 등으로 알림을 보낼 수 있습니다.

  • 다양한 데이터소스: Prometheus, Loki, Elasticsearch, PostgreSQL 등
  • 대시보드: 패널·행·변수로 구성
  • Unified Alerting: Grafana 8+ 통합 알림(규칙 + Contact point + 라우팅)

이 글은 앞서 구축한 Prometheus(:9090) + Node Exporter 환경을 전제로 합니다.


1. 설치

Bash
sudo apt-get install -y apt-transport-https software-properties-common
wget -q -O - https://apt.grafana.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/grafana.gpg
echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] https://apt.grafana.com stable main" \
  | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt-get update && sudo apt-get install -y grafana

sudo systemctl enable --now grafana-server

http://<서버>:3000 접속(초기 admin/admin). 첫 로그인 시 비밀번호를 변경합니다.


2. Prometheus 데이터소스 연동

UI(Connections → Data sources)에서도 되지만, 운영 환경은 provisioning 으로 코드화하는 것이 정석입니다. /etc/grafana/provisioning/datasources/prometheus.yml:

YAML
apiVersion: 1

datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://localhost:9090
    isDefault: true
    jsonData:
      httpMethod: POST
      timeInterval: 15s   # Prometheus scrape_interval과 일치
Bash
sudo systemctl restart grafana-server

access: proxy 는 Grafana 서버가 대신 Prometheus에 질의합니다(브라우저가 직접 접근하지 않음). 보안·CORS 측면에서 권장됩니다.


3. 대시보드 구성

빠른 시작 — 커뮤니티 대시보드 임포트

Node Exporter Full 대시보드(ID 1860)를 가져오면 즉시 풍부한 패널을 얻습니다. Dashboards → New → Import → 1860 입력 → Prometheus 데이터소스 선택.

직접 패널 만들기

패널 쿼리는 PromQL 그대로 사용합니다.

PROMQL
# CPU 사용률 패널
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

템플릿 변수로 호스트 선택

대시보드 Settings → Variables에서 instance 변수를 만듭니다.

CODE
Type:  Query
Query: label_values(node_uname_info, instance)

패널 쿼리에서 변수를 사용합니다.

PROMQL
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle",instance="$instance"}[5m])) * 100)

이제 드롭다운으로 호스트를 바꿔가며 같은 대시보드를 재사용할 수 있습니다.


4. 대시보드 provisioning(자동 배포)

JSON으로 내보낸 대시보드를 파일로 관리합니다. /etc/grafana/provisioning/dashboards/main.yml:

YAML
apiVersion: 1

providers:
  - name: 'default'
    orgId: 1
    folder: 'Infra'
    type: file
    disableDeletion: false
    updateIntervalSeconds: 30
    options:
      path: /var/lib/grafana/dashboards

대시보드 JSON 파일을 /var/lib/grafana/dashboards/ 에 두면 Grafana가 자동 로드합니다. 형상 관리(Git)와 잘 어울립니다.


5. Unified Alerting — 알림 규칙

Grafana 통합 알림은 세 요소로 구성됩니다.

요소역할
Alert rule조건(임계치)과 평가 주기
Contact point알림을 보낼 곳(Slack, Email 등)
Notification policy어떤 알림을 어디로 보낼지 라우팅

Contact point 설정 (Slack 예시)

Alerting → Contact points → Add. Slack Incoming Webhook URL을 입력합니다.

CODE
Name:        slack-infra
Integration: Slack
Webhook URL: https://hooks.slack.com/services/XXX/YYY/ZZZ

Alert rule — CPU 90% 초과 5분 지속

Alerting → Alert rules → New alert rule.

CODE
Query A (Prometheus):
  100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

Expression B (Reduce):  Last value of A
Condition  C (Threshold): B IS ABOVE 90

Evaluation: every 1m, for 5m
Labels:     severity = critical

for 5m 은 조건이 5분간 연속 참일 때만 발화시켜 일시적 스파이크에 따른 알림 피로를 줄입니다.

라우팅(Notification policy)

severity=critical 레이블을 slack-infra Contact point로 보내도록 라벨 매처를 추가합니다. group_wait, group_interval, repeat_interval 로 묶음/재발송 주기를 조정합니다.


6. 알림을 코드로 관리

알림 규칙도 provisioning이 가능합니다. /etc/grafana/provisioning/alerting/rules.yml:

YAML
apiVersion: 1

groups:
  - orgId: 1
    name: node-alerts
    folder: Infra
    interval: 1m
    rules:
      - uid: high-mem
        title: HighMemoryUsage
        condition: C
        data:
          - refId: A
            datasourceUid: prometheus
            model:
              expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
        for: 5m
        labels:
          severity: warning

7. 운영 팁

  • 알림 피로 방지: for 지속 시간과 repeat_interval 을 충분히 길게.
  • No Data 처리: 데이터가 끊기는 것도 장애입니다. rule의 No Data 상태를 Alerting으로 처리.
  • 대시보드 변수 $__rate_interval: rate 윈도를 scrape interval에 맞춰 자동 계산해 줍니다.
  • 읽기 전용 권한 분리: 운영자에게 Viewer 역할만 부여해 대시보드 변조 방지.

정리

항목핵심
데이터소스provisioning YAML, access: proxy
대시보드ID 1860 임포트 또는 JSON provisioning
변수label_values()로 호스트 드롭다운
알림 구조Rule + Contact point + Notification policy
발화 안정화for 5m, repeat_interval
코드화datasources/dashboards/alerting provisioning

Grafana는 Prometheus가 모은 데이터를 사람이 읽을 수 있게 만들고, 임계치를 넘는 순간을 알려 주는 마지막 한 조각입니다. 데이터소스·대시보드·알림을 모두 provisioning으로 코드화하면 모니터링 스택 전체를 재현 가능하게 운영할 수 있습니다.

#grafana#prometheus#dashboard#alerting#monitoring
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.