Grafana用mysql數據源展示圖表實踐

微信公衆號:Java流水賬
本號記錄國服安琪拉日常編程流水帳,歡迎後臺留言

背景

公司風險部門的同學平常都是在impala中查看T+1的業務數據,希望技術部門提供一個看板,能夠實時查看當前各個業務線的調用外部數據的情況,所以有了這篇文章,grafana平常用influxdb、kairosDB作爲數據源比較多,現在記錄一下用mysql作爲數據源的實踐。

第一步:配置數據源

Grafana的安裝網上教程很多,大家如果公司沒有可以測試環境自己搭一個,有的申請一個賬號,我們直接開始安裝後的數據源配置,步驟如下:
配置圖
如上圖所示:

  • 配置中選擇Data Sources;
  • 設置數據的名稱,數據源類型選擇MySQL;
  • 填寫MySQL的主機、用戶名密碼,保存&測試。

第二步:配置圖標

  1. 先看配置完成之後的效果圖
    效果圖
    在這裏插入圖片描述
    如上圖所示,我做了實時的調用量、調用成功率、調用時效、流程時間分佈、按照業務線區分調用量、調用失敗原因分佈等。

說明一下,我所有的圖表都基於一張日誌表,因爲都是線上真實數據,就只貼出表結構,數據不貼出來了,表結構如下:

CREATE TABLE `credit_log` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `appid` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '應用id',
  `userid` bigint(20) NOT NULL COMMENT '用戶id',
  `batchno` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '批次號',
  `options` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '機構類型',
  `request` text COLLATE utf8mb4_unicode_ci COMMENT '請求報文',
  `task` text COLLATE utf8mb4_unicode_ci COMMENT '任務',
  `redistopic` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'redis隊列topic',
  `status` int(11) NOT NULL DEFAULT '-1' COMMENT '0:成功 1:用戶信息不全 2:異常 3:簽章異常 4:上傳異常 5**結果異常 9:不在有效時間/重複查徵',
  `errcode` int(11) DEFAULT NULL COMMENT '錯誤碼',
  `message` varchar(2048) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '詳細說明',
  `inserttime` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '添加時間',
  `updatetime` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新時間',
  `isactive` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否有效',
  `retrytime` int(11) DEFAULT '0' COMMENT '重試次數',
  `idnumber` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '身份證號碼',
  `queststatus` int(11) NOT NULL DEFAULT '-1' COMMENT '請求狀態 0:成功 1:失敗 2:異常',
  `uploadstatus` int(11) NOT NULL DEFAULT '-1' COMMENT '上傳狀態 0:成功 1:失敗 2:異常',
  `querystatus` int(11) NOT NULL DEFAULT '-1' COMMENT '查詢狀態 0:成功 1:失敗 2:異常',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_batchno` (`batchno`),
  KEY `idx_userid` (`userid`) USING BTREE,
  KEY `idx_inserttime` (`inserttime`) USING BTREE,
  KEY `idx_updatetime` (`updatetime`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='日誌表';
  1. 配置示例
    下面會把典型的場景和圖表配置信息貼出來。
    2.1 調用量爲例,配置如下:
    在這裏插入圖片描述
    如上圖所示,最重要的配置在metrics裏面,選擇數據源,然後寫sql,簡化後的sql如下:
select $__timeGroup(inserttime, '10m') as time_sec, 
      count(1) as call_num, 
      sum(status=0) as success_num
from credit_log where $__timeFilter(inserttime)
group by time_sec

注意二個點:

  1. $__timeGroup是聚合函數,這裏是以10分鐘一組,group by求和;
  2. $__timeFilter(inserttime)是時間區間函數,右上角時間選擇篩選的是inserttime
    下面這張圖展示了Metrics(指標)的另外三個值得關注的地方:
    在這裏插入圖片描述
    另外還有幾個配置的點:
    General(常規選擇)、Metrics(指標)、Axes(座標軸)、Legend(圖例)、 Display(顯示樣式)、Alert(告警)、Time range(時間範圍)。
    重點說Axes和Display:
    在這裏插入圖片描述
    上面是調用量方面的,大家可以根據自己的數據表舉一反三。

2.2 時間分佈爲例,sql如下:
通過這張圖可以看到時間分佈情況。在這裏插入圖片描述

第三步:使用變量

我們經常可能圖表需要只看某條業務線的,或者只看指定條件的數據,舉個我這裏的實際業務場景,就是很多業務線會調用我的站點,拉取外部機構的數據,那業務線和外部機構就是二個變量,我可以在grafana中提前定義好,先看效果圖(以表格爲例):
在這裏插入圖片描述
在左上角可以切換機構和業務線,切換之後下面的圖表相應的自動更改爲你指定的機構和業務線。(如果像上圖右側紅框,帶Legend,也可以通過點擊指定的圖例顯示指定業務線的圖表)
我把詳細sql也貼出來:

SELECT date_format(inserttime, '%Y-%m-%d') as '日期', options, count(1) as '調用量',
sum(case when queststatus=0 then 1 else 0 end) as '發起成功量', sum(case when status=0 then 1 else 0 end) as '寫數成功量', 
cast(100 * sum(status=0) *1.0/count(1) as DECIMAL(5,2)) as '成功率' from credit_log where 
$__timeFilter(inserttime) and options in ('$options') group by 1,2 order by 1 asc

上面sql中 $options 就是提前創建的變量。

如何創建變量呢?
入口在Dashboard右上角的設置圖標這裏
在這裏插入圖片描述
👇就是我定義的機構和業務線的變量
在這裏插入圖片描述
以業務線爲例,
在這裏插入圖片描述
這裏設置好變量之後,在圖表sql中就可以使用 $appid 作爲變量放在sql中作爲篩選條件,可以看上面的SQL。

結束語

這個只是Grafana用Mysql做業務實時數據分析的一點非常小的應用,還有很多其他數據源可以用,例如ElasticSearch、InfluxDB、Zabbix、Prometheus等數據源。
如果大家感興趣,後面可以分享我使用influxdb + kafka + flink做日誌監控的工程實踐。

----------------------------國服安琪拉------------------------------------

這裏沒有敷衍的複製粘貼,博眼球的面試資料分享,有的只是儘可能清晰的講清個人開發中遇到的一個個問題和總結。歡迎大家關注Java流水賬,純粹的個人技術公衆號。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章