我正在升级交换机/路由器固件,我想确保此升级不会中断通过交换机的流量。因此,我想要获取流量率-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 分钟前的流量吗?
谢谢。
这真的能告诉我现在的流量与 30 分钟前的流量吗?
是的,确实如此。它似乎给出了您所描述的预期结果。尽管可能有人会说这不是最好的结果。
根据 Prometheus 的
scrape_interval
以及网络情况,考虑使用 increase(..[3m])
代替 rate
可能是明智之举。因为 rate
是每秒的近似值,并且可能会受到计数器值突然变化的影响,其中较长范围内的 increase
将使山峰和峡谷变得平滑。
关于你的第二次尝试:我相信你应该得到一个错误
ranges only allowed for vector selectors
。
这是由于传递给
delta
的选择器不正确:因为它不是简单的向量选择器,所以需要使用子查询语法。在这种情况下,只需将 :
添加到第二个范围选择器就足够了。
delta(sum(rate(ifHCInUcastPkts{device="switchX"}[2m]))[30m:])
否则,预计会产生与第一个查询相同的结果(加上/减去微小的近似误差)