繁体   English   中英

使用 prometheus 查询缓存命中率图

[英]Query for a cache hit rate graph with prometheus

我将 Caffeine 缓存与 Spring Boot 应用程序一起使用。 所有指标都已启用,因此我将它们放在 Prometheus 和 Grafana 上。

基于cache_gets_total指标,我想构建一个HitRate图。

我试图获得缓存命中

delta(cache_gets_total{result="hit",name="myCache"}[1m])

并且都从缓存中获取

sum(delta(cache_gets_total{name="myCache"}[1m]))

这两个指标都正常工作并且具有值。 但是当我试图获得命中率时,我没有数据点。 我试过的查询:

delta(cache_gets_total{result="hit",name="myCache"}[1m]) / sum(delta(cache_gets_total{name="myCache"}[1m]))

为什么这个查询不起作用以及如何根据信息获取 HitRate 图,我有来自 Spring Boot 和 Caffeine?

首先,建议使用increase()而不是delta来计算计数器在指定 lookbehind window 上的增加。 increase() function 正确处理计数器重置为零,这可能发生在服务重启时,而delta()如果给定的 lookbehind window 涵盖计数器重置,将返回不正确的结果。

接下来,Prometheus 在执行/操作时搜索具有相同标签集的时间序列对。 然后它针对每对时间序列分别应用给定的操作。 increase(cache_gets_total{result="hit",name="myCache"}[1m])返回的时间序列至少有两个标签: result="hit"name="myCache" ,而sum(increase(cache_gets_total{name="myCache"}[1m])) ) 返回的时间序列sum(increase(cache_gets_total{name="myCache"}[1m]))的标签为零,因为sum在聚合后删除了所有标签。

Prometheus 提供了这个问题的解决方案——on( on()group_left()修饰符。 on()修饰符允许限制标签集,在搜索具有相同标签集的时间序列对时应使用该修饰符,而group_left()修饰符允许将左侧的多个时间序列/左侧的单个时间序列相匹配/运算符的右侧。 请参阅这些文档 所以下面的查询应该返回缓存命中率:

increase(cache_gets_total{result="hit",name="myCache"}[1m])
  / on() group_left()
sum(increase(cache_gets_total{name="myCache"}[1m]))

存在替代解决方案:

  1. 使用sum() function 从increase(cache_gets_total{result="hit",name="myCache"}[1m])中删除所有标签:
sum(increase(cache_gets_total{result="hit",name="myCache"}[1m]))
  /
sum(increase(cache_gets_total{name="myCache"}[1m]))
  1. 将查询的右侧部分包装到scalar() function 中。这将启用此处描述的vector op scalar匹配规则:
increase(cache_gets_total{result="hit",name="myCache"}[1m])
  /
scalar(sum(increase(cache_gets_total{name="myCache"}[1m])))

也可以通过sum(...) by (name)模板通过单个查询获得所有缓存的缓存命中率:

sum(increase(cache_gets_total{result="hit"}[1m])) by (name)
  /
sum(increase(cache_gets_total[1m])) by (name)

在Prometheus中分别运行两个查询(“缓存命中”和“所有获取”),并将获得的标签集与结果进行比较。 为了使“ /”操作起作用,双方必须具有完全相同的标签(和值)。 通常,需要进行一些汇总才能“删除”不需要的维度/标签(例如:如果两个查询中已经有一个值,则只需将它们都包装在sum()中-在除法之前)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM