為什麼從 Grafana 開始#

要快速展示 Observability 的價值,最直接的方式就是讓人「看見」訊號。Grafana 位於整條訊號處理鏈的最末端——資料生成、收集、儲存之後,最終都要透過視覺化呈現出來,而 Grafana 正是目前最具代表性的視覺化平台。

Grafana 是一款開源的監控與資料視覺化工具,能夠把多種來源的資料以儀表板(Dashboard)的形式呈現。從 Kubernetes 叢集狀態、應用程式效能,到家用電力、Tesla 車況,甚至是廚房裡的家庭資訊牆,只要有資料來源,Grafana 都能加以視覺化。

Grafana 的由來#

Grafana 由 Torkel Ödegaard 在 2013 年底發起。當時主流的時序資料庫(Time Series Database, TSDB)是 Graphite,查詢能力強但視覺化體驗不佳;同時間另一套視覺化工具 Kibana 雖然 UI 相當好用,但只支援 ElasticSearch。Torkel 借助 Kibana 是開源軟體的特性,將其 fork 後拔除 ElasticSearch 相關部份,改接到 Graphite 作為資料來源,這就是 Grafana 的雛形。「Grafana」這個名字便是由 [Graph]ite 與 Kib[ana] 拼接而來。

隨著支援的資料來源越來越多(InfluxDB、Prometheus、PostgreSQL、MySQL、ElasticSearch 等),Grafana 演進成一個以 Plugin 為核心、可整合任何資料源的視覺化平台。Grafana Labs 也圍繞這個生態系發展出 Loki、Tempo、k6 等周邊產品,並提供 SaaS 版的 Grafana Cloud。

核心元件#

Data Source#

Grafana 本身不儲存資料,它是一個查詢者——查詢各種 Data Source 並將結果視覺化。常見的內建 Data Source 包括 Graphite、InfluxDB、Prometheus、PostgreSQL;社群也開發了非標準的 Data Source Plugin,例如把 Google Sheets 當資料庫使用,或直接透過 HTTP 抓取 JSON。

設定 Data Source 時要注意:

  • 不同類型的連線需求各異,例如 API 需要 Token、資料庫需要帳號密碼。
  • Grafana 所在的網路環境必須能連得到 Data Source,並注意 DNS 與憑證設定是否正確。

Explore#

連接好 Data Source 後,可以先透過 Explore 功能直接做查詢預覽。這是建立 Dashboard 之前最方便的「試水溫」工具,可以先確認哪些指標、哪些查詢值得放進 Dashboard。

Dashboard 與 Panel#

Dashboard 由多個 Panel 組成,每個 Panel 都可以設定查詢語法並選擇視覺化方式(折線圖、長條圖、圓餅圖等)。透過 Panel Plugin 還能擴充世界地圖、TreeMap 等更多呈現方式。Dashboard 必須儲存在 Folder 之下,後續權限管控也透過 Folder 進行。

編輯 Dashboard 時記得時常存檔,誤操作離開頁面就可能讓辛苦的設定付諸流水。

如果一時沒有靈感,也可以從 Dashboard Gallery 匯入社群分享的範本來改造。

Alerting#

Alerting 是 Grafana 的另一核心功能,會週期性執行查詢,當結果超過門檻便觸發告警。告警可送往 Discord、Email、Kafka、Line、Slack 等多種通知管道。

Dashboard 設計原則#

Grafana Labs 在 Webinar 中分享過兩個非常受用的 Dashboard 設計原則:

  • 每個 Dashboard 都應該有明確目標:先想清楚要解決什麼問題、講述什麼故事、面向哪些使用者,再決定要放什麼資訊。盡量保持簡潔聚焦,不要妄想用一個 Dashboard 滿足所有需求。
  • 所有資訊都重要,但重要程度不同:剔除無關內容降低認知負擔,並透過排版順序、大小、顏色等手法,讓最重要的資訊一眼可見。

Provisioning#

Grafana 的 Data Source、Dashboard、Folder 等設定如果全部用手動點擊建立會非常瑣碎。Provisioning 機制可以透過設定檔在啟動時自動建立資源,特別適合需要「開箱即用」的環境,也是 IaC 化部署 Grafana 的關鍵。

Lab 摘要#

範例會以 Docker Compose 啟動 Grafana:

docker-compose up -d

接著可以打開 http://localhost:3000,預設帳密為 admin/admin,並可在 Dashboard 列表看到由 Provisioning 預先建立的「Grafana Stats」。Lab 同時也會:

  • 將資料目錄 mount 到本機,避免容器重啟時資料遺失。
  • 透過 Provisioning 建立 Data Source 與 Dashboard。
  • 透過 grafana.ini 啟用 Grafana 自身的 Prometheus Metrics(/metrics)。

關閉服務:

docker-compose down

小結#

Grafana 是一個多功能的資料視覺化平台,核心能力包括:

  • 整合多種 Data Source。
  • 用 Panel 與 Dashboard 呈現資料。
  • 透過 Alerting 在異常時主動通知。

了解了訊號的「最終消費端」之後,接下來就要往源頭走:先從 Metrics 開始,看看訊號是怎麼生成、收集與儲存的。

原文出處#

  • 原書/iThome:https://ithelp.ithome.com.tw/articles/10320606