Как анализировать с memcache ключ урона с графитом?

у меня есть приложения Rails, который использует кэширование, и я хочу знать кэша для разных мест в приложении. Низкая нажмите тариф, очевидно, требуют внимания. Но измерить!

для получения реальных данных я использую graphite + statsd combo и A пользовательские инструменты Dalli используя statsd-инструмент gem. Все ключи в приложении находятся в форме ['place', details...], Так что я получаю следующие показатели в графит:

  • статистика.кэш.place1.хиты
  • статистика.кэш.place1.не попадает
  • статистика.кэш.place2.хиты
  • статистика.кэш.place2.не попадает
  • etc.

теперь я хочу показать все хит тарифы. Я смог придумать следующую формулу для одного места:

divideSeries(stats.cache.place1.hits, sumSeries(stats.cache.place1.*))

он работает довольно хорошо, но есть несколько десятков мест, и я бы не хотел дублировать его, не говоря уже о том, что новые места могут появиться.

это вопрос для Вас, экспертов по графиту: есть ли способ показать ставки хитов для всех мест? Я видел функции group* в документах, но они меня смущают.

В идеале я хочу разделить свои места на 4 категории:

  • высокая скорость попадания, много запросов. кэширование делает хорошую работу.
  • низкая скорость попадания, много запросов. требует внимания.
  • высокая скорость попадания, несколько запросы. требуется ли кэширование вообще?
  • низкая скорость попадания, несколько запросов. удалить кэширование.

Я был бы очень благодарен за любые идеи, как использовать графит для такого анализа (можно ли запросить данные в формате JSON и сделать свою собственную математику, но я подозреваю, что там должен быть более простой способ).

1 ответов


вы можете использовать глобусы на нескольких уровнях, поэтому для глобального представления о том, как выполняется все кэширование:

divideSeries(stats.cache.*.hits, sumSeries(stats.cache.*.*))

для 4 категорий, которые вы упомянули,на mostDeviant функция может быть хорошей, это поможет найти самые высокие / самые низкие скорости кэширования.

mostDeviant(5, divideSeries(stats.cache.*.hits, sumSeries(stats.cache.*.*)))

группировать их в ведра на основе запросов, а затем показывать отдельный производный коэффициент сложнее. Функции обратного вызова с использованием repeated groupByNode и highestAverage может работа

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

в качестве примечания, с большинством схем выселения кэша LRU (наименее-недавно используемых), в удаление кэширование, так как оно не будет конкурировать за пространство кэша.