15分鐘帶你入門 Grafana
簡介
Grafana 是一款用 GO 語言開發的開源數據可視化工具,可以做數據監控和數據統計,帶有告警功能。
特點:
可視化。Grafana 擁有快速靈活的客戶端圖表,面板插件有許多不同方式的可視化指標和日志,官方庫中具有豐富的儀表盤插件,比如熱圖、折線圖、圖表等多種展示方式,讓我們復雜的數據展示的美觀而優雅。
報警和通知。可視化地為最重要的指標定義警報規則。Grafana 將持續評估它們,并發送通知。
動態儀表盤:使用模板變量創建動態和可重用的儀表板,這些模板變量作為下拉菜單出現在儀表板頂部。
混合數據源:在同一個圖中混合不同的數據源!可以根據每個查詢指定數據源。這甚至適用于自定義數據源。
注釋:注釋來自不同數據源圖表。將鼠標懸停在事件上可以顯示完整的事件元數據和標記。
過濾器:Grafana 使用 Ad-hoc 過濾器允許動態創建新的鍵/值過濾器,這些過濾器會自動應用于使用該數據源的所有查詢。
安裝
Mac 下需要首先安裝 brew 這個包管理工具,再安裝 Grafana 就方便多了:
brew update
brew install grafana
啟停命令。通過下面命令可以后臺啟動/停止 Grafana,默認端口 3000。
// start
brew services start grafana
// stop
brew services stop grafana
查看 Grafana 版本:
grafana-server -v
瀏覽器登錄:http://127.0.0.1:3000/。
默認的用戶名和密碼是:admin/admin。
下載安裝特定版本
mac 環境如下:
- 第一步,下載
curl -O https://dl.grafana.com/enterprise/release/grafana-enterprise-8.4.6.darwin-amd64.tar.gz
- 第二步,解壓
tar -zxvf grafana-enterprise-8.4.6.darwin-amd64.tar.gz
- 第三步,啟動。進入解壓目錄,./bin/grafana-server web
基礎概念
組織與用戶
Organization(組織) 是一個很大的概念,每個用戶可以擁有多個 Organization,Grafana 有一個默認的組織。用戶登錄后可以在不同的 Organization 之間切換,前提是該用戶擁有多個 Organization。不同的 Organization 之間完全不一樣,包括 datasource,dashboard 等都不一樣。創建一個 Organization 就相當于開了一個全新的視圖,所有的 datasource,dashboard 等都要再重新開始創建。
User(用戶),這個概念應該很簡單,不用多說。Grafana 里面用戶有三種角色 admin,editor,viewer。在2.1版本及之后新增了一種角色read only editor(只讀編輯模式),這種模式允許用戶修改 DashBoard,但是不允許保存。每個 user 可以擁有多個 Organization。
- admin 權限最高,可以執行任何操作,包括創建用戶,新增 Datasource,創建DashBoard。
- editor 角色不可以創建用戶,不可以新增 Datasource,可以創建 DashBoard。
- viewer 角色僅可以查看 DashBoard。
數據源
前文說過,Grafana 支持多種數據源。
可以執行多種簡單或復雜 Elasticsearch 查詢,以可視化存儲在 Elasticsearch 中的日志。
右側設置 -- 數據源 -- Add data source -- ElasticSearch。
其中 Index name 是為時間字段指定默認值,并指定 Elasticsearch 索引的名稱。您可以使用索引名稱或通配符的時間模式。
Access
這里對 Access 進行解釋一下,它設置了如何處理對數據源的請求。如果沒有其他說明,服務器應該是首選的方式。
- 服務器訪問模式(默認)
所有請求都將從瀏覽器發出到 Grafana 后端/服務器,后者再將請求轉發到數據源,從而避免可能的跨源資源共享(CORS)要求。如果選擇此訪問方式,則需要可以從 Grafana 后端/服務器訪問該 URL。
- 瀏覽器(直接)訪問(將會被廢除)
所有請求都將從瀏覽器直接向數據源發出,并且可能要遵守跨域資源共享(CORS)的要求。如果選擇此訪問方式,則需要可以從瀏覽器訪問URL。
如果選擇瀏覽器訪問,則必須更新您的 Elasticsearch 配置,以允許其他域從瀏覽器訪問 Elasticsearch。您可以通過在 elasticsearch.yml 配置文件中為選項指定這些來實現。
這個版本會在未來的版本中廢除,假如選中這個模式會有如下提示:
Browser access mode in the Elasticsearch datasource is deprecated and will be removed in a future release.
http.cors.enabled: true
http.cors.allow-origin: "*"
儀表盤(Dashboard)
我們接下來介紹一下 Grafana 中的重要 UI 界面——儀表盤。
- Dashboard。通過數據源定義好可視化的數據來源之后,對于用戶而言最重要的事情就是實現數據的可視化。在 Grafana 中,我們通過 Dashboard 來組織和管理我們的數據可視化圖表。
- Row。在 Dashboard 頁面中,我們還可以定義一個 Row(行),來組織和管理一組相關的 Panel。
- Panel。在一個 Dashboard 中一個最基本的可視化單元為一個 Panel(面板)。通過 Panel 的 Query Editor(查詢編輯器)我們可以為每一個 Panel 添加查詢的數據源以及數據查詢方式。每一個 Panel 都是獨立的,可以選擇一種或者多種數據源進行查詢。比如我們使用 ElasticSearch,那么我們可以使用 Lucene 語句進行查詢。
最佳實踐 - 編輯圖表
Metric Query editor
指標查詢編輯器。ElasticSearch 的 Metric Query editor 支持選擇多種指標(Metrics)和分組(Group By)。可以通過添加或者刪除的圖標進行。
Query
使用 lucene 查詢語句。lucene 語法可以參看傳送門[1],語法中也可以使用變量。
我大概梳理了一下,常見的語法有以下:
Metrics指標
Metrics。指標配置,每種數據源提供不同的選項,我這里用的是Elasticsearch。
根據自己的需求選擇,比如 Unique Count(根據某個字段去重,計算 UV 的時候)。比如我們需要計算百分位,就選擇 Percentiles。
集成了 ElasticSearch 中很多聚合的方法,比如 Min/Max/Count 等。
Group by
聚合分組方式,每個指標屬性不同。
Date Histogram,根據時間聚合。
Terms 根據某個字段進行聚合,一般用于生成表格。
Expression 計算
可以通過 Expression 計算出相應的結果。
較低版本不支持 Expression。可以通過 Transform 進行處理。在傳遞查詢的結果集以進行可視化之前,對結果進行一層轉換。可以支持命名過濾字段、跨查詢進行計算等等。
別名使用
可以用固定值,也可以使用分組變量:
Templating(模板)
在指標查詢除了硬編碼的方式,Grafana 支持變量注入的方式。變量顯示為儀表板頂部的下拉選擇框。這些下拉框可以方便地更改儀表板中顯示的數據。
設置變量
在 Dashboard 的設置中,我們找到 Variables 的設置,點擊 New,進入設置頁面,其中 Type 類型包含多種,我們常見的就是 Query。可以通過 JSON 字符串來自定義,它的語法如下:
默認大小限制為 500。你可以通過 size 進行設置。
你可以在 Query 中使用其他變量,當其他變量變化時,查詢的結果也會隨之變化。
{"find": "terms", "field": "@hostname", "query": "@source:$source"}
adhoc Filter 是提供給用戶可以自定義條件。官網提供的 demo[2]
使用變量
變量是值的占位符。您可以在指標查詢和面板標題中使用變量。因此,當您使用儀表板頂部的下拉菜單更改值時,面板的指標查詢將更改以反映新值。
可以使用以下兩種語法:
- $<varname> eg: @hostname:$hostname
- [[varname]] eg: @hostname:[[hostname]]
以上是官網的使用,個人發現,類似 ES 中模板字符串的寫法也是可以的。
name: ${name} AND env: test AND NOT a: ""
總結
本文結合 ElasticSearch 大致介紹了 Grafana 的基礎概念以及最佳實踐。Grafana 作為一個監控儀表盤系統,它的出現,不需要我們針對數據應用分析進行額外的開發,只需要通過配置就能得到我們想要的圖表。
Grafana 的功能是強大而且靈活的,本文只是一個入門的介紹,更多的大家用到的時候還是得去看官網文檔[3]。
參考
- Using Elasticsearch in Grafana[4]
- 入門系列文章[5]
- ES官方文檔[6]
- lucene 語法[7]
參考資料
[1]傳送門: https://segmentfault.com/a/1190000002972420
[2]demo: https://play.grafana.org/d/CknOEXDMk/elasticsearch-templated?orgId=1d
[3]官網文檔: https://grafana.com/docs/grafana/latest/
[4]Using Elasticsearch in Grafana: https://grafana.com/docs/grafana/latest/datasources/elasticsearch/#logs
[5]入門系列文章: https://juejin.cn/column/7023032795333132302
[6]ES官方文檔: https://www.elastic.co/guide/en/kibana/current/lucene-query.html
[7]lucene 語法: https://www.elastic.co/guide/en/elasticsearch/reference/7.15/query-dsl-query-string-query.html#query-string-syntax