基於Grafana+SimpleJson的靈活報表解決方案

        在時序分析及監控展示領域,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:微信

  1. /:返回200,用於SimpleJson數據源測試連通性;
  2. /search:返回全部可選的指標;
  3. /query:返回對應指標的時間序列點;
  4. /annotations:返回註解。

2、報表引擎架構

一個報表對應一個查詢SQL,這些查詢SQL要事先定義好,並存儲在數據庫中,對Grafana只暴露報表名稱。測試

當在Grafana中選擇了指定的報表名稱後,會發起一個WebAPI請求,報表引擎負責解析該請求,經過報表名稱得到對應的查詢SQL,進行SQL安全性校驗,若是校驗經過,則根據報表關聯的數據源,到指定數據庫中執行該查詢SQL,並將返回結果組裝成DataTable,而後構造SimpleJson所需的數據格式。大數據

3、查詢SQL契約ui

由於Grafana用於展示時序數據,因此返回的數據中,必須有一列是Time列,所以咱們對查詢SQL作了約定:雲計算

若是Grafana中以表格形式展示數據時,查詢SQL能夠是多列,必須有一列是時間列。

 

若是Grafana中以數字、折線圖、柱狀圖、餅圖等展示數據時:

  1. 查詢SQL最多返回兩列;
  2. 查詢SQL只返回一列時,必須是數字列,報表引擎自動補上時間列爲當前時間,適用於在Grafana中只展現數字的狀況;

 

  3.查詢SQL返回兩列時

a)      若含有時間列,則第一列是時間列(帶有「Time」字樣),第二列是數字列,適用於在Grafana中展示折線圖、柱狀圖等狀況;

 

 b)     若不含時間列,則第一列是名稱,第二列是數字列,報表引擎自動根據名稱進行分組,並補上時間列爲當前時間,適用於在Grafana中展示餅圖的狀況。

 

        當要在一個圖中展示多條時序數據時,能夠將多個查詢SQL組合到一塊兒返回,也就是報表組的功能,所以一個報表能夠單獨展示,也能夠和其餘報表組成一個報表組一塊兒展示。

        綜上所述,基於SimpleJson數據源,只要按照SQL查詢契約書寫SQL,就能將SQLServer中的數據靈活展示在Grafana中,同時還要考慮報表權限、SQL安全校驗、定時執行報表、報表緩存等,再也不贅述。固然SimpleJson只是一個數據源協議載體,理論上能夠對接任何類型的後臺數據,只要組裝成它支持的格式便可。

4、特來電雲計算與大數據微信公衆號

 1.微信公衆號名稱:特來電雲計算與大數據

 2.二維碼:

 

相關文章
相關標籤/搜索