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