来自普罗米修斯源的时间序列:如何将null设置为零?



在Docker Grafana 8.1.5中工作。使用时间序列图,我正在绘制PrometheusCounter源(具有一个label)作为time series(按标签),并且需要将所有空/缺失值填充为零.

这是应用于Prometheuscounter源的查询,绘制标签code:

my_metric{code!=""}

图形显示工作(只需要看到每个标签变体的当前计数器值,以及所选时间范围内的差异),但是新的Grafanatime series graph缺少Graph (old)Display > Stacking and null value > null value: null as zero下的选项,因此当null值出现时,它现在以折线结束。

不幸的是,我不能使用Graph (old)图表,因为我需要图例值difference,这只在新的time series图表中可用。

我试图将or on() vector(0)添加到查询的末尾,但该条件不适用于每个标签变体的数据系列,而是添加了一个新的数据系列,全部用零填充…

谢谢你的建议!

我也有这个问题,我不能只使用or on() vector(0),因为你提到的主要查询是返回NaN。在我的例子中,我有一个除以0的除法

我可以通过首先评估查询是否有一个值>= 0,然后使用or on() vector(0)来绕过它。试试类似的命令:

((my_metric{code!=""}) >= 0) OR on() vector(0)

可以使用以下技术来填充查询q返回的单个时间序列中的空白:

sum(q) or vector(0)

q包装到sum()中,去掉从q返回的时间序列的所有标签,按照or算子的匹配规则与vector(0)时间序列进行匹配。没有sum():q or on() vector(0)的查询将返回图上的两个时间序列,而不是单个时间序列:一个来自q的时间序列具有自己的一组标签,另一个时间序列具有零标签和零值,其中q时间序列包含空白。

不幸的是,如果q返回多个具有不同标签集的时间序列,Prometheus不提供用零填充空白的简单功能。其他类似普罗米修斯的解决方案,如VictoriaMetrics(我在研究它),为这种情况提供了default运算符。例如,下面的MetricsQL查询用零填充从q返回的所有时间序列的空白:

q default 0

最新更新