一樣是後端程序員,你掌握如何用Grafna作出漂亮的可視化界面了嗎?

前言

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

安裝grafna

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

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(面板)。git

每個Panel能夠配置本身查詢的數據源以及數據查詢方式。固然這裏咱們使用Mysql做爲數據源,其查詢方式就是Sql語句。github

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

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的監控面板。函數

file

添加mysql數據源

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

file

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

file

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

導入面板

解決報錯

file

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

https://github.com/meob/my2Collector複製代碼

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

file

從說明咱們能夠看到,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。file

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

多個折線圖

file

特別注意時間序列:

返回列名中須要有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便可展現柱狀圖。

file

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

file

file

爲了方便你們學習討論,我建立了一個java疑難攻堅互助你們庭,和其餘傳統的學習交流不一樣。本羣主要致力於解決項目中的疑難問題,在遇到項目難以解決的問題時,均可以在這個你們庭裏尋求幫助。

公衆關號注:俠夢的開發筆記後回覆【問題的答案】進入:java中Integer包裝類的基本數據類型是?若是你也經歷過遇到項目難題,無從下手,他人有可能能夠給你提供一些思路和見解,一百我的就有一百種思路,一樣,若是你也樂於幫助別人,那解決別人遇到的問題,也一樣對你是一種鍛鍊。

歡迎來公衆號【俠夢的開發筆記】,回覆乾貨,領取精選學習視頻一份

相關文章
相關標籤/搜索