一、简介
grafana官方提供的Oracle、MongoDB插件都需要付费使用。
在需求促使下,我发现了一个官方提供的可以白嫖的simpod-json-datasource。
JSON plugin for Grafana | Grafana Labs
这款插件允许自定义数据源,我们只需要提供接口,并按数据库数据按规定格式响应,即可将数据传给grafana。
二、实现
1、下载grafana
官网网址:
Download Grafana | Grafana Labs
国内镜像:
2、安装插件
下载zip后解压
在bin目录下cmd
运行
grafana-cli plugins install simpod-json-datasource
3、运行grafana
双击grafana-server.exe
没有报错一般就是成功
从网页进入grafana,端口默认是3000,用户名密码默认admin/admin
4、运行接口实现项目
从本文中下载我写的Springboot项目(如果下载积分涨了,有需求的可以私信我)
修改数据库连接信息
简单说明接口,第三个接口暂时没用上,有兴趣的可以再研究研究插件
JSON plugin for Grafana | Grafana Labs
启动Springboot项目(不过多介绍)
5、创建DataSource
URL是Springboot项目的控制器请求地址,配置下面几项后,点击save & test
保存成功,oracle同理
6、使用dashboard
创建
6.1先说明相对简单的oracle
在这里输入sql
不同的图表对sql有不同的要求,以time series为例,第一个字段应该是y轴的数字值,第二个字段需要是时间值,数据线别名则需要另穿一个metric字段
$__to和$__from变量是grafana的自带的全局变量,指开始时间和结束时间,由于会传一个时间戳,所以sql语句里需要转换为日期类型
6.2MongoDb
mongodb界面和oracle一样。
暂时只支持aggregate查询,这里要注意$_from和$_to和上面oracle的不一样。oracle的$__from和$__to有两个“_”符号,是官方自带的变了。而Mongo的$_from和$_to只有一个“_”,这是因为mongodb的解析起来比较特殊,$_from是我代码里定义的解析变量,有兴趣的可以看看我的潦草代码。
db.coll1.aggregate([
{
"$match": {
"create_time": {
"$gte": "$_from",
"$lt": "$_to"
}
}
},
{
"$project": {
"_id": 0,
"value": { "$toDouble": "$count" },
"time": "$create_time",
"metric": "游戏去试次数"
}
}
], { "allowDiskUse": true })
7、查看报错
报错信息暂时只能在控制台或者Query inspector中查看
8、结语
这套方案的扩展性很好,后续可以加入其他grafana付费数据源。但Springboot项目里有很多局限性没有解决,比如报错信息查看不方便,mongodb查询语句复杂,代码缺少注释等等,同道可自行优化。