Grafana 圖形面板高級(jí)定制方法
根據(jù)前文的方式方法基本上可以把我們的監(jiān)控圖表繪制出來(lái),但是有的場(chǎng)景下面可能需要更多的定制功能。比如我們想要在 CPU 使用率的面板中同時(shí)展示系統(tǒng)、用戶(hù)以及總的使用率,還需要做一些其他定制讓我們的圖表看起來(lái)更加友好。
多個(gè)查詢(xún)
編輯 CPU 使用率這個(gè)面板,在面板編輯器下方的 Query 區(qū)域點(diǎn)擊 + Query 按鈕新增一個(gè)查詢(xún):
在該查詢(xún)中輸入查詢(xún)語(yǔ)句 sum(rate(node_cpu_seconds_total{instance=~"$host",mode="system"}[1m])) by (instance) / sum(rate(node_cpu_seconds_total{instance=~"$host"}[1m])) by (instance) * 100 來(lái)獲取系統(tǒng) CPU 的使用率:
用同樣的方式再新增一個(gè)查詢(xún)用戶(hù) CPU 使用率的語(yǔ)句:
如果我們選擇查詢(xún)所有節(jié)點(diǎn)的 CPU 使用率,那么最終的效果如下所示:
轉(zhuǎn)換
我們可以看大佬 Legend 部分的展示始終會(huì)帶上 :9100 這個(gè)端口號(hào),但其實(shí)這對(duì)于我們展示來(lái)說(shuō)意義不大,所以最好是去掉這個(gè)端口信息,可以點(diǎn)擊編輯器下方 Query 旁邊的 Transform 選項(xiàng)卡進(jìn)入轉(zhuǎn)換頁(yè)面:
Transform 轉(zhuǎn)換功能允許我們?cè)诓樵?xún)結(jié)果可視化之前加入、計(jì)算、重新排序、隱藏和重命名查詢(xún)結(jié)果,不過(guò)目前只支持時(shí)間序列數(shù)據(jù)。對(duì)于擁有大量?jī)x表板或大量查詢(xún)的用戶(hù)而言,能夠在另一個(gè)面板中重用來(lái)自一個(gè)面板的查詢(xún)結(jié)果可能會(huì)帶來(lái)巨大的性能提升。如果有多個(gè)轉(zhuǎn)換,Grafana 會(huì)按照它們列出的順序來(lái)應(yīng)用它們,每個(gè)轉(zhuǎn)換都會(huì)創(chuàng)建一個(gè)新的結(jié)果集,該結(jié)果集會(huì)傳遞到管道中的下一個(gè)轉(zhuǎn)換進(jìn)行處理。
Grafana 中支持非常多的轉(zhuǎn)換方式,我們這里使用 Rename by regex 這個(gè)通過(guò)正則重命名的轉(zhuǎn)換器即可,這里我們只需要添加一個(gè) (.*):9100 的正則表達(dá)式即可,將 host 信息保留下來(lái),如下圖所示:
關(guān)于轉(zhuǎn)換的更多使用方法可以參考官方文檔 https://grafana.com/docs/grafana/latest/panels/transformations/types-options/ 了解更多信息。
Legend 配置
上面轉(zhuǎn)換完成后,可以看到 Legend 部分展示的圖例較多,我們可以將 Legend 的模式修改為 Table:
修改為 Table 模式后可以看到圖形中的 Legend 用表格的形式展示出來(lái)了,此外我們還可以通過(guò) Legend values 來(lái)選擇一些其他的信息進(jìn)行展示,比如最大值、最小值、平均值等等:
其他選項(xiàng)
由于我們這里計(jì)算的都是百分比,所以可以將單位設(shè)置為 %,位于右側(cè)的 Standard options 下方的 Unit 中選擇 Misc -> Percent(0-100) 即可:
此外還可以配置圖例的最小值、最大值、保留小數(shù)的位數(shù)、圖形顏色配置等等:
時(shí)間間隔
前面我們?cè)诓樵?xún)監(jiān)控?cái)?shù)據(jù)的時(shí)候都是將區(qū)間向量的范圍固定成了 1m 或者 5m,這樣固定后顯然不是非常靈活,所以我們可以再添加一個(gè)時(shí)間間隔的參數(shù)來(lái)靈活選擇。
這里我們新增了一個(gè)名為 interval 的參數(shù),不過(guò)需要注意該參數(shù)的類(lèi)型為 Interval,然后我們配置該參數(shù)可選的值包括 1m,5m,10m,30m,添加后在 Dashboard 頁(yè)面上就會(huì)多一個(gè)時(shí)間間隔的下拉框。然后記得將查詢(xún)語(yǔ)句中的相關(guān)時(shí)間間隔替換成 $interval 參數(shù):
覆蓋
用同樣的方式可以去對(duì)內(nèi)存監(jiān)控圖表進(jìn)行修改,比如在一個(gè)圖表中展示總內(nèi)存、已用內(nèi)存、可用內(nèi)存、內(nèi)存使用率等信息。
新增總內(nèi)存的查詢(xún) node_memory_MemTotal_bytes{instance=~"$host"},已用內(nèi)存的查詢(xún) node_memory_MemTotal_bytes{instance=~"$host"} - node_memory_MemAvailable_bytes{instance=~"$host"} 以及可用內(nèi)存的查詢(xún) node_memory_MemAvailable_bytes{instance=~"$host"},如下圖所示:
但是這里有一個(gè)明顯的問(wèn)題是內(nèi)存使用率的結(jié)果是一個(gè)百分比,而其他內(nèi)存使用情況的結(jié)果是具體的內(nèi)存大小,那么將他們繪制在同一個(gè)圖形中必然會(huì)有單位不一致的問(wèn)題,而且結(jié)果相差也較大,那么可以怎么來(lái)解決這個(gè)問(wèn)題呢?
首先我們可以先將整個(gè)面板的單位調(diào)整為 bytes(IEC),該形式的單位會(huì)自動(dòng)在 GiB、MiB、KiB 之間進(jìn)行換算:
但是明顯使用率的單位是不正確的,這個(gè)時(shí)候就需要我們針對(duì)該查詢(xún)進(jìn)行覆蓋配置,點(diǎn)擊編輯器右側(cè) Overrides 選項(xiàng)卡進(jìn)行覆蓋配置:
點(diǎn)擊選項(xiàng)卡中的 + Add field override 按鈕可以對(duì)屬性進(jìn)行覆蓋操作,可選的方式有很多,比如可以設(shè)置指定具體屬性的值,也可以根據(jù)正則表達(dá)式來(lái)匹配屬性的名進(jìn)行配置,還可以根據(jù)指定的類(lèi)型以及指定的 query 查詢(xún)結(jié)果進(jìn)行覆蓋,顯然我們這里選擇最后一項(xiàng) Fields returned by query 更加合理,直接選擇查詢(xún)使用率的 A 這條語(yǔ)句進(jìn)行覆蓋:
然后就可以開(kāi)始針對(duì)查詢(xún) A 的各項(xiàng)屬性進(jìn)行單獨(dú)的配置:
比如我們可以將內(nèi)存使用百分比的圖形樣式修改成 Point 點(diǎn)的形式:
然后還可以圖形的各種樣式,比如 Point 的大小
同樣還可以給圖例的 Y 軸添加上百分比的單位,顯示在圖形右側(cè),這樣看上去就更加清晰了:
最終效果如下所示:
這樣我們就在同一個(gè)圖形當(dāng)中顯示出了不同單位的兩種圖形,而且毫無(wú)違和感吧~
調(diào)整精度
在上面的內(nèi)存信息圖表中我們已經(jīng)可以直接看到總內(nèi)存、使用了多少內(nèi)存等信息了,其實(shí)對(duì)于內(nèi)存的使用率數(shù)據(jù)要求就不是那么高了,我們可以少繪制幾個(gè)使用率的數(shù)據(jù)點(diǎn),可以提高 Grafana 的性能。
這里就需要對(duì)查詢(xún) A 的 Min Step 和 Resolution 選項(xiàng)進(jìn)行配置:
當(dāng)查詢(xún)到的樣本數(shù)據(jù)量非常大時(shí)可以導(dǎo)致 Grafana 渲染圖標(biāo)時(shí)出現(xiàn)一些性能問(wèn)題,通過(guò) Min Step 可以控制 Prometheus 查詢(xún)數(shù)據(jù)時(shí)的最小步長(zhǎng),從而減少?gòu)?Prometheus 返回的數(shù)據(jù)量。Resolution 選項(xiàng)則可以控制 Grafana 自身渲染的數(shù)據(jù)量。例如,如果 Resolution 的值為 1/10,Grafana 會(huì)將 Prometeus 返回的 10 個(gè)樣本數(shù)據(jù)合并成一個(gè)點(diǎn)。因此 Resolution 越小可視化的精確性越高,反之,可視化的精度越低。比如我們這里設(shè)置最小步長(zhǎng)為 5m,分辨率為 1/10,最終的圖形樣式如下所示: