Graphite/Grafana使用asPercent计算百分比时缺失分组显示0%方案
Bar Gauge面板分组百分比计算缺失分组补零方案
asPercent()函数执行计算时会严格按标签集匹配两个输入序列的对应分组,过滤逻辑导致的分组缺失不会被自动补零,会直接触发匹配报错。按以下步骤调整配置即可解决:
- 调整序列#B的初始化逻辑,先保证分组集合和#A完全对齐:取数阶段不要提前加
etc=foo的硬过滤,和#A保持逻辑一致:仅添加color维度过滤,执行summarize()函数后通过groupByTags(color)按color标签分组,确保初始化阶段red、blue、green三个color分组全部存在,和#A的分组1:1对应。 - 对#B做分组内条件统计:在分组完成后,单独对每个color分组做标签筛选,仅汇总
etc=foo对应的数值,对筛选后无匹配数据的分组,调用transformNull(0)将空值置为0。参考配置写法:
# 注意:最外层取数不要加etc=foo过滤,避免分组直接丢失 # 请替换成你实际的指标路径、summarize聚合粒度和聚合方法 summarize( groupByTags( color, sum, filterSeries(your.metric.path{color=*}, 'etc', 'eq', 'foo') ), '5m', 'sum' ).transformNull(0)
- 校验后做百分比计算:先单独预览#B的返回结果,确认三个color分组全部存在,无
etc=foo数据的color分组值为0,此时再调用#B.asPercent(#A)就不会出现分组匹配错误,缺失的分组会正常显示为0%。
如果你的数据源版本不支持分组内过滤写法,也可以在#C计算前增加补全步骤:以#A的标签分组为基准,对#B调用fillMissing(0)补全所有缺失分组,再传入asPercent()做计算,注意这种方式需要把两个序列的时间窗口、聚合粒度完全对齐,避免出现补值失效的问题。
内容的提问来源于stack exchange,提问作者RML
相关产品推荐
相关产品推荐

