Prometheus 无法计算两个指标的比率
Unable to calculate the ratio of two metrics in Prometheus
我正在使用 ZFS Exporter 从 Linux 服务器收集 Prometheus v.2.19 中的 ZFS 指标。正在从所有目标收集数据并且值是正确的,但是有一个奇怪的问题:我想计算 ARC 未命中与 ARC 命中率的百分比,所以我使用以下公式:
100 * rate(zfs_arc_stats{stat='misses'}[5m]) / rate(zfs_arc_stats{stat='hits'}[5m])
但它没有产生任何数据。我可以分别从每个速率表达式中获取值,但不能从上面的公式中获取。如果我使用具有相同标签的公式,即:
100 * rate(zfs_arc_stats{stat='hits'}[5m]) / rate(zfs_arc_stats{stat='hits'}[5m])
它给出了 100 的正确结果,因为未命中与未命中或命中与命中的比率始终是 1:1。我使用其他来源(即 PCP、Collectd)的指标尝试了类似的公式,并且效果很好,即。我可以计算具有不同标签的相同指标的比率,因此问题似乎可能特定于 ZFS Exporter 的指标。这个导出器有很少的指标,但每个指标都有许多不同的统计数据,由 'stat' 标签的值标识。所有指标都是仪表类型,但我认为这对 PromQL 中的 rate
函数来说并不重要。无论如何,就像我之前提到的可以单独计算费率一样,只有比率失败了。有人请建议如何解决这个问题。
只有当两个指标的所有标签及其值都相同时,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])
我正在使用 ZFS Exporter 从 Linux 服务器收集 Prometheus v.2.19 中的 ZFS 指标。正在从所有目标收集数据并且值是正确的,但是有一个奇怪的问题:我想计算 ARC 未命中与 ARC 命中率的百分比,所以我使用以下公式:
100 * rate(zfs_arc_stats{stat='misses'}[5m]) / rate(zfs_arc_stats{stat='hits'}[5m])
但它没有产生任何数据。我可以分别从每个速率表达式中获取值,但不能从上面的公式中获取。如果我使用具有相同标签的公式,即:
100 * rate(zfs_arc_stats{stat='hits'}[5m]) / rate(zfs_arc_stats{stat='hits'}[5m])
它给出了 100 的正确结果,因为未命中与未命中或命中与命中的比率始终是 1:1。我使用其他来源(即 PCP、Collectd)的指标尝试了类似的公式,并且效果很好,即。我可以计算具有不同标签的相同指标的比率,因此问题似乎可能特定于 ZFS Exporter 的指标。这个导出器有很少的指标,但每个指标都有许多不同的统计数据,由 'stat' 标签的值标识。所有指标都是仪表类型,但我认为这对 PromQL 中的 rate
函数来说并不重要。无论如何,就像我之前提到的可以单独计算费率一样,只有比率失败了。有人请建议如何解决这个问题。
只有当两个指标的所有标签及其值都相同时,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])