Grafana 儀表板
Vibe Prompt
「幫我在 Grafana 建立一個 K8s 叢集監控儀表板:CPU、記憶體、網路、Pod 狀態,4 個面板。」
Docker Compose
services:
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
GF_SECURITY_ADMIN_PASSWORD: admin
volumes:
- grafana_data:/var/lib/grafana
常用面板 Query
| 面板 | PromQL |
|------|--------|
| CPU 總使用 | 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) |
| 記憶體使用 | (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 |
| 網路流量 | rate(node_network_transmit_bytes_total[5m]) |
| Pod 重啟 | sum(rate(kube_pod_container_status_restarts_total[5m])) |
Alerting Rules
groups:
- name: node-alerts
rules:
- alert: HighCPUUsage
expr: node_load1 > 2
for: 5m
labels: { severity: warning }
annotations:
summary: "{{ $labels.instance }} CPU 負載過高 (>2)"
- alert: DiskFull
expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) < 0.1
for: 10m
labels: { severity: critical }
annotations:
summary: "{{ $labels.instance }} 磁碟即將滿 (>90%)"
關鍵要點
- ✅ Grafana 支援多種資料源:Prometheus、Loki、Elasticsearch、CloudWatch、InfluxDB
- ✅ Dashboard 以 JSON 格式儲存,可以版本控制與匯入匯出
- ✅ Panel 類型:Time Series、Bar Chart、Stat、Table、Heatmap、Gauge
- ✅ Alerting 基於規則,支援多種通知管道(Slack、Email、PagerDuty、Webhook)
- ✅ Explore 模式用於臨時性查詢和除錯
儀表板設計原則
| 原則 | 說明 | 壞例子 | 好例子 | |------|------|--------|--------| | 少即是多 | 一個儀表板聚焦一個主題 | 把所有指標放同一個儀表板 | 拆分為:基礎設施、應用、資料庫 | | 一致性 | 顏色、命名、佈局統一 | 紅色代表正常,綠色代表錯誤 | 紅 = 錯誤,綠 = 正常,黃 = 警告 | | 可操作 | 每個圖表都應該對應一個行動 | 單純顯示 CPU 使用率 | 顯示 CPU 使用率,超過 90% 高亮 | | 最簡化 | 去掉不必要資訊 | 顯示所有可用指標 | 只顯示四金信號 |
常見錯誤
程式碼範例
Grafana 儀表板設計原則
儀表板分類
| 類型 | 目標使用者 | 更新頻率 | 包含內容 | |:----:|:----------:|:--------:|---------| | Executive View | CTO / 主管 | 每日 | 服務可用性、營收指標、SLO | | Team View | 開發團隊 | 每小時 | 錯誤率、延遲、流量、飽和度 | | Debug View | On-Call 工程師 | 即時 | 詳細的 Log、資源使用率 |
Panel 類型選擇
| 視覺化類型 | 適用資料 | 不適用場景 | |-----------|---------|-----------| | Time Series | 隨時間變化的數值 | 靜態分類資料 | | Bar Chart | 分類比較 | 長時間趨勢 | | Stat | 單一重點數字(SLO 等) | 需要追蹤變化 | | Table | 詳細列表資料 | 視覺化趨勢 | | Heatmap | 時間 + 數值分布 | 單一時間點 | | Gauge | 介於 0-100 的百分比 | 負值或超大值 |
告警設定
# Grafana Alert Rule
apiVersion: 1
groups:
- name: service-health
rules:
- alert: HighErrorRate
expr: |
sum(rate(http_requests_total{status=~"5.."}[5m]))
/
sum(rate(http_requests_total[5m]))
> 0.01
for: 5m
labels:
severity: critical
annotations:
summary: "錯誤率超過 1%"
Grafana:把資料變成視覺化儀表板
Grafana 是目前最流行的開源儀表板工具。它可以串接 Prometheus、Loki、Elasticsearch、CloudWatch 超過 50 種資料源。
常用的儀表板元件
| 元件 | 用途 | |:----|:----| | Stat | 顯示單一數值(CPU 使用率、線上人數) | | Time Series | 時間序列折線圖(請求延遲趨勢) | | Bar Gauge | 垂直長條(各服務的記憶體使用量) | | Table | 表格顯示(錯誤日誌列表) | | Alert | 設定警報規則(超過閾值通知 Slack) |
告警設定
Grafana Alerting 可以設定規則(例如 CPU > 80% 持續 5 分鐘)並發送通知到 Slack、Email、PagerDuty。
下一章預告:Loki 日誌
Grafana 不只能畫 Metric 圖表——下一章的 Loki 整合讓你在同一個儀表板上看日誌。