【问题标题】:Unable to calculate the ratio of two metrics in Prometheus无法计算 Prometheus 中两个指标的比率
【发布时间】:2020-07-24 16:17:22
【问题描述】:

我正在使用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 函数并不重要。无论如何,就像我之前提到的可以单独计算比率,只有比率失败。有人请建议如何解决这个问题。

【问题讨论】:

  • 我实际上是在命中百分比之后,公式为:100 * rate(zfs_arc_stats{stat='hits'}[5m]) / ignoring(stat) (rate(zfs_arc_stats{stat='hits'}[5m]) + ignoring(stat) rate(zfs_arc_stats{stat='misses'}[5m]))
  • github.com/mac133k/zfs_exporter 中进行了提交以解决此问题,因此现在主分支中的代码包含一个新的度量名称空间,没有过多的标签。 labelhell 分支中仍然可以使用旧的指标命名。

标签: prometheus metrics promql


【解决方案1】:

只有当所有标签及其两个指标的值都相同时,Prometheus 才会将一个指标除以另一个指标。在这种情况下,/ 左侧的指标具有标签 {stat='misses'},而右侧的指标具有 stat 标签的不同值:{stat='hits'}。 Prometheus 提供ignoringon 操作,可以应用于任何二元运算符(即/+- 等)。详情请见the corresponding docs

因此,在您的情况下,您必须告诉 Prometheus 在执行计算时忽略 stat 标签:

100 * rate(zfs_arc_stats{stat='misses'}[5m]) / ignoring(stat) rate(zfs_arc_stats{stat='hits'}[5m])

【讨论】:

    猜你喜欢
    • 2022-08-14
    • 2021-09-08
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多