互联网企业中, 随着机器规模以及业务量的爆发式增长, 监控数据逐渐成为一种大数据, 对监控大数据的分析, 包括数据采集, 数据缓存, 数据聚合分析, 数据存储, 数据展现等几个阶段. 不同阶段有不同的解决方案及支撑工具, 而数据展现作为最终的可视化手段, 在整个监控大数据分析过程中起着举足轻重的作用, 本文分享一下笔者基于 Grafana 的监控数据钻取功能应用实践, 供感兴趣的同行做参考.
Grafana 作为一个开源的数据分析展现平台, 其丰富的图表, 灵活的插件, 多样的数据源, 快速华丽的展现, 总让做监控数据分析的人爱不释手, 叹为观止, 可以说 "无 Grafana, 不监控展现", 关于 Grafana 的详细介绍不再赘述, 本文重点探讨下 Grafana 的钻取功能.
Grafana 虽然可以迅速展现各种监控时序数据, 但当数据量比较大时, 也会出现性能瓶颈, 因此不宜用 Grafana 直接展现收集到的监控原始数据, 而应对监控原始数据做聚合分析, 将分析后的摘要数据存储到时序数据库中, 将监控原始 (详细) 数据存储到 NoSQL 数据库中, Grafana 只展现监控摘要数据, 通过钻取功能, 查看对应的监控详细数据, 从而加速数据展现并对监控数据进行溯源.
在 Grafana 的 General 标签页下内置了两种钻取功能: 通过链接跳转到另一个面板 (Type 为 dashboard) 或者跳转到自定义的钻取界面 (Type 为 absolute), 为了能更精确的控制钻取联查结果, 我们一般采用后者. 其中 Url 即要跳转到的页面的链接, Title 是这个链接的显示名称, Url params 是传递给链接的静态参数, 也可以设置一些动态参数, 比如时间范围(Include time range), 变量(Include variables) 等, 链接默认是在当前窗口打开的, 也可以设置在新的窗口打开(Open in new tab). 钻取设置完毕, 会在对应的 Panel 左上角显示一个向上的钻取箭头, 鼠标移动到钻取箭头上, 会显示前面定义的 Title, 点击该 Title, 就跳转到了自定义的钻取详情页面.
钻取详情页面, 一般先通过列表的方式展现时序数据, 推荐使用 InfluxDB 存储监控时序数据, 查询 InfluxDB 中一段时间范围的时序数据时, 会涉及到分页展现的问题, 通过以下方式可以对 InfluxDB 进行数据库端分页:
1. 查询总条数
SELECT COUNT(某一个 Filed 列) FROM measurement WHERE 时间范围
2. 查询指定页指定条数
假设前台传过来的页数字段是 page, 每页条数字段是 rows, 那么查询指定页指定条数可以这样写:
SELECT time,Field 列 FROM measurement WHERE 时间范围 LIMIT rows OFFSET (page - 1)*rows
通过列表展现时序数据后, 可以继续钻取联查存储在 HBase 或 ES 中监控详细数据, 从而实现通过 Grafana 快速展现摘要数据, 逐步穿透钻取联查详细数据的效果.
来源: https://www.cnblogs.com/liugh/p/10629754.html