在时序分析及监控展现领域,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中,很好的解决了这个痛点问题,整体架构如下所示:

一、WebAPI

如果要支持SimpleJson,后端WebAPI需要实现4个URL:

  1. /:返回200,用于SimpleJson数据源测试连通性;
  2. /search:返回所有可选的指标;
  3. /query:返回对应指标的时间序列点;
  4. /annotations:返回注解。

二、报表引擎

一个报表对应一个查询SQL,这些查询SQL要事先定义好,并存储在数据库中,对Grafana只暴露报表名称。

当在Grafana中选择了指定的报表名称后,会发起一个WebAPI请求,报表引擎负责解析该请求,通过报表名称获得对应的查询SQL,进行SQL安全性校验,如果校验通过,则根据报表关联的数据源,到指定数据库中执行该查询SQL,并将返回结果组装成DataTable,然后构造SimpleJson所需的数据格式。

三、查询SQL契约

因为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只是一个数据源协议载体,理论上可以对接任何类型的后台数据,只要组装成它支持的格式即可。

四、特来电云计算与大数据微信公众号

1.微信公众号名称:特来电云计算与大数据

2.二维码:

基于Grafana+SimpleJson的灵活报表解决方案的更多相关文章

  1. 基于Grafana的监控数据钻取功能应用实践

    互联网企业中,随着机器规模以及业务量的爆发式增长,监控数据逐渐成为一种大数据,对监控大数据的分析,包括数据采集.数据缓存.数据聚合分析.数据存储.数据展现等几个阶段.不同阶段有不同的解决方案及支撑工具 ...

  2. #研发解决方案介绍#基于ES的搜索+筛选+排序解决方案

    郑昀 基于胡耀华和王超的设计文档 最后更新于2014/12/3 关键词:ElasticSearch.Lucene.solr.搜索.facet.高可用.可伸缩.mongodb.SearchHub.商品中 ...

  3. 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML(转)

    1.什么是工程化开发 软件工程的工程化开发概念由来已久,但对于前端开发来说,我们没有像VS或者eclipse这样量身打造的IDE,因为在大多数人眼中,前端代码无需编译,因此只要一个浏览器来运行调试就行 ...

  4. paip.基于navicate mysql的自动化报表工具总结

    paip.基于navicate mysql的自动化报表工具总结 需要对信用卡数据分类统计.显示一个饼图... 用EXCEL比较麻烦,一旦数据库变动就要重新导出..使用PHP代码吧,还是比较麻烦,最好是 ...

  5. 基于K2的集成供应链流程解决方案

    基于K2的集成供应链流程解决方案http://www.k2software.cn/zh-hans/scm-solution 一.详细功能模块 需求管理模块多渠道管理.需求计划.需求感知与传递市场营销及 ...

  6. 基于QT的换肤整体解决方案(QSkinStyle)(提供Linux的XP风格)

    基于QT的换肤整体解决方案(QSkinStyle) 对QT这个成功的跨平台GUI库,本身内置了对换肤功能的实现,比如cleanlooks.plastique等跨平台风格:还有一些是和平台相关的风格,比 ...

  7. [项目回顾]基于Redis的在线用户列表解决方案

    迁移:基于Redis的在线用户列表解决方案 前言: 由于项目需求,需要在集群环境下实现在线用户列表的功能,并依靠在线列表实现用户单一登陆(同一账户只能一处登陆)功能: 在单机环境下,在线列表的实现方案 ...

  8. 基于Shader实现的UGUI描边解决方案

    基于Shader实现的UGUI描边解决方案 前言 大扎好,我系狗猥.当大家都以为我鸽了的时候,我又出现了,这也是一种鸽.创业两年失败后归来,今天想给大家分享一个我最近研究出来的好康的,比游戏还刺激,还 ...

  9. 微软BI 之SSRS 系列 - 在 Cube 中通过 MDX 查询实现基于父子递归关系的汇总报表

    之前我写了一篇在 SSRS 开发中处理这种父子关系的汇总与聚合的文章 (SSRS 系列 - 使用分组 Group 属性实现基于父子递归关系的汇总报表),示例中的查询是基于 SQL Server 关系型 ...

随机推荐

  1. 使用Flink时遇到的问题(不断更新中)

    1.启动不起来 查看JobManager日志: WARN org.apache.flink.runtime.webmonitor.JobManagerRetriever - Failed to ret ...

  2. 【python】局部变量和全局变量

  3. iOS开发之Xcode常用调试技巧总结

    转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...

  4. Java Mac电脑配置java环境,JAVA IDE eclipse开发svn使用

    .SELECT TOP 规定返回记录的数目(对于大型数据库很有用的) SELECT TOP number|percent column--name FROM table; 1.2 SELECT LIM ...

  5. VR、AR、MR定义区别

    近日, 获得谷歌5亿美元融资的技术公司Magic Leap在WSJD展会中放出了一段实录视频,引起不小骚动.如今,也有媒体称他们为MR公司,那么VR.AR.MR之间到底有什么区别呢. VR.AR.MR ...

  6. JSP和JavaBean总结

    JSP JSP全名为Java Server Pages,即java服务器页面,其根本是一个简化的Servlet设计.它是在传统的网页HTML文件中插入Java代码,从而形成JSP文件. JSP注释分为 ...

  7. python爬去电影天堂恐怖片+游戏

    1.爬去方式python+selenium 2.工作流程 selenium自动输入,自动爬取,建立文件夹,存入磁力链接到记事本 3.贴上代码 #!/usr/bin/Python# -*- coding ...

  8. type 命令详解

     type  作用: 用来显示指定命令的类型,判断出命令是内部命令还是外部命令. 命令类型: alias: 别名 keyword:关键字, shell 保留字 function:函数, shell函数 ...

  9. virtual box未卸载报"Invalid Drive:F:\"的解决方案

    =============================================== 20170417_第一次修改                       ccb_warlock === ...

  10. 解决Windows和Linux使用npm打包js和css文件不同的问题

    1.问题出现 最近公司上线前端H5页面,使用npm打包,特别奇怪的是每次打包发现css和js文件与Windows下打包不一致(网页使用Windows环境开发),导致前端页面功能不正常. 2.问题排查 ...