後端程序員也可以用 Grafana 做出漂亮可視化界面!

前言

Grafana 有着非常漂亮的圖表和佈局展示,功能齊全的度量儀表盤 dashboard 和圖形編輯器。此篇文章主要來記錄學習 如何使用 mysql 打造屬於我們的可視化監控儀表盤。

安裝 grafna

採用如下命令直接安裝 grafna。或是下載. tar.gz 包自行安裝。

sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt-get update
sudo apt-get install grafana

在一個 Dashboard 中一個最基本的可視化單元爲一個 Panel(面板)。

每一個 Panel 可以配置自己查詢的數據源以及數據查詢方式。當然這裏我們使用 Mysql 作爲數據源,其查詢方式就是 Sql 語句。

擴展一下思路:由於每個 Panel 是完全獨立的,因此在一個 Dashboard 中,往往可能會包含來自多個 Data Source 的數據。也就是說 A panel 你可以從 mysql 中查詢數據,B panel 你可以從 es 中查詢,很靈活的自由組合。

grafna 啓動相關命令

查看grafna狀態
sudo systemctl status grafana-server

重啓grafna
service grafana-server restart

配置 grafna 等操作,可以參看官方文檔:

https://grafana.com/docs/grafana/latest/installation/configuration/

運行一個官網的案例

Grafana 還專門爲 Dashboard 提供分享服務,你也可以把自己做得漂亮的界面上傳上去供大家參考交流,傳送門是:

https://grafana.com/dashboards

在這裏,我使用的是 Id 爲 7991 的監控面板。

添加 mysql 數據源

首先,從左側的菜單欄配置項中選中數據源。

grafna 支持的數據源比較多,這裏我們手動搜索一下 mysql。

選中之後,填寫完具體的數據庫地址和密碼後,保存即可。

導入面板

解決報錯

導入面板後後提示 Templating init failed Error 1146: Table 'my2.status' doesn't exist 錯誤,這是因爲我們還有一個工作沒做完,監控 mysql 時需要在 mysql server 運行的機器上安裝 my2.status 表,根據官網面板的說明,找到 github 倉庫地址:

https://github.com/meob/my2Collector

在數據庫中執行 my2.sql 就能成果導入了,效果如下:

從說明我們可以看到, My2Collector (my2) 是一個簡單的、自我包含的 MySQL 統計信息收集器,my2 每 10 分鐘自動執行一次存儲程序來收集 Mysql 的一些性能數據。

版本支持

my2 可以連接到任何版本的 MySQL,MariaDB,Percona 或其他 fork,但是... 對於舊的 MySQL,發佈的許多統計信息均不可用。

my2 使用的計劃作業自 MySQL 5.1(2008)起可用。

PROCESSLIST 表從 5.1.7 開始可用。

而 GLOBAL_STATUS 從 5.1.12 開始可用。

PERFORMANCE_SCHEMA 在 5.5 版本中引入,在 5.6 版本中得到了極大的增強。

不同的 MySQL 版本之間有很多細微的差別:My2 意識到並做了兼容,嘗試收集所有可用信息,對於 MySQL 8.0,提供了一個不同的腳本,my2 在啓用了性能模式的 MySQL 5.7,MySQL 8.0 和 MariaDB 10.x 中發揮了最大作用。

實戰,基於 Mysql 業務表來創建監控

最簡單的列表展示

在 面板中選擇 table 類型的 panel。

編寫查詢的 sql 語句,可以使用具體的別名。

多個折線圖

特別注意時間序列:

返回列名中需要有 time 或 time_sec 的列,作爲 unix 時間戳或任何 sql 原生日期。

特別注意,這裏的時間轉換函數:用法

- $__time(column) -> UNIX_TIMESTAMP(column) as time_sec
- $__timeEpoch(column) -> UNIX_TIMESTAMP(column) as time_sec
- $__timeFilter(column) -> column BETWEEN FROM_UNIXTIME(1492750877) AND FROM_UNIXTIME(1492750877)
- $__unixEpochFilter(column) ->  time_unix_epoch > 1492750877 AND time_unix_epoch < 1492750877
- $__unixEpochNanoFilter(column) ->  column >= 1494410783152415214 AND column <= 1494497183142514872

- $__timeGroup(column,'5m'[, fillvalue]) -> cast(cast(UNIX_TIMESTAMP(column)/(300) as signed)*300 as signed)
     by setting fillvalue grafana will fill in missing values according to the interval
     fillvalue can be either a literal value, NULL or previous; previous will fill in the previous seen value or NULL if none has been seen yet
- $__timeGroupAlias(column,'5m') -> cast(cast(UNIX_TIMESTAMP(column)/(300) as signed)*300 as signed) AS "time"
- $__unixEpochGroup(column,'5m') -> column DIV 300 * 300
- $__unixEpochGroupAlias(column,'5m') -> column DIV 300 * 300 AS "time"

由上面的規則可知,如果數據裏面的數據類型是 bigint。那麼時間篩選就需要使用:

$__unixEpochFilter(data_time/1000)

柱狀圖

只需要在折線圖的配置基礎上,將 model 改爲 Bars 即可展示柱狀圖。

Graph 裏面的選項有:General(常規選擇)、Metrics(指標)、Axes(座標軸)、Legend(圖例)、 Display(顯示樣式)、Alert(告警)、Time range(時間範圍)

Grafana 是一款採用 go 語言編寫的開源應用,主要用於大規模指標數據的可視化展現,是網絡架構和應用分析中最流行的時序數據展示工具,目前已經支持絕大部分常用的時序數據庫。

希望這篇文章能給你帶來幫助。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/9aEKB0pgcHjfRftIgpFjRQ