На больших программных проектах для кэширования данных часто используется сервис 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 <?php // Если не указан хост для мониторинга - завершаем работу if (!$host = @$argv[1]) { exit(1); } // Создаём объект и соединяемся с сервером $mcd_obj = new Memcache(); $mcd_obj->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]: <h1>memcached statistics</h1> 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
Полученный график будет выглядеть примерно так:
Здесь синяя линия - число операций чтения в секунду, зелёная - операции записи. Жёлтая - как раз и наблюдаемая величина - отношение числа операций записи к числу операций чтения каждую секунду.
На этом всё. Приятной работы!
Anonymous 2012-11-26 08:10:42 (#)