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 整合讓你在同一個儀表板上看日誌。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!