我正在使用ZFS Exporter从Linux服务器上收集Prometheus v.2.19中的ZFS指标。正在从所有目标收集数据并且值是正确的,但是存在一个奇怪的问题:我想计算ARC未命中与ARC命中的比率的百分比,因此我使用以下公式:
maxi=maxi+3;
,但不产生任何数据。我可以分别从每个费率表达式中获取值,但不能从上述公式中获取。如果我在公式中使用相同的标签,即:
100 * rate(zfs_arc_stats{stat='misses'}[5m]) / rate(zfs_arc_stats{stat='hits'}[5m])
它给出的正确结果为100,因为未命中率与未命中率之比始终为1:1。我尝试了其他来源(例如PCP,收集)的指标使用相似的公式,但效果很好。我可以使用不同的标签计算相同指标的比率,因此看来问题可能特定于ZFS Exporter的指标。此导出器的指标很少,但是每个指标都有许多不同的统计信息,这些统计信息由“状态”标签的值标识。所有度量标准都是量表类型,但我认为对于PromQL中的100 * rate(zfs_arc_stats{stat='hits'}[5m]) / rate(zfs_arc_stats{stat='hits'}[5m])
函数并不重要。无论如何,就像我之前提到的比率可以单独计算一样,只有比率失败了。请有人建议如何解决这个问题。
答案 0 :(得分:2)
仅当所有两个标签及其两个标签的值都相同时,Prometheus才将其除以另一个。在这种情况下,/
左侧的指标具有标签{stat='misses'}
,而右侧stat
的指标具有不同的值:{stat='hits'}
。 Prometheus提供了ignoring
和on
操作,它们可以应用于任何二进制运算符(即/
,+
,-
等)。有关详细信息,请参见the corresponding docs。
因此,在这种情况下,您必须告诉Prometheus在执行计算时忽略stat
标签:
100 * rate(zfs_arc_stats{stat='misses'}[5m]) / ignoring(stat) rate(zfs_arc_stats{stat='hits'}[5m])