前言
在使用夜莺监控中记录规则时发现有些告警没发出来,参考了大佬文章-夜莺告警流程讲解及常见问题排查思路进行排查。过程中使用到了即时查询的Graph视图看看指标值情况发现数据绘图是单个点,根据文档了解到绘图有个重要的step参数(在没有手动设置时根据选择时间区间会自动计算),会导致看图上结果和实际数据不一致情况,而step参数具体生成根据实际数据生成绘图数据的逻辑还是需要再探寻一下。
两个观点
这方面的问题又很多人解释过,我期待能先从他们的文章中获得相关知识。
-
观点1. 在每个step周期都要返回一个采样值,如果不存在数据回有回溯行为,返回回溯区间第一个遇到的采样值,回溯区间为tsdb的配置项,例如promql.LookbackDelta或者search.maxLookback (prometheus中step或resolution的含义)
-
观点2. Step参数在prometheus的API中用于range query,作为query参数的promQL语句,支持两种时间序列变量选择器(instant/range vector selector),只有instant vector selector 才能直接用于绘图。
Instant vetcor selector 返回结果和实际数据类似两组和时间线平行的点(原文中图例十分生动),返回结果在每个step两端有两个数据点,来源于实际数据回溯,所以如果实际数据产生间隔大于回溯间隔会产生,多个结果点回溯选用同一个实际数据点的情况。
如果Range vector selector想要支持绘图需要用如rate函数把range vector转换成instant vector,结果数据点是根据实际数据点计算得到的估算值。
Grafana中发起查询step也是动态计算的。
(详解Prometheus range query中的step参数)
结论
总结一下上面两