如何解决Grafana 图形面板根据 prometheus promQL 查询过滤过去的特定时间
我有以下 grafana (v7.5) 图形面板
绿线代表我的普罗米修斯指标 foo
,它看起来像:
sum(foo)
黄色/橙色线代表我的动态阈值,我正在尝试验证其正确性:
avg_over_time((sum(foo and on() hour() == 22 or on() vector(0)) > 0)[2w:10m])
我们的想法是取回两周的数据,只考虑感兴趣的一小时并计算平均值 - 这是阈值,当我考虑 22:00 到 23 时间的图形面板时,它看起来是正确的: 00.
顺便提一句。需要 or on() vector(0)
将不感兴趣的小时的所有数据标记为 0 数据,然后使用 > 0
我忽略它进行平均计算。不过,如果我保持这样,每当时间范围更改为早上的某个时间时,硬编码 22 将根据过去几天错误的晚上时间计算阈值。
所以在 grafana 中,我创建了一个变量 $hour
为 query_result(hour())
,它在时间范围变化时进行评估,因此我的面板查询变为:
avg_over_time((sum(foo and on() hour() == $hour or on() vector(0)) > 0)[2w:10m])
现在每次更改grafana中的监控时间范围时,我的计算时间都会适应时间范围的最后一个小时,但这只是我想要的部分,因为我的阈值线对于面板的最后一个小时是正确的,但在整个面板时间范围内仍然非常直接。例如,当我考虑让我们说早上 08:00 时,我想从两周前的数据中获得阈值计算,仅适用于早上 8 点到 9 点。 换句话说,我希望每小时动态计算单个监控范围的阈值线:
avg_over_time((sum(foo and on() hour() == 0 or on() vector(0)) > 0)[2w:10m])
上面应该绘制0到1之间的图形线
avg_over_time((sum(foo and on() hour() == 1 or on() vector(0)) > 0)[2w:10m])
上面应该绘制1到2之间的图形线
avg_over_time((sum(foo and on() hour() == 2 or on() vector(0)) > 0)[2w:10m])
上面应该绘制2到3之间的图形线,依此类推。
现在显然使用我的 $hour
变量我无法实现这一点,因为该变量仅在每个时间范围重新选择时都是动态的,而不是在单个图形内。我尝试了一些异国情调的东西:
avg_over_time((sum(foo and on() hour() == hour(timestamp(sum(foo)))
or on() vector(0)) > 0)[2w:10m])
我得到了不同的结果,但仍然是直线,不确定这个异国情调的东西是否成功。请指教
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。