按类别划分的 Promql 成功百分比

Promql percent successes by category

我有一个带有标签“success_or_failure”的仪表,其值为“成功”和“失败”。我想在 graphana 中创建一个图表,显示按另一个标签“类别”细分的成功百分比。这个想法是查看每个类别随时间推移的“成功百分比”。

我想要的 promql 应该是这样的:

avg by (category) 
  (event_gauge{success_or_failure="success"} / 
  ignoring(success_or_failue) group_right event_gauge)

当我这样做时,每个图表元素都等于 1。这让我相信我做错了。我在这里做错了什么?

Prometheus 只会在您列出的 PromQL 查询中使用您最后存储的值。 PromQL 查询始终基于您的指标的最后一个值。

你可以做一个

sum_over_time(event_gauge{success_or_failure="success"}[1h]) / 
count_over_time(event_gauge{success_or_failure="success"}[1h])

得到你想要的。

但实际上,数据没有很好地建模以用于 Prometheus。你应该考虑为此使用计数器。

带有 event_counter{category="xyz", status="success"}event_counter{category="xyz", status="failure"} 的内容。并让您的检测代码根据事件增加当前计数器。

让 Prometheus 抓取您计数器的最新状态。

那你可以做

avg by (category) 
 (sum without (status) (event_counter{category="xyz", status="success"}) 
    / 
  sum without (status) (event_counter{category="xyz"}))

P.S。我还没有对它进行全面测试,所以可能会有轻微的语法错误,但最重要的是看看你是否可以将它建模为计数器而不是仪表。