Мониторим подчиненные системыВладимир «turbina» Ляшко Хакер, номер #105, стр. 150 Cacti: система мониторинга работы серверовНесмотря на объемы современных жестких дисков и мощности процессоров, со временем перестает хватать и первого, и второго. Бывает, по непонятным причинам отваливаются сервисы, пропадают каналы, появляется еще много разных проблем. Без постоянного мониторинга системных ресурсов и используемых сервисов администратору довольно сложно обеспечить бесперебойную работу, быстро найти проблемный участок или понять причину неправильной работы сервиса. Проект CactiС помощью поисковика можно обнаружить большое количество систем мониторинга, распространяемых по лицензии GNU GPL и обладающих большой функциональностью. На слуху, конечно же, Nagios, MRTG, RRDtool, множество клонов NetMRG, Oreon и т.д. К сожалению, чтобы настроить некоторые из них, потребуется изрядно попотеть, изучая протоколы. Не каждому это понравится. Поэтому для мониторинга выберем Cacti (cacti.net). При его разработке одними из основных требований были интуитивность интерфейса и легкость в использовании. Cacti является удобной надстройкой над RRDTool, его интерфейс написан на PHP, а для хранения информации служит MySQL. Cacti без проблем работает в сетях любого размера и любой топологии, контролируя самые разнообразные параметры систем и сетей. В качестве источника данных используются любые внешние команды или сценарии, реализована поддержка SNMP. Результат выводится в виде графиков. Вообще все, что есть в Cacti, представлено графиками, даже параметры и настройки так или иначе привязаны к ним. Каждый график описывается двумя элементами: данными, которые должны быть представлены, и свойствами, определяющими, как должна выводиться информация. Параметры любого созданного графика можно просмотреть и уточнить, в том числе «на лету». Используя заранее подготовленные шаблоны, графики очень легко создавать самостоятельно, без необходимости погружения в тонкости RRDTools и SNMP. СтавимДля работы Cacti потребуется наличие веб-сервера с поддержкой PHP (Apache или IIS), сам PHP, MySQL, а также RRDTool и net-snmp для мониторинга. Для закачки доступны архивы для Linux и Windows, есть ссылки на RPM-пакеты, ebuild Gentoo, OpenSUSE. При желании можно использовать CVS или архив с текущей сборкой. Кроме этого, можно поискать нужные пакеты в репозитарии своего дистрибутива. Так, в Debian/Ubuntu для установки Cacti достаточно ввести: $ sudo apt-get install cacti Но в данном случае я предлагаю устанавливать Cacti из исходников. Так мы сможем, во-первых, исправить найденные ошибки, накатив доступные патчи, а во-вторых, научить Cacti работать с плагинами. Установку производим в Ubuntu 7.04. Находим с помощью «sudo apt-cache depends cacti» все зависимости и устанавливаем их, сам пакет cacti не ставим. Качаем сырцы с официального сайта: $ wget -c www.cacti.net/downloads/cacti-0.8.6j.tar.gz Распаковываем: $ cd /var/www $ tar -xzvf /tmp/cacti-0.8.6j.tar.gz Ставим доступные патчи: $ sudo cd cacti-0.8.6j $ sudo wget www.cacti.net/downloads/patches/0.8.6j/ping_php_version4_snmpgetnext.patch $ sudo wget www.cacti.net/downloads/patches/0.8.6j/tree_console_missing_hosts.patch $ sudo wget www.cacti.net/downloads/patches/0.8.6j/thumbnail_graphs_not_working.patch $ sudo wget www.cacti.net/downloads/patches/0.8.6j/graph_debug_lockup_fix.patch $ sudo wget www.cacti.net/downloads/patches/0.8.6j/snmpwalk_fix.patch $ sudo patch -p1 -N < ping_php_version4_snmpgetnext.patch $ sudo patch -p1 -N < tree_console_missing_hosts.patch $ sudo patch -p1 -N < thumbnail_graphs_not_working.patch $ sudo patch -p1 -N < graph_debug_lockup_fix.patch $ sudo patch -p1 -N < snmpwalk_fix.patch Для удобства переименовываем каталог: $ sudo mv cacti-0.8.6j cacti По умолчанию Cacti плагинов не поддерживает, но эту поддержку реализовали ребята из CactiUsers (cactiusers.org), предлагающие, кроме патча, еще с десяток плагинов различного назначения. Кстати, на этом же ресурсе имеется дистрибутив CactiEZ, построенный на основе CentOS. В нем уже есть настроенный Cacti со всеми плагинами, плюс 305 полезных пакетов, среди которых Net-SNMP, Netflow, Webmin, eAccelerator и прочие. Патчим: $ cd cacti $ wget –c cactiusers.org/downloads/cacti-plugin-arch.tar.gz $ sudo tar -xzvf cacti-plugin-arch.tar.gz $ sudo patch -p1 -N < cacti-plugin-arch/cacti-plugin-0.8.6j.diff Если MySQL еще не работает, запускаем: $ sudo /etc/init.d/mysql start Создаем новую базу данных cacti: $ mysqladmin --user=root create cacti И заполняем ее, используя подготовленный шаблон: $ mysql -u root cacti < cacti.sql Теперь пользователю cactiuser даем все права на новую базу: $ mysql -u root cacti mysql> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cactipassword'; Query OK, 0 rows affected (0.06 sec) mysql> flush privileges; Query OK, 0 rows affected (0.03 sec) mysql> quit На этом установка закончена, переходим к настройке. Настройка CactiВ конфигурационном файле указываем информацию для соединения с БД: $ mcedit ./include/config.php $database_type = "mysql"; $database_default = "cacti"; $database_hostname = "localhost"; $database_username = "cactiuser"; $database_password = "cactipassword"; $database_port = "3306"; Кстати, в Ubuntu этот участок вынесен в отдельный файл, который подключен в config.php с помощью Include. Если наложен патч, включающий поддержку плагинов, внутри появится запись: $config['url_path'] = "/"; Это значит, что при обращении к Cacti должен использоваться адрес вида http://server.com/. В нашем случае вводится http://server.com/cacti/, поэтому меняем запись на: $config['url_path'] = "/cacti/"; Далее создаем в системе пользователя, от имени которого будет работать Cacti: $ sudo adduser --no-create-home --disabled-password --disabled-login cactiuser Изменяем владельца файлов в каталоге cacti, чтобы веб-сервер мог их прочитать: $ sudo chown -R www-data:www-data cacti/ Но владельцем двух подкаталогов должен быть cactiuser: $ sudo chown -R cactiuser cacti/rra/ cacti/log/ Создание графиков в CactiНабираем в строке веб-браузера http://server.com/cacti и попадаем в Cacti Installation Guide. Выбираем New Install или Upgrade from 0.8.x при обновлении. Скрипт проверяет наличие всех необходимых утилит, найденные отмечаются подписью «FOUND». Если что-то не нашлось, необходимо вручную задать полный путь к утилите. В этой же вкладке указываем версию SNMP (NET-SNMP 5.x или UCD-SNMP 4.x) и версию RRDTool (1.2 или 1.0). Затем все настройки можно будет изменить в Cacti Settings. На этом все, нажимаем Finish. Теперь можно проверить работу скрипта, отвечающего за сбор статистики: $ sudo php /var/www/cacti/poller.php Если вывод не содержит ошибок, обеспечиваем периодический запуск poller.php с помощью cron: $ sudo mcedit /etc/crontab */5 * * * * cactiuser php /var/www/cacti/poller.php >/dev/null \ 2>/var/log/cacti/poller-error.log Регистрируемся (admin с паролем admin) и в следующем окне изменяем пароль. В рабочем окне две вкладки. В Console настраиваются графики, параметры Cacti, пользователи; здесь же можно найти некоторые утилиты. В Graphs доступны все графики, созданные в Console. По умолчанию в Cacti заведен контроль только четырех параметров локальной системы: памяти, загрузки CPU, пользователей и процессов. Чтобы продолжить работу, следует создать новое сетевое устройство. Для этого выбираем в первом окне ссылку Create devices. По умолчанию присутствует localhost со статусом Enable. Для добавления нового устройства нажимаем в правом верхнем углу Add и в появившемся окне заполняем описание (Description), имя или IP-адрес узла. В Host Template указываем шаблон и параметры SNMP. После нажатия кнопки Create переходим в следующее окно. Если Cacti удалось соединиться с указанным узлом, информация о нем будет выведена в самом верху страницы. Иначе появится надпись «SNMP Failed», тогда возвращаемся и проверяем настройки. В появившемся окне должно добавиться два поля: Associated Graph Templates и Associated Data Queries. Обрати внимание на столбец Debugging. Нажав на ссылку Verbose Query напротив сформированного графика, ты увидишь запрос и его результат. Таким образом, на этапе настройки можно выяснить, будет ли работать этот график, и при необходимости внести изменения. После добавления в Associated Graph Templates в поле Status появится надпись «Not Being Graphed». Это означает, что график пока не сформирован и беспокоиться не следует. После первого же запроса здесь появится «Is Being Graphed», а рядом будет надпись «Edit». Нажатие на эту ссылку позволит отредактировать параметры графика. После добавления шаблонов нажимаем «Create Graphs for this Host» и переходим на страницу создания графиков, отмечаем нужные и еще раз нажимаем Create. Здесь для уточнения доступны цвет и тип будущих графиков, максимальное значение контролируемых параметров, подпись и многое другое. Возвращаемся обратно в дерево устройств, включаем новое устройство и, выбрав в том же списке Place on a tree, помещаем его в дерево устройств. Теперь новое устройство и его графики будут доступны для просмотра во вкладке Graphs. Все созданные графики располагаются в меню Graph Management, где можно их быстро копировать и удалять, создавать на их основе новый шаблон, изменять узел. По умолчанию все графики будут выводиться в корне дерева. Если количество узлов велико, выбрав Graph Trees, можно создать новые ветки дерева и разместить в них графики более логично. В Sorting Type задается вид сортировки: по имени или по номеру. Изначально установлена ручная сортировка, для перемещения графиков по ветке дерева пользуемся стрелками. Обязательно следует ознакомиться с параметрами в «Configuration -> Setting», где находится 6 вкладок:
Специального пояснения требует cmd.php и cactid. Дело в том, что разработчики предлагают замену стандартному шеллу cmd.php, написанному на PHP. Пакет cactid, шелл в котором написан на Си, следует стандарту POSIX и связан с библиотеками net-snmp. Им рекомендуется подменять cmd.php в тех случаях, когда стандартный вариант не справляется с большой нагрузкой. Кстати, для поклонников Perl есть вариант cmd на этом языке (www.cacti.net/downloads/scripts/spine.pl.txt). В меню «Utilities -> System Utilities» можно просмотреть журнал работы Cacti. Удобно, что в зависимости от результата записи имеют разный цвет. Это помогает визуально определить неудачные запросы, причем можно сразу же перейти по гиперссылке в настройку устройства или отдельного графика. Отсюда же просматриваются журнал захода пользователей, кэш Poller и SNMP-запросы. По умолчанию в Cacti созданы два пользователя: admin и guest. Последний не имеет пароля и позволяет только просматривать графики загрузки локальной системы. Для добавления пользователей следует перейти в User Management и выбрать Add. Появится окно редактирования свойств нового пользователя. На первой странице вводим имя и пароль пользователя, в Login Options указываем, что будет выведено после регистрации. Установка «User Must Change Password at Next Login» заставит пользователя сменить пароль при первой регистрации. Во вкладках Realm Permissions, Graph Permissions и Graph Settings более тонко настраиваются параметры доступа пользователя к графикам. В Realm Permissions указываем операции, которые сможет осуществлять пользователь. После выбора нужных параметров нажимаем Create. Созданный аккаунт пока не активирован, следует еще раз выбрать настройку пользователя и активировать его. Установка плагинов CactiТеперь разберем установку плагинов. Каждый имеет свои особенности. Очень полезен плагин Discovery, который способен находить неизвестные Cacti устройства, поддерживающие SNMP. Устанавливается он следующим образом. Переходим в подкаталог cacti/plugins, который был создан при установке патча: $ cd cacti/plugins Распаковываем архив: $ wget –c cactiusers.org/downloads/discovery.tar.gz $ tar xzvf discovery-0.7.tar.gz Создаем новые таблицы: $ mysql -u root -p cacti < discovery/discover.sql Каждый плагин подключается в массиве $plugins файла config.php. Изначально в нем нет записей: $plugins = array(); Для того чтобы добавить к нему плагин, в строке ниже дописываем элемент с названием каталога установленного расширения. Для большинства плагинов это, кстати, единственное, что требуется сделать для установки. В нашем случае каталог называется discovery: $plugins[] = 'discovery'; Теперь в «Configuration -> Setting» появилась еще одна вкладка - Misc, предназначенная для настроек плагинов. Для Discovery в ней требуется указать подсеть для сканирования, метод сканирования (ICMP, TCP, UDP), комьюнити SNMP и период. После этого Discovery будет сообщать, если найдет узел, поддерживающий SNMP и непрописанный в Cacti. Неплох плагин tools - после его установки в «Console -> Utilities» появится новое меню, в котором можно будет проверять работу сервисов на указанном узле или просматривать ответ SNMP. Советую также установить плагин thold, с помощью которого можно отсылать сообщения. После его установки в Setting появится еще одна вкладка. В ней требуется указать лишь почтовый адрес, на который будут приходить сообщения, события (ошибки, тревоги и прочие), и способ отправки (php, smtp, sendmail) с необходимыми параметрами доступа. На странице Additional Scripts - www.cacti.net/additional_scripts.php - можно найти большое количество скриптов, позволяющих собирать статистику для Cacti с различных сервисов. Итак, Cacti - очень простое в установке и использовании решение, с помощью которого человек, незнакомый со всеми тонкостями SNMP, может без проблем настроить систему мониторинга. Удачи. |