Grafana是一个功能强大且易用的数据可视化软件,在监控系统中使用越来越广泛。监控系统中常用时序数据库,时序数据库比较适合存储监控采样数据,能够现多维快速查询。但是,在传统关系型数据库中常用的多表join,在时序数据库数据库中实现起来却比较困难。所以Grafana对接时序数据库时,虽然可以设计出各种监控仪表盘,但在仪表上展示统计报表或者从panel导出统计报表并不是一件容易的事情。
Grafana的transformation功能可以帮助我们做出灵活的报表。
Transformation介绍
Transformation可以处理一系列查询结果,比如重命名列(field)名,把不同的时间序列join到一起,对结果做计算等。
对查询结果,可以有多个transformation。Grafana会依次按顺序应用各个transformation来处理结果,就好像pipleline一样。transformation的顺序不同,获得的结果也可能不同。
Transformation位于Panel编辑器的Transformation标签下。点击“Add a transformation”,会出现Transformation类型下拉列表,选择某一类型,即可对结果进行处理。有的transformation会有一些设置选项,对处理过程进行设置。
Grafana支持的transformation列表如下:
所有transformation的介绍和使用方法都可以在Grafana的官方文档中找到。见文末参考资料。
利用transformation实现灵活的报表
Grafana对接的数据源多种多样,为了统一,grafana把查询结果变成统一的数据格式叫数据帧Data frame。Grafana用Data frame替代了原来的时间序列和表结构,用一种更通用的数据结构,支持更多的数据类型。
在Panel editor中,可以将一个Query得到的结果格式化为time series或者table。Transformation可以对time series格式的数据帧进行处理。但是一个查询Query出多个field的话,最好选table格式,因为time series格式会生成多个data frame。所以为了处理更方便,我们最好将查询结果格式化为Table格式。如下图所示。
下面以统计主机的CPU和内存利用率为例,介绍几种transformation的用法和效果。这里用到的数据源为influxdb,数据库中的measurements有cpu_physical_total和mem,分别记录CPU性能数据和内存性能数据。以下操作都在Panel Editor中进行。
多主机报表
通常我们希望同时对多个主机出报表,上面的处理结果没有主机名信息,所以我们修改了一下查询语句,
两个查询,分别是从内存表里查询主机名和计算内存使用率、从cpu表里查询主机名和cpu使用率。如下:
SELECT "host", ("real_total" - "real_free" - "numperm") /"real_total"*100 FROM "memory" WHERE ("host" =~ /^$HOST$/) AND $timeFilter
SELECT "host","user"+"sys"+"wait" FROM "cpu_physical_total" WHERE ("host" =~ /^$HOST$/) AND $timeFilter
查询结果都格式化为table。
然后添加3个transformation,分别是
Outer join:按host列合并。合并成一个表,包含4列,time,host,cpu,mem。
Group by:group by选择host,对cpu和mem域都做calculate。calculation选择min,max,mean。此时表中结果变成每行对应一个host,时间列消失,一共7列,分别是主机名、CPU的最大最小平均值、内存的最大最小平均值。
Orgnize fields:因为列名是自动命名的,可读性较差。通过这个transformation将列名都重命名为中文
最终结果如下图所示。
至此,我们已经通过几个transformation将监控数据时间序列转换成满足我们需求的报表。
报表的导出
处理好的报表可以直接导出为CSV格式。在Panel菜单上选择inspect->data,在Inspect的Data标签下,打开Data options的apply panel transformation开关,再点击右侧的Download csv按钮,就可以将处理好的报表导出为CSV文件了。如下图所示:
结语
本文介绍了通过Grafana的transformation将监控数据转换为报表的一些简单尝试,仅涉猎了几个transformation类型的部分用法,希望抛砖引玉,大家可以在实践中探索更丰富的处理和更灵活的组合来满足各种报表需求。
参考资料
https://grafana.com/docs/grafana/latest/panels/transformations
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论