我想在Grafana的$__timeFilter中减去额外的时间。例如,如果我选择了“最后7天”,我想运行两个查询进行比较,一个查询提供了过去7天的平均CPU利用率,另一个查询提供了现在的平均CPU利用率()-14 d到现在()-7 d。这是动态的。我可以得到它为6小时,2天,或任何选择。
我的数据库是TimescaleDB和Grafana版本8.3.5
编辑查询是
select avg(cpu) from cpu_utilization where $__timeFilter(timestamp)
无论在Grafana的时间过滤器中选择了什么,查询都会被相应地处理
现在Grafana理解了这个查询,它变成了如下。如果我选择过去24小时
select avg(cpu) from cpu_utilization where timestamp BETWEEN '2022-09-07 05:32:10' and '2022-09-08 05:32:10'
这是正常的行为。现在,我希望如果我选择过去24小时,这个查询的行为,因为它是,但一个额外的查询成为
select avg(cpu) from cpu_utilization where timestamp BETWEEN '2022-09-06 05:32:10' and '2022-09-07 05:32:10'
(我只是不想它的最后24小时,但在过滤器中选择的任何相对时间段)
答案:https://stackoverflow.com/a/73658919/14817486
2条答案
按热度按时间p8ekf7hl1#
您可以使用全局变量
$__to
和$__from
。例如,
${__from:date:seconds}
会给予你一个时间戳,单位为秒。然后,您可以从中减去7天(= 604800秒),并在查询的WHERE子句中使用它。根据您的SQL方言,可能使用TIMESTAMP()
、TO_TIMESTAMP()
或类似的语言。看起来像这样:r8xiu3jd2#
有趣的问题!如果我理解正确的话,您可以使用
timestamp
列作为引用,因为grafana已经在通过此过滤比较查询。所以你可以让min(timestamp)
和max(timestamp)
知道你的周期的限制,然后从它构建一些东西。比如
min(timestamp) - INTERVAL '7 days'
会给予你上一个范围的开始,而max(timestamp) - INTERVAL '7 days'
会提供最终范围。