prometheus 实践

常用场景

增长率

increase( counter类型的范围向量)

计算范围向量中时间序列的增加量
算法:第一个样本 - 最后一个样本

rate( counter类型的范围向量)

计算范围向量中时间序列的每秒平均增长率
算法:(第一个样本 - 最后一个样本)/ 时间(秒)

源数据粗粒度,用rate按秒计算会有很多空值,形成断点、断链
rate比increase适合 源数据细粒度的情况

长尾效应:使用了平均值,很容易把峰值削平。体现不出访问量激增的情况
不够灵敏,适合做分期长期趋势或告警规则

  • 使用建议
    建议将 rate 计算的范围向量的时间至少设为抓取间隔的四倍。这将确保即使抓取速度缓慢,且发生了一次抓取故障,您也始终可以使用两个样本。此类问题在实践中经常出现,因此保持这种弹性非常重要。例如,对于 1 分钟的抓取间隔,您可以使用 4 分钟的 rate 计算,但是通常将其四舍五入为 5 分钟。

irate(范围向量)

计算范围向量中时间序列每秒的瞬时增长率
算法:取最后两个数据,算差值

最多可向后查询 5分钟:
灵敏,适合短期

预测

predict_linear 增长预测

常见问题

长尾问题

  1. 平均值显示不出瞬时变化

  2. 要体现瞬时变化对采样频率有要求

Counter重置(跳变)问题

Counter重置为0 。会这些重置解释成负rate

跳变问题是计算时解决,不是落库时解决:Counter 的数据有下降之后自动处理

  • rate 会自动处理 counter 重置的问题,
    counter 一般都是一直变大的,例如一个 exporter 启动,然后崩溃了。
    本来以每秒大约 10 的速率递增,但仅运行了半个小时,则速率(x_total [1h])将返回大约每秒 5 的结果。
    另外,counter 的任何减少也会被视为 counter 重置。例如,如果时间序列的值为[5,10,4,6],则将其视为[5,10,14,16]。
    在这里插入图片描述

数据外推(拟合)

  • 问题:
    对于只有整数增量的counter,increase() 也可能返回非整数结果,如2.5883

  • 原因:
    rate()和increase()函数的推算行为

  • 数据外推
    时间窗口中的第一个和最后一个样本,永远不会与规定时间窗口的开始和结束100%重合。
    因此 increase() 、rate()会在窗口与窗口的界限中外推第一个和最后一个数据点之间的斜率
    得出一个平均而言更接近整个窗口内预期增长的数值(如果在窗口边界确实有样本)。
    推测一个虚拟值 拿来计算
    在这里插入图片描述

  • 外推源码 extrapolatedRate
    https://github.com/prometheus/prometheus/blob/main/promql/functions.go#L66

irate()只看两个样本间每秒的增长,所以它不做这种外推。

猜你喜欢

转载自blog.csdn.net/xyc1211/article/details/129799569