На больших программных проектах для кэширования данных часто используется сервис memcached изначально разработанный Бредом Фитцпатриком для созданного им же сервиса livejournal.com. Отличительными особенностями memcached являются высокая скорость работы и простота взаимодействия. По сути memcached представляет собой реализацию хеш-таблицы (хранит пары ключ-значение) в памяти (после перезапуска сервиса данные теряются) что и обуславливает простоту и скорость работы.
На практике обычно важно следить за эффективностью работы кэша чтобы своевременно находить проблемы и решать их совершенствуя код продукта. Далее будет показано как можно осуществить мониторинг memcached с помощью MRTG.
Для начала немного теории. Обычно memcached используется примерно вот так (пример на псевдокоде):
// Пытаемся получить данные из кэша
$val = memcached_get($key);
// Если данные не были найдены в кэше
if (!$val) {
// Получаем данные из БД
$val = get_data_from_db();
// Сохраняем их в кэше
memcached_set($key, $val)
}
Видно что эффективность кэша можно описать как отношение числа операций чтения к числу операций записи в единицу времени. Чем выше это соотношение — тем эффективнее работает кэш.
Так же можно использовать и обратное соотношение: число операций записи к числу операций чтения за единицу времени. В этом случае чем меньше это соотношение — тем выше эффективность кэша. Для изображения на графиках MRTG этот вариант немного удобнее потому воспользуемся им.
Допустим что у нас есть сервер мониторинга под управлением FreeBSD 8.2 и на нём уже запущен и работает MRTG. Нам надо добавить график, иллюстрирующий работу memcached. Для этого нам понадобится скрипт, который сможет получить статистику работу сервера memcached и отобразить её в нужном для использования MRTG виде.
Скрипт будем писать на PHP. Почему? Просто автору этих строк так проще и удобнее, хотя этот скрипт можно написать практически на любом языке программирования. Для работы скрипта понадобится PHP-модуль pecl-memcache. Установим его:
cd /usr/ports/databases/pecl-memcache
make install clean
Собственно сам скрипт:
#!/usr/local/bin/php
connect($host, 11211);
// Запрашиваем статистику
$rv = $mcd_obj->getStats();
// Отображаем её
print «{$rv[‘cmd_set’]}\n»;
print «{$rv[‘cmd_get’]}\n»;
print «{$rv[‘uptime’]}\n»;
print «$host\n»;
В качестве параметра скрипт принимает адрес хоста с memcached, с которого надо получить статистику. Важно чтобы у скрипта был доступ на тот хост.
Сохраним скрипт под именем «/usr/local/scripts/mrtg_memcached.php» и сделаем его исполнимым. После этого остаётся только добавить в конфигурацию MRTG примерно такие строки:
Target[memcached]: `/usr/local/scripts/mrtg_memcached.php memcached.example.com`
MaxBytes[memcached]: 1
Title[memcached]: memcached statistics
PageTop[memcached]:
memcached statistics
AbsMax[memcached]: 1250000
Options[memcached]: integer,nopercent,nobanner,growright,dorelpercent
YLegend[memcached]: per second
ShortLegend[memcached]: per second
Legend1[memcached]: writes per second
Legend2[memcached]: reads per second
На этом всё. Приятной работы!