Ruby on rails 如何使用graphite分析memcache密钥命中率?

Ruby on rails 如何使用graphite分析memcache密钥命中率?,ruby-on-rails,graphite,statsd,Ruby On Rails,Graphite,Statsd,我有一个Rails应用程序,它广泛使用缓存,我想知道应用程序中不同位置的缓存命中率。命中率低的地方显然需要注意。但首先要测量 为了获得真实数据,我使用graphite+statsd组合和一个函数。应用程序中的所有键都是格式['place',details…],因此我在graphite中获得了以下指标: stats.cache.place1.hits stats.cache.place1.misses stats.cache.place2.hits stats.cache.place2.miss

我有一个Rails应用程序,它广泛使用缓存,我想知道应用程序中不同位置的缓存命中率。命中率低的地方显然需要注意。但首先要测量

为了获得真实数据,我使用graphite+statsd组合和一个函数。应用程序中的所有键都是格式
['place',details…]
,因此我在graphite中获得了以下指标:

  • stats.cache.place1.hits
  • stats.cache.place1.misses
  • stats.cache.place2.hits
  • stats.cache.place2.misses
  • 等等
现在我想显示所有命中率。我能为一个地方想出以下公式:

divideSeries(stats.cache.place1.hits, sumSeries(stats.cache.place1.*))
它运行得很好,但是有几十个地方,我不想重复它,更不用说会出现新的地方

石墨专家们,这是一个问题:有没有办法显示所有地方的点击率?我在文档中见过group*函数,但它们让我感到困惑

理想情况下,我希望将我的位置分为4类:

  • 命中率高,请求多。缓存做得很好
  • 命中率低,请求多。需要关注
  • 命中率高,请求少。是否需要缓存
  • 命中率低,请求少。一定要删除缓存

如果有任何关于如何使用graphite进行此类分析的想法,我将不胜感激(我可以请求JSON格式的数据并自己计算,但我怀疑一定有一种更简单的方法)。

您可以在多个级别上使用globs,因此对于所有缓存执行情况的全局视图:

divideSeries(stats.cache.*.hits, sumSeries(stats.cache.*.*))
对于您提到的4个类别,这将有助于找到最高/最低的缓存速率

mostDeviant(5, divideSeries(stats.cache.*.hits, sumSeries(stats.cache.*.*)))
根据请求将它们分组到bucket中,然后显示一个单独的派生比率是比较困难的。使用重复调用的回调函数可能会起作用

highestAverage(groupByNode(groupByNode(stats.cache.*.*, 3, "sumSeries"), 2, "divideSeries"), 10)

作为补充说明,对于大多数LRU(最近使用最少的)缓存逐出方案,删除缓存没有多大意义,因为它不会争夺缓存空间。

Thank you@phillbaker,我认为您的答案是可以接受的,但我选择了一个简单的clojure应用程序,它可以从graphite下载和处理JSON数据。至于删除缓存,我仍然认为它有一定的意义。请看,缓存的全部目的是用较小的缓存访问时间T替换访问时间T(用于数据库访问或生成某些内容)。但是,缓存未命中会导致T+T(假设缓存读取和缓存写入操作在时间上具有可比性)。有了100%的缓存未命中率,就没有必要再花费额外的t了。