在Docker Grafana 8.1.5中工作。使用时间序列图,我正在绘制Prometheus
Counter
源(具有一个label
)作为time series
(按标签),并且需要将所有空/缺失值填充为零.
这是应用于Prometheus
counter
源的查询,绘制标签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