Мониторинг memcached с помощью MRTG

()

На больших программных проектах для кэширования данных часто используется сервис 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

Полученный график будет выглядеть примерно так:

Здесь синяя линия - число операций чтения в секунду, зелёная - операции записи. Жёлтая - как раз и наблюдаемая величина - отношение числа операций записи к числу операций чтения каждую секунду.

На этом всё. Приятной работы!

Ключевые слова: memcached, mrtg, freebsd, мониторинг.

Комментарии:

Anonymous 2012-11-26 08:10:42 (#)

Есть nagios и collectd же.

MooSE 2012-11-26 12:41:08 (#)

Цитата:

Есть nagios и collectd же.


Каждый использует то что ему удобнее:)


Кстати nagios мне не показался адекватным. Тупо графики рисовать - mrtg много проще. А в качестве серьёзной системы мониторинга - zabbix много удобнее.
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE