Prometheus多时间序列缺失值填充方案咨询
解决Prometheus多时间序列指标缺失值填充0的问题
你用pinot_server_llcPartitionConsuming_Value{} OR vector(0)达不到预期的原因很明确:vector(0)是一条无任何标签的时间序列,和原指标里带标签的多条序列无法匹配,所以Prometheus只会在原有序列之外额外生成一条全局的0序列,根本做不到给每个缺失的标签维度填充0。
不用记录规则的话,你可以通过先构造和原指标标签维度完全一致的0值序列,再和原指标做OR匹配实现需求,具体查询语句如下:
pinot_server_llcPartitionConsuming_Value{} OR label_set(pinot_server_llcPartitionConsuming_Value{}) * 0
语句说明:
label_set(pinot_server_llcPartitionConsuming_Value{}):提取原指标所有存在的标签组合(比如不同的instance、partition等标签的组合)label_set(...) * 0:基于这些标签组合生成值为0的时间序列,每个标签组合对应一条0值序列OR:将原指标的真实数据和这些0值序列合并,原指标有数据的标签组合保留真实值,无数据的就用对应的0值填充
如果你的指标标签维度固定(比如只按instance和partition区分),也可以用更精准的写法,先按指定标签分组再生成0序列:
pinot_server_llcPartitionConsuming_Value{} OR on(instance, partition) (pinot_server_llcPartitionConsuming_Value{} group by(instance, partition) * 0)
这个写法适合标签维度明确的场景,效果和上面的语句一致。
内容的提问来源于stack exchange,提问作者Prashant Pandey
相关产品推荐
相关产品推荐

