如何通过普罗米修斯查询将二除以计算百分比

How to divide two by prometheus queries to calculate a percentage

我有两个不同的指标,它们的标签都是 client_app

一个指标是一个直方图,它计算给定时间跨度内失败请求的数量(即,最后一分钟有 10 个请求失败),另一个指标是一个计数器,每个请求都会递增。

我想将这两个指标相除以获得每个 client_app

的失败请求百分比

这是我目前的尝试

avg by (client_app) (max(rate(ignored_events_sum[5m])) / sum(rate(total_app_events[5m])))

这只输出一个图,而我希望每个图一个 client_app

试试这个:

max by (client_app) (rate(ignored_events_sum[5m])) / sum by (client_app) (rate(total_app_events[5m]))

默认情况下,Prometheus 根据these docs/ 左右两侧具有相同标签集的时间序列对进行划分。如果 / 左右两侧的时间序列包含不同的标签集,那么 on()group_left() 修饰符可能会有所帮助:

  • on()修饰符限制标签,用于搜索匹配的时间序列对。例如 a / on(client_app) b 将搜索来自 ab 且仅具有相同 client_app 标签的时间序列对。

  • group_left() 修饰符允许将多个时间序列与 / 左侧的给定标签集与 [=11= 右侧的单个时间序列匹配].

查看有关这些修饰符的更多详细信息in these docs

所以原始问题的解决方案是以下 PromQL 查询:

rate(ignored_events_count[5m])
  / on (client_app) group_left()
rate(total_app_events[5m])

它将 per-seconds 每个名称为 ignored_events_count 的时间序列的比率除以名称为 total_app_events 的时间序列的 per-second 比率与匹配的 client_app标签值。