对官网文档的解读

irate和rate都会用于计算某个指标在一定时间间隔内的变化速率。但是它们的计算方法有所不同:irate取的是在指定时间范围内的最近两个数据点来算速率,而rate会取指定时间范围内所有数据点,算出一组速率,然后取平均值作为结果。


所以官网文档说:irate适合快速变化的计数器(counter),而rate适合缓慢变化的计数器(counter)。


根据以上算法我们也可以理解,对于快速变化的计数器,如果使用rate,因为使用了平均值,很容易把峰值削平。除非我们把时间间隔设置得足够小,就能够减弱这种效应。


试验

用grafana做了一个试验,创建一个测试的dashboard, 分别用 irate 和 rate 来监控CPU使用率指标,时间间隔分别用10m, 5m, 2m, 1m 。其中间隔为10分钟的表达式如下:


sum(irate(process_cpu_seconds_total[10m])) * 100


sum(rate(process_cpu_seconds_total[10m])) * 100


下图是间隔10分钟的结果,可以看到,irate的曲线比较曲折,而rate的曲线相对平缓: