来自 Prometheus 源的时间序列:如何将空值设置为零?

问题描述 投票:0回答:3

使用 Docker Grafana 8.1.5。使用时间序列图,我正在绘制一个

Prometheus
Counter
源(有一个
label
)作为
time series
(按标签),并且需要 将所有空/缺失值填充为零

这是应用于

Prometheus
counter
源的查询,绘制标签
code
:

my_metric{code!=""}

图表显示有效(只需查看每个标签变体的当前计数器值,以及所选时间范围内的差异),但新的 Grafana

time series graph
缺少
Graph (old)
Display > Stacking and null value > null value: null as zero
下的选项,因此当出现空值时,它现在会以断线结束。

不幸的是,我无法使用

Graph (old)
图表,因为我需要图例值
difference
,该值仅在新的
time series
图中可用。

我尝试将

or on() vector(0)
添加到查询末尾,但条件不会应用于每个标签变体的数据系列,而是添加一个全部用零填充的新数据系列...

感谢您的任何建议!

counter prometheus grafana
3个回答
18
投票

我也遇到了这个问题,正如您提到的,我无法仅使用

or on() vector(0)
,因为主查询返回
NaN
。就我而言,我除以零。

我可以通过首先评估查询是否有值

>= 0
然后使用
or on() vector(0)
来解决这个问题。尝试类似的事情:

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

10
投票

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

q

sum(q) or vector(0)

q
包装到
sum()
中,是为了删除从
q
返回的时间序列的所有标签,因此可以根据
vector(0)
匹配规则将时间序列与
or
时间序列进行匹配运算符
。没有
sum()
的查询:
q or on() vector(0)
将在图表上返回两个时间序列,而不是单个时间序列:来自
q
的一个时间序列具有自己的一组标签,另一个时间序列具有零标签和零值,其中
q
时间序列包含间隙。

不幸的是,如果

q
返回具有不同标签集的多个时间序列,Prometheus 无法轻松地用零填充空白。其他类似 Prometheus 的解决方案,例如 VictoriaMetrics(我正在研究它)为这种情况提供了
default
运算符。例如,以下 MetricsQL 查询将从
q
返回的所有时间序列用零填充空白:

q default 0

0
投票

my_metric{code!=""} 或按 (your_label0,your_label1) (other_your_metric) 进行分组 < bool 0

© www.soinside.com 2019 - 2024. All rights reserved.