Grafana 的定位#

在可觀測性的生態系中,Grafana 扮演的角色非常明確:它是一個視覺化與查詢平台,本身不儲存任何資料

這個定位看似簡單,卻是 Grafana 最大的優勢。你的 Metrics 可能存在 Prometheus,Logs 存在 Loki,Traces 存在 Tempo,甚至還有一些資料在 Elasticsearch 或 InfluxDB 裡 ──Grafana 讓你在同一個介面中查詢和呈現所有這些來源的資料,而不需要在多個工具之間切換。

你可以把 Grafana 想像成一個「萬用遙控器」:它不是電視、也不是音響,但它能操控你家裡所有的設備。你需要的是設備本身(Backend),而 Grafana 提供的是統一的操作介面。

核心元件#

Data Source── 連接後端的橋樑#

Data Source 是 Grafana 與後端儲存之間的連接設定。每一種後端都有對應的 Data Source 外掛,告訴 Grafana 如何與該後端溝通。

  • 設定一個 Data Source,本質上就是告訴 Grafana:這個後端的位址在哪裡、用什麼認證方式、預設的查詢參數是什麼
  • Grafana 內建支援數十種 Data Source,包括 Prometheus、Loki、Tempo、Elasticsearch、InfluxDB、MySQL、PostgreSQL 等
  • 社群和第三方外掛提供了更多選擇,幾乎涵蓋所有主流的資料儲存系統

在規劃可觀測性架構時,選擇 Grafana 原生支援度高的 Backend(例如 Grafana 自家的 LGTM Stack:Loki、Grafana、Tempo、Mimir),可以獲得最佳的整合體驗,包括跨資料類型的關聯查詢。

Dashboard── 視覺化的核心#

Dashboard 是由多個面板(Panel)組成的頁面,每個面板顯示一個或多個查詢的視覺化結果。

Dashboard 是日常營運中最常使用的功能:

  • Panel 是最小的視覺化單位,支援折線圖、長條圖、儀表板、表格、熱力圖等多種呈現方式
  • Variable 讓 Dashboard 具備互動性 ── 你可以用下拉選單切換不同的服務、環境或時間範圍,而不需要為每種組合建立獨立的 Dashboard
  • Row 用來將相關的 Panel 分組,讓 Dashboard 在視覺上更有結構
  • Dashboard 可以匯出為 JSON,方便版本控制和跨環境部署

Explore── 臨時查詢的工作台#

Explore 是一個專為臨時查詢和除錯設計的介面,與 Dashboard 的差異在於它不需要預先設定面板。

  • 當你在排查問題時,Explore 是你的起點 ── 直接選擇 Data Source、寫查詢、看結果
  • 支援同時開啟多個查詢頁籤,方便比對不同來源的資料
  • Split View 功能讓你在同一個畫面左右並排兩個查詢,例如左邊看 Metrics 的異常時間點,右邊看同一時段的 Logs
  • 當你在 Explore 中找到有價值的查詢,可以直接將它加入既有的 Dashboard

Dashboard 和 Explore 的使用時機不同:Dashboard 是給「已知要看什麼」的日常監控用的,Explore 是給「還不知道問題在哪裡」的臨時排查用的。兩者互補,不要試圖用 Dashboard 取代 Explore 的角色。

Alerting── 主動通知的機制#

Alerting 讓 Grafana 根據查詢結果自動觸發告警,而不需要有人一直盯著 Dashboard。

  • Alert Rule 定義告警條件:對哪個 Data Source 執行什麼查詢、當結果超過什麼閾值時觸發
  • Contact Point 定義通知管道:Email、Slack、PagerDuty、Webhook 等
  • Notification Policy 定義路由規則:哪些告警送到哪個 Contact Point、是否需要靜音(Silence)或分組
  • 支援多層級告警(Warning / Critical),避免所有告警都用同樣的緊急程度

告警設計是一門學問。最常見的問題是告警疲勞(Alert Fatigue)── 當告警太多、太頻繁、且大多數是誤報時,團隊會開始忽略所有告警,包括真正重要的那些。設計告警時,每一條規則都應該對應一個需要人為介入的具體動作。

重要觀念#

查詢語言不是 Grafana 的#

一個常見的誤解是把查詢語言歸屬於 Grafana。事實上,Grafana 只是轉發查詢到後端,並呈現結果。你在 Grafana 中寫的 PromQL 是 Prometheus 的語言、LogQL 是 Loki 的語言、TraceQL 是 Tempo 的語言。

這意味著:

  • 學習查詢語言,本質上是在學習對應的 Backend
  • 同一個查詢在 Grafana 和直接對 Backend 執行,結果應該一致
  • 換掉 Grafana 不影響你的查詢知識,換掉 Backend 才會

Provisioning 與 Infrastructure as Code#

Grafana 支援透過設定檔(YAML)或 API 來管理 Data Source、Dashboard 和 Alert Rule,而非只能透過 UI 手動操作。這在團隊協作和多環境部署時至關重要 ── 你的 Dashboard 定義可以跟應用程式碼一起進版本控制。

Dashboard 設計的最佳實踐#

一個好的 Dashboard 不只是「把圖表排上去」,它需要經過設計才能真正幫助團隊做出決策。

層次化設計#

建立 Dashboard 時,採用由上而下的層次結構

  • Level 1 – Overview:全系統的健康狀態總覽,通常是一頁就能看完的高階指標(請求量、錯誤率、延遲分佈)。這是大多數人每天第一個打開的頁面
  • Level 2 – Service:單一服務的詳細資訊,包含該服務的 RED Metrics(Rate、Errors、Duration)和資源使用量
  • Level 3 – Debug:最詳細的排查用 Dashboard,可能包含個別 endpoint 的表現、資料庫查詢效能、快取命中率等

每一層的 Dashboard 都應該包含連結(Link),讓你能夠從 Overview 一鍵鑽探(Drill Down)到 Service,再鑽探到 Debug。

一致性原則#

  • 命名規範:統一的 Dashboard 和 Panel 命名規則,例如 [Team] Service - Category
  • 顏色語意:綠色代表正常、黃色代表警告、紅色代表異常 ── 在所有 Dashboard 中保持一致
  • 時間範圍:相關的 Panel 使用相同的時間範圍,避免讓使用者誤解因果關係
  • 單位標示:每個數值軸都要有明確的單位(ms、req/s、%、bytes),避免猜測

避免資訊過載#

  • 一個 Dashboard 不要超過 15-20 個 Panel── 太多面板會讓人無法聚焦
  • 使用 Row 摺疊次要資訊,讓使用者可以選擇性展開
  • 不是所有 Metrics 都值得放上 Dashboard── 只放那些能驅動決策的指標
  • 善用 Stat Panel(單一數字面板)來突顯最關鍵的數值,例如當前的錯誤率或 SLO 達成率

設計 Dashboard 時問自己:「看到這個面板之後,我會做什麼決定或採取什麼行動?」 如果答不出來,這個面板可能不需要存在。

什麼時候引入 Grafana#

Grafana 的引入時機取決於你的需求和現有架構:

適合引入的情境

  • 你的可觀測性資料分散在多個後端,需要一個統一的查看入口
  • 團隊需要建立標準化的 Dashboard 和告警規則
  • 你已經在使用或計畫使用 Prometheus、Loki、Tempo 等開源後端
  • 你希望視覺化工具和儲存後端解耦,保留未來替換的彈性

可以暫緩的情境

  • 你使用的雲端服務已經提供了整合良好的原生監控介面(例如 AWS CloudWatch、GCP Cloud Monitoring)
  • 團隊規模很小,且所有資料都在同一個後端中,不需要跨來源查詢
  • 你的系統仍在非常早期的階段,基礎的 CLI 工具或簡單的日誌查看就足夠

即使在暫緩的情境下,理解 Grafana 的設計理念仍然有價值。它所強調的「資料源與視覺化分離」、「層次化 Dashboard」、「可程式化管理」等觀念,適用於任何視覺化工具的使用。

為什麼選擇 Grafana#

在眾多視覺化工具中,Grafana 脫穎而出的原因:

  • 開源且活躍:Apache 2.0 授權,社群貢獻者眾多,更新頻率高
  • 生態系完整:與 Prometheus、Loki、Tempo、Mimir、OpenTelemetry 等主流工具深度整合
  • Data Source 外掛豐富:幾乎支援所有主流的資料儲存系統
  • 社群 Dashboard:Grafana.com 上有數千個社群分享的 Dashboard 模板,可以直接匯入使用
  • 企業版與雲端版:如果需要更多功能(如 RBAC、SSO、SLA 保證),Grafana Cloud 和 Enterprise 版本提供商業支援

Grafana 不是唯一的選擇,但它是目前開源可觀測性生態系中整合度最高、社群最活躍的視覺化平台。理解了 Grafana,你就掌握了觀察和理解系統的核心工具。