Cacti: система мониторинга работы серверов
Владимир «turbina» Ляшко (v.turbina@gmail.com)
Не смотря на объемы современных жестких дисков и мощности процессоров, со временем перестает хватать как первого, так и второго. Бывает, сервисы по не понятным причинам отваливаются, каналы пропадают, и появляется еще много разных проблем. Без постоянного мониторинга системных ресурсов и используемых сервисов администратору довольно сложно обеспечить бесперебойную работу, быстро найти проблемный участок или понять причину неправильной работы сервиса.
Содержание:
Поискав с помощью поисковика, можно обнаружить большое количество систем мониторинга, распространяемых по лицензии GNU GPL и обладающих большой функциональностью. На слуху, конечно же, Nagios, MRTG, RRDtool и множество клонов NetMRG, Oreon и т.д. К сожалению, чтобы настроить некоторые из них, потребуется изрядно попотеть и изучить протоколы. Не каждый на этот подвиг решится. Поэтому для мониторинга выбираем . При его разработке одними из основных требований были интуитивность интерфейса и легкость в использовании. 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 работать с плагинами. Установка производилась в 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 ping_php_version4_snmpgetnext.patch $ sudo wget tree_console_missing_hosts.patch $ sudo wget thumbnail_graphs_not_working.patch $ sudo wget thumbnail_graphs_not_working.patch $ sudo wget thumbnail_graphs_not_working.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 плагинов не поддерживает, но зато эту поддержку сделали ребята из , предлагающие кроме патча еще с десяток плагинов различного назначения. Кстати, на этом же ресурсе предлагается дистрибутив CactiEZ, построенный на основе CentOS. В нем уже есть настроенный Cacti со всеми плагинами, плюс 305 полезных пакетов, среди которых Net-SNMP, Netflow, Webmin, eAccelerator и прочие. Патчим:
$ cd cacti $ wget –c http://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
На этом установка закончена, переходим к настройке.
В конфигурационном файле указываем информацию для соединения с БД:
$ 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 должен использоваться адрес вида , в нашем случае вводится , поэтому меняем ее на:
$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 Installation Guide", для настройки Cacti осталось пройти еще несколько шагов. Выбираем "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 вкладок:
- General - настройка журналируемой информации, и куда будут заноситься события (файл/syslog); на этапе отладки следует включить "Poller Logging Level" в HIGH или DEBUG, чтобы полностью контролировать все запросы, здесь же настраиваются параметры SNMP;
- Paths - указываются пути ко всем утилитам, используемым Cacti;
- Poller - настройка работы системы сбора информации, здесь можно переключаться между cmd.php или cactid, а также настроить проверку доступности узлов;
- Graph Export - настройка экспорта графиков (в том числе, и автоматического) в локальный файл, или по протоколу ftp, sftp;
- Visual - параметры вывода графиков: их количество, строки, столбцы, размер шрифта и прочее;
- Authentication - аутентификация пользователей, локальная или LDAP.
Отдельного пояснения требует cmd.php и cactid. Дело в том, что разработчики предлагают замену стандартному шеллу cmd.php, написанному на php. Пакет cactid, шелл в котором написан на С, следует стандарту POSIX и связан с библиотеками net-snmp. Им рекомендуется подменять cmd.php в тех случаях, когда стандартный вариант не справляется с большой нагрузкой. Кстати, для поклонников Perl есть вариант cmd на этом языке ().
В меню "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. Созданный аккаунт пока не активирован, следует еще раз выбрать настройку пользователя и активировать его.
Теперь разберем установку плагинов, у каждого есть свои особенности, но принцип прост. Очень полезен плагин Discovery, который способен находить неизвестные Cacti устройства, поддерживающие SNMP. Устанавливается он следующим образом. Переходим в подкаталог cacti/plugins, который был создан при установке патча:
$ cd cacti/plugins
Распаковываем архив:
$ wget –c http://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) c необходимыми параметрами доступа.
На странице можно найти большое количество скриптов, позволяющих от различных сервисов собирать статистику для Cacti.
Подведем итог: Cacti - очень простое в установке и использовании решение, с помощью которого человек, не знакомый со всеми тонкостями SNMP, может без проблем настроить систему мониторинга. Удачи.
Статья опубликована в сентябрьском номере журнала "Xakep" за 2007 год.





