Prometheus - 计算“现在”和“30 分钟前”之间“设备流量速率”的差异

问题描述 投票:0回答:1

我正在升级交换机/路由器固件,我想确保此升级不会中断通过交换机的流量。因此,我想要获取流量率-PRE-upgrade 和流量率-POST-upgrade 并比较这两个值。 例如:如果升级前有 100Mpps 流量,升级后只有 0.5Mpps 流量,我会将其标记为升级引起的潜在问题,值得调查。

我的方法是从traffic-rate-PRE-upgrade中减去traffic-rate-POST-upgrade,假设偏移30m表示30分钟前的流量速率。

sum(rate(ifHCInUcastPkts{device="switchX"}[2m])) - sum(rate(ifHCInUcastPkts{device="switchX"}[2m] offset 30m))

选项2:我也想看看是否可以使用 delta() 但这似乎不适用于这种情况。例如,做这样的事情会很好:

delta(sum(rate(ifHCInUcastPkts{device="switchX"}[2m]))[30m])

无论如何这都不起作用。

无论如何,正在寻求获取此数据的最佳方法的帮助。选项1给了我一些东西,但不确定我是否真的得到了我想要的东西。这真的能告诉我现在的流量与 30 分钟前的流量吗?

谢谢。

prometheus grafana monitoring snmp
1个回答
0
投票

这真的能告诉我现在的流量与 30 分钟前的流量吗?

是的,确实如此。它似乎给出了您所描述的预期结果。尽管可能有人会说这不是最好的结果。

根据 Prometheus 的

scrape_interval
以及网络情况,考虑使用
increase(..[3m])
代替
rate
可能是明智之举。因为
rate
是每秒的近似值,并且可能会受到计数器值突然变化的影响,其中较长范围内的
increase
将使山峰和峡谷变得平滑。


关于你的第二次尝试:我相信你应该得到一个错误

ranges only allowed for vector selectors

这是由于传递给

delta
的选择器不正确:因为它不是简单的向量选择器,所以需要使用子查询语法。在这种情况下,只需将
:
添加到第二个范围选择器就足够了。

delta(sum(rate(ifHCInUcastPkts{device="switchX"}[2m]))[30m:])

否则,预计会产生与第一个查询相同的结果(加上/减去微小的近似误差)

© www.soinside.com 2019 - 2024. All rights reserved.