Ole*_*kii 7 ruby-on-rails graphite statsd
我有一个Rails应用程序,它广泛使用缓存,我想知道应用程序中不同位置的缓存命中率.低命中率显然需要注意.但先测量一下!
为了获得真实数据,我使用了石墨+ statsd组合和使用statsd-instrument gem的自定义Dalli仪器.应用程序中的所有键都是表单,因此我在石墨中获得以下指标:['place', details...]
现在我要显示所有命中率.我能够为一个地方想出以下公式:
divideSeries(stats.cache.place1.hits, sumSeries(stats.cache.place1.*))
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但有几十个地方,我不想复制它,更不用说新的地方可以出现.
这是一个问题,石墨专家:有没有办法显示所有地方的命中率?我在文档中看到了group*函数,但它们让我感到困惑.
理想情况下,我想将我的地点分为4类:
我非常感谢任何有关如何使用石墨进行此类分析的想法(我可以请求JSON格式的数据并进行自己的数学运算,但我怀疑必须有一种更简单的方法).
您可以在多个级别使用 glob,因此对于所有缓存的执行情况的全局视图:
divideSeries(stats.cache.*.hits, sumSeries(stats.cache.*.*))
Run Code Online (Sandbox Code Playgroud)
对于您提到的 4 个类别,该mostDeviant功能可能很好,这将有助于找到最高/最低缓存率。
mostDeviant(5, divideSeries(stats.cache.*.hits, sumSeries(stats.cache.*.*)))
Run Code Online (Sandbox Code Playgroud)
根据请求将它们分组到存储桶中,然后显示单独的派生比率是更困难的。使用重复的回调函数groupByNode可能highestAverage会起作用
highestAverage(groupByNode(groupByNode(stats.cache.*.*, 3, "sumSeries"), 2, "divideSeries"), 10)
Run Code Online (Sandbox Code Playgroud)
附带说明一下,对于大多数 LRU(最近最少使用)缓存逐出方案,删除缓存没有多大意义,因为它不会竞争缓存空间。