cacti для vps/vds или мониторим виртуальную память и диск

Cacti очень удобен для мониторинга системных ресурсов - изменения в работе сервера в буквальном смысле выделяются на графиках (резкие всплески и падения). И не станет неожиданностью очередное переполнение логами (что очень актуально для vds-vps)

По умолчанию, в Cacti для Localhost настроены следующие графики:
Localhost - Memory Usage
Localhost - Load Average
Localhost - Logged In Users
Localhost - Processes

Если последние три графика отображают действительно то, что нужно (во всяком случае, очень похоже), то первый - ну ни в какие ворота не лезет!!! Все дело в том, что системные команды, используемые для получения информации о памяти (попробуйте в shell-е /*подключившись по SSH*/ ввести команду top и обратите внимание на 3 и 4 строку) получают не совсем верную информацию. :) И поскольку, для графика Memory Usage в Cacti используются данные всего физического сервера (не только vps), то, естественно, получаем не совсем то, что хотелось бы - ну к чему нам горизонталь в 64 Гб оперативки??

Отследить память виртуального сервера можно при помощи небольшой программки. На некоторых VDS она входит в состав предустановленного ПО. Попробуем запустить (для запуска обычно требуются права root)

memory

Если в ответ получили “чистый экран” и что-то изменяющееся и похожее на:

VPS CPU
user: 0.00 nice: 0.00 system: 0.00 idle: 100.00
VPS Memory
total: 256.00MB used: 105.29MB (41.13%) free: 150.71MB (58.87%)

Если же “файл не найден”, то качаем и компилируем (еще хорошо бы проверить какой-нидь хеш..md5 abee82e42576f72cff7146c6b2318f95):

wget http://www.cubedthree.com/projects/openvz/openvzmon.c
md5sum openvzmon.c
gcc -o openvzmon.c

Итак, информацию о загрузке памяти вирутального сервера нашли. Теперь нужно как-то передать её в cacti (точнее, не совсем в cacti, а в rrdtool, но все равно через… одно место). Запуск memory -m выдаст в stdout строку с текущими данными о загрузке памяти. Кстати, можно подредактировать файл openvzmon.c перед компиляцией (не нужно быть великим программистом), чтобы в выводе с параметром -m “убрать лишнее” - тогда на выходе будем получать “голые числа”. Ищем по строке “if(memonly_flag)”. Если же редактировать не хоцца - пробуем запустить
memory -m | awk {’print $4′} | sed -e s/\.[0-9].MB//g | tr -d ‘\012′
- выведет текущее целое/числовое значение памяти в Mb (memory -m | awk {’print $4′} - подставляя вместо $4 что-нибудь рядом, можно получить другие значения). Не оптимально, но работает.

Теперь нужно научить cacti забирать эту информацию:
создаем скрипт vpsmem.sh в каталоге /usr/share/cacti/scripts (можно скопировать diskfree.sh, например) и помещаем туда следующее:
#!/bin/sh
memory -m | awk {'print $4'} | sed -e s/\.[0-9].MB//g | tr -d '\012'

переходим к web-интерфейсу (для более полного понимания, рекомендуется ознакомиться со структурой данных в cati. Несмотря на кажущуюся “запутанность”, она довольно логична и удобна, если количество Devices возрастает):

- Data Input Methods - Add (правый верхний угол). В появившейся форме вносим что-то вроде
Name “VPS/VDS Memory” (как этот Data Input будет обзываться);
Input Type - выбираем “Script/Command”;
Input String “/scripts/vpsmem.sh”
Output Fields - kilobytes
Сохраняем

- Data Templates - Add
Name “VPS/VDS Memory - Free”
Name “|host_description| - VPS/VDS Memory - Free”
Data Input method - выбираем VPS/VDS Memory
Associated RRA’s (я выбрал все кроме первого - по аналогии с шаблоном Linux-Memory usage)
Internal Data Source Name “mem_buffers” (пока воспользуемся шаблоном графика(!) для Linux-Memory - название должно быть аналогичное:))
Секцию Custom Data пока не трогаем- Data Sources - Add (все там же). В форме выбираем наш VPS/VDS-memory (Name) и Localhost - create;Graph Management - Add
Выбираем шаблон (пока выбрал Linux memory usage) и Localhost - Create
В дополнительных полях выбираем наш Data Source (для начала - в обоих.. красоту будем наводить потом)

Ждем пару минут и ищем график в разделе “graphs”
Если график отображается пустым, а текущие значения - Nan, то скорее всего всё сделано правильно. :)
Если на графике отображаются цифры - опасно. :) значит, cacti-пользователь спокойно запускает утилитку memory, которая берет информацию из файла /proc/vz/vestat, доступ к которому только у root-а.

Итак, надо как-то дать cacti-пользователю возможность запускать наш скрипт с правами / от имени root-а. Если cacti-пользователь, как и рекомендуется - apache, то можно воспользоваться модулем suExec. Еще можно воспользоваться командой sudo. Или же просто, установить для memory флаг “set user ID on execution”. В любом случае, сохранять пароль root в открытом виде не рекомендуется :)

Запускаем процесс от имени root без ввода пароля
редактируем файл /etc/sudoers (можно командой visudo)- биже к концу добавляем строку вида:
apache ALL=NOPASSWD:/bin/memory
(даем пользователю apache возможность запускать скрипт memory)
Еще одна маленькая хитрость. По умолчанию для запуска sudo установлено Defaults requiretty - требуется консоль. На время тестирования можно закомментировать, или изменить…

И ещё… после редактирования любым сторонним редактором рекомендуется проверить на ошибки командой
visudo -c

Устанавливаем set user ID on execution

chmod u+s /bin/memory

Ссылки (?) - Не уверен, что пригодятся все

http://dig7er.livejournal.com/6655.html
http://system-administrators.info/?p=2662
http://forum.openvz.org/index.php?t=msg&goto=2790
http://forum.openvz.org/index.php?t=selmsg&reply_count=0&&frm_id=0&mr=1&start=520

http://www.labradordata.ca/home/13

Метки: , ,

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

Комментарии (2) к записи “cacti для vps/vds или мониторим виртуальную память и диск”

  1. Dominik сообщает :

    Существует ли оболочка для данной команды, без необходимости писать в ручную.

  2. levik сообщает :

    Dominik, не совсем понял вопрос. :)

Добавить комментарий