Grafana 란?
Grafana는 시계열·로그·트레이스 데이터를 시각화하고 알림을 보내는 오픈소스 관측(observability) 플랫폼입니다. Prometheus를 데이터소스로 연결하면 PromQL 쿼리 결과를 대시보드 패널로 그리고, 임계치를 넘으면 Slack·이메일 등으로 알림을 보낼 수 있습니다.
- 다양한 데이터소스: Prometheus, Loki, Elasticsearch, PostgreSQL 등
- 대시보드: 패널·행·변수로 구성
- Unified Alerting: Grafana 8+ 통합 알림(규칙 + Contact point + 라우팅)
이 글은 앞서 구축한 Prometheus(:9090) + Node Exporter 환경을 전제로 합니다.
1. 설치
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-serverhttp://<서버>:3000 접속(초기 admin/admin). 첫 로그인 시 비밀번호를 변경합니다.
2. Prometheus 데이터소스 연동
UI(Connections → Data sources)에서도 되지만, 운영 환경은 provisioning 으로 코드화하는 것이 정석입니다. /etc/grafana/provisioning/datasources/prometheus.yml:
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://localhost:9090
isDefault: true
jsonData:
httpMethod: POST
timeInterval: 15s # Prometheus scrape_interval과 일치sudo systemctl restart grafana-serveraccess: proxy 는 Grafana 서버가 대신 Prometheus에 질의합니다(브라우저가 직접 접근하지 않음). 보안·CORS 측면에서 권장됩니다.
3. 대시보드 구성
빠른 시작 — 커뮤니티 대시보드 임포트
Node Exporter Full 대시보드(ID 1860)를 가져오면 즉시 풍부한 패널을 얻습니다. Dashboards → New → Import → 1860 입력 → Prometheus 데이터소스 선택.
직접 패널 만들기
패널 쿼리는 PromQL 그대로 사용합니다.
# CPU 사용률 패널
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)템플릿 변수로 호스트 선택
대시보드 Settings → Variables에서 instance 변수를 만듭니다.
Type: Query
Query: label_values(node_uname_info, instance)패널 쿼리에서 변수를 사용합니다.
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle",instance="$instance"}[5m])) * 100)이제 드롭다운으로 호스트를 바꿔가며 같은 대시보드를 재사용할 수 있습니다.
4. 대시보드 provisioning(자동 배포)
JSON으로 내보낸 대시보드를 파일로 관리합니다. /etc/grafana/provisioning/dashboards/main.yml:
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을 입력합니다.
Name: slack-infra
Integration: Slack
Webhook URL: https://hooks.slack.com/services/XXX/YYY/ZZZAlert rule — CPU 90% 초과 5분 지속
Alerting → Alert rules → New alert rule.
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 = criticalfor 5m 은 조건이 5분간 연속 참일 때만 발화시켜 일시적 스파이크에 따른 알림 피로를 줄입니다.
라우팅(Notification policy)
severity=critical 레이블을 slack-infra Contact point로 보내도록 라벨 매처를 추가합니다. group_wait, group_interval, repeat_interval 로 묶음/재발송 주기를 조정합니다.
6. 알림을 코드로 관리
알림 규칙도 provisioning이 가능합니다. /etc/grafana/provisioning/alerting/rules.yml:
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: warning7. 운영 팁
- 알림 피로 방지:
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으로 코드화하면 모니터링 스택 전체를 재현 가능하게 운영할 수 있습니다.
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.