Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #105, СЕНТЯБРЬ 2007 г.

Мониторим подчиненные системы

Владимир «turbina» Ляшко

Хакер, номер #105, стр. 150

(v.turbina@gmail.com)

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 вкладок:

  1. General - настройка журналируемой информации, сюда также будут заноситься события (файл/syslog); на этапе отладки следует включить Poller Logging Level в HIGH или DEBUG, чтобы полностью контролировать все запросы, здесь же настраиваются параметры SNMP.
  2. Paths - указываются пути ко всем утилитам, используемым Cacti.
  3. Poller - настройка работы системы сбора информации, здесь можно, а также настраивать проверку доступности узлов.
  4. Graph Export - настройка экспорта графиков (в том числе и автоматического) в локальный файл или по протоколу ftp, sftp.
  5. Visual - параметры вывода графиков: их количество, строки, столбцы, размер шрифта и прочее.
  6. Authentication - аутентификация пользователей, локальная или LDAP.

Специального пояснения требует 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, может без проблем настроить систему мониторинга. Удачи.

Содержание