在時序分析及監控展示領域,Grafana無疑是開源解決方案中的翹楚,其靈活的插件機制,支持各類漂亮的面板、豐富的數據源以及強大的應用。典型的面板有Graph、Text、Singlestat、PieChart、Table、Histogram等,支持的數據源有ES、Graphite、InfluxDB、OpenTSDB、MySQL、Druid 、Prometheus、SimpleJson等,提供的應用有Zabbix、K8s等。數據庫
因爲公司某些業務用到了SQLServer數據庫,所以須要將SQLServer中的統計數據展示在Grafana中,但美中不足的是Grafana官方至今沒有提供對SQLServer數據源的支持,如何將SQLServer中的數據靈活展示在Grafana中,是一個擺在咱們面前的痛點問題。後端
通過研究Grafana支持的數據源,咱們使用SimpleJson數據源,搭建WebAPI站點,構建報表解析引擎,經過編寫契約式的SQL語句,能夠將SQLServer中的數據靈活展示在Grafana中,很好的解決了這個痛點問題,總體架構以下所示:緩存
1、WebAPI安全
若是要支持SimpleJson,後端WebAPI須要實現4個URL:微信
2、報表引擎架構
一個報表對應一個查詢SQL,這些查詢SQL要事先定義好,並存儲在數據庫中,對Grafana只暴露報表名稱。測試
當在Grafana中選擇了指定的報表名稱後,會發起一個WebAPI請求,報表引擎負責解析該請求,經過報表名稱得到對應的查詢SQL,進行SQL安全性校驗,若是校驗經過,則根據報表關聯的數據源,到指定數據庫中執行該查詢SQL,並將返回結果組裝成DataTable,而後構造SimpleJson所需的數據格式。大數據
3、查詢SQL契約ui
由於Grafana用於展示時序數據,因此返回的數據中,必須有一列是Time列,所以咱們對查詢SQL作了約定:雲計算
若是Grafana中以表格形式展示數據時,查詢SQL能夠是多列,必須有一列是時間列。
若是Grafana中以數字、折線圖、柱狀圖、餅圖等展示數據時:
3.查詢SQL返回兩列時
a) 若含有時間列,則第一列是時間列(帶有「Time」字樣),第二列是數字列,適用於在Grafana中展示折線圖、柱狀圖等狀況;
b) 若不含時間列,則第一列是名稱,第二列是數字列,報表引擎自動根據名稱進行分組,並補上時間列爲當前時間,適用於在Grafana中展示餅圖的狀況。
當要在一個圖中展示多條時序數據時,能夠將多個查詢SQL組合到一塊兒返回,也就是報表組的功能,所以一個報表能夠單獨展示,也能夠和其餘報表組成一個報表組一塊兒展示。
綜上所述,基於SimpleJson數據源,只要按照SQL查詢契約書寫SQL,就能將SQLServer中的數據靈活展示在Grafana中,同時還要考慮報表權限、SQL安全校驗、定時執行報表、報表緩存等,再也不贅述。固然SimpleJson只是一個數據源協議載體,理論上能夠對接任何類型的後臺數據,只要組裝成它支持的格式便可。
4、特來電雲計算與大數據微信公衆號
1.微信公衆號名稱:特來電雲計算與大數據
2.二維碼: