Grafana 设置同比、环比报表

您所在的位置:网站首页 同比对比图表怎么看 Grafana 设置同比、环比报表

Grafana 设置同比、环比报表

2024-07-01 18:49| 来源: 网络整理| 查看: 265

一、定义 1、环比

相邻时间段的数据对比,如4点和3点数据对比。

2、同比

相邻时段中某一相同时间点进行比较。如今年的2月份销售数据,与去年的2月份销售数据对比。

二、Grafana 数据源

所谓报表,就需要有数据,数据从哪里来? 就是我们需要设置Grafana 数据源。

Grafana 数据源 支持多种。如:prometheus,ES,Clickhouse,MySQL等很多种。 本文主要讲解以MySQL作为数据源。

1、设置数据源 image.png

如上,在Configuration 中,找到 Data sources,新增一个“ add data sources” 选择一个数据源类型,我们选择 MySQL,进入配置项。 根据提示,配置MySQL的地址、端口,用户密码登。(你的报表数据已提前生成在MySQL里)。 配置完成后,“save & test”,如果配置正确,数据库链接正常,则测试通过。

2、环比报表

环比,根据前面的定义,相邻时间段的数据对比,换句话实际就是每个时间段的连续的曲线变化,通常情况下一个实体就是一条曲线。

新建一个报表Panel,选择数据源为之前设置的数据源,“MySQL-dba”,编写SQL:

image.png SELECT unix_timestamp(pt) AS "time", domain AS metric, avg(total) AS "total" FROM tbname WHERE $__timeFilter(pt) and domain='xxx公司' GROUP BY 1,2 其中: $__timeFilter(pt) ,是数据查询范围,根据右上角选择的时间范围,自动变化。 unix_timestamp(pt) AS "time", 是时间轴,这是曲线图必须要有的Time series。如果在MySQL中,字段类型不是timestamp 格式,还需要使用unix_timestamp进行转换。 domain AS metric, 为“xxx 曲线”,本例中这条曲线就是xxx公司,如果多个公司,则显示为多条曲线。 avg(total) AS "total",聚合字段,根据需要选择聚合函数。 3、同比报表

根据定义,相邻时段中某一相同时间点进行比较。在时间轴上同一个时间点要进行对比,那么最少得有2条曲线,也就是至少需要2个SQL来完成。

SQL1 - 本期数据:

同环比的sql一致,如下

SELECT unix_timestamp(pt) AS "time", avg(total) AS "本期销售 total" FROM tbname WHERE $__timeFilter(pt) and domain='xxx公司' GROUP BY 1,2 同理, $__timeFilter(pt) 限制了该同比图表显示数据的范围。 SQL2 - 上期数据(N天前):

这个N 可以为自定义变量,在报表的右上角,选择 dashboard settings, 找到变量设置variables下,新增一个变量。其中Type选择常量类型。

image.png

设置以后,回到报表页面,可以看到该变量下拉选择框。

image.png

编辑报表,增加一个Query。 由于SQL1已经限制了显示数据的时间范围,那么,对于这个上期数据的对比曲线,是否还需要增加时间范围的限制呢?

答案是不需要的。因为SQL2要显示的数据范围是固定的,就是N天前的数据, 所以:

SELECT unix_timestamp(pt) AS "time", avg(total) AS "上期销售total($days 天前)" FROM tbname WHERE domain='xxx公司' GROUP BY 1,2

那么这个sql 对不对?看看曲线,会发现两条曲线重合为一条曲线了,因为显示的数据是一样的。

image.png

再回想下,我们需要的是什么? 我们需要的是,比如时间轴的12点上,显示2个点数据,一个是本期数据,已经有了,另一个是上期数据,就是N天前的数据,那如何把N天前的12点这个数据显示在时间轴的今天的12点上呢?

我们需要对这个SQL2进行改造,把N天前的数据往后推迟,也就是时间加N天,如下:

SELECT unix_timestamp(DATE_ADD(pt, INTERVAL $days day)) AS "time", sum(total) AS "上期销售total($days 天前)" FROM wifi_nginx_tj_hour WHERE domain='xxx公司' GROUP BY 1 在Select 时候,把数据的日期强制增加N 天,DATE_ADD(pt, INTERVAL $days day) $days 就是我们前面定义的变量。

再来看看曲线,会出现2条曲线,只是本期数据和N天前数据比较接近。

image.png

好了,这就是Grafana如何从MySQL,显示环比,同比的曲线方法。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3