Сетевая инфраструктура без мониторинга напоминает автомобиль без приборной панели. Вроде едет, но куда именно и с какой скоростью - загадка. Системные администраторы давно вывели простое правило для себя "если что-то нельзя измерить, этим нельзя управлять". Именно поэтому инструменты вроде Cacti продолжают держаться на плаву уже второе десятилетие, несмотря на появление модных конкурентов с красивыми дашбордами. Причина проста и практична, Cacti работает, дёшево стоит по ресурсам и выдаёт именно ту информацию, которая нужна сетевому инженеру каждый день.
Что такое Cacti и почему эта связка с RRDtool пережила десятки более модных конкурентов
Если разобрать Cacti на составные части, получится любопытная картина. По сути, это веб-оболочка на PHP, которая умеет красиво показывать данные, собранные другим инструментом - RRDtool. Вся магия кругового хранилища данных (Round Robin Database) спрятана под капотом, а пользователю остаётся только смотреть графики. Такой подход оказался невероятно живучим. Пока одни системы мониторинга требуют кластер из трёх серверов и терабайты SSD, Cacti довольствуется скромным VPS и работает годами без обслуживания.
Сбор метрик идёт через SNMP - стандартный протокол, который понимают практически все сетевые устройства от дешёвого коммутатора до серверного оборудования корпоративного класса. Загрузка процессора, утилизация канала, температура на сенсорах, количество пакетов в секунду - всё это собирается по единому протоколу и сохраняется в MySQL. А дальше начинается самое интересное. Графики, тренды, корреляции, прогнозы по загрузке. Администратор видит не просто цифры, а полноценную историю жизни своей сети.
Почему именно Debian 11 Bullseye выбран в качестве платформы, догадаться нетрудно. Стабильность, долгий цикл поддержки, минимальные сюрпризы при обновлениях. Для системы мониторинга это критично. Никому не хочется перезагружать сервер в три часа ночи из-за очередного капризного апдейта. Debian тихо работает, пока не сломается железо - и это именно то, что нужно.
Предварительная подготовка сервера и установка базовых зависимостей для корректной работы монитора
Перед любыми манипуляциями имеет смысл освежить систему. Свежие пакеты - меньше головной боли потом. Две команды решают этот вопрос разом.
sudo apt update
sudo apt upgrade
Теперь пора подтянуть зависимости, без которых Cacti просто откажется запускаться. Сюда входят инструменты SNMP, модуль для PHP, сам RRDtool с Perl-библиотеками, а также утилиты для распаковки архивов и работы с репозиториями. Один длинный вызов apt закрывает весь список.
sudo apt install snmp snmpd php-snmp rrdtool librrds-perl unzip curl git gnupg2
Дальше начинается работа со связкой LAMP. Расшифровывается аббревиатура просто - Linux, Apache, MySQL (в нашем случае MariaDB), PHP. Классический стек, проверенный временем и миллионами инсталляций.
Разворачивание веб-сервера Apache и тонкая настройка PHP для нужд системы мониторинга
Apache ставится одной командой и не требует никаких плясок с бубном.
sudo apt install apache2 -y
После установки сервис надо запустить и прописать в автозагрузку. Иначе после первой же перезагрузки вся работа пойдёт прахом.
sudo systemctl start apache2
sudo systemctl enable apache2
Следующий этап - PHP с набором расширений. Cacti достаточно требователен к окружению, поэтому список модулей получается внушительным. Здесь и работа с MySQL, и обработка XML, и графика через GD, и математика больших чисел через GMP.
apt install php php-mysql libapache2-mod-php php-xml php-ldap php-mbstring php-gd php-gmp -y
Теперь самое важное и самое часто забываемое. Настройки PHP по умолчанию не подходят для Cacti от слова совсем. Нужно открыть конфиг и подкрутить три параметра.
vim /etc/php/*/apache2/php.ini
Внутри файла находим и меняем следующие строки.
memory_limit = 512M
max_execution_time = 60
date.timezone = Asia/Kolkata
Часовой пояс, конечно, стоит выставить свой - для российских реалий подойдёт Europe/Moscow или любой другой актуальный. Затем ровно те же параметры правятся во втором конфиге, который отвечает за запуск PHP из командной строки. Без этого фоновый сборщик данных будет работать с неправильными настройками.
vim /etc/php/*/cli/php.ini
Значения внутри дублируются.
memory_limit = 512M
max_execution_time = 60
date.timezone = Asia/Kolkata
Чтобы изменения вступили в силу, Apache надо перезапустить.
systemctl restart apache2
Подготовка базы данных MariaDB и настройка параметров под нагрузку от сборщика метрик
MariaDB играет роль долговременной памяти системы. Сюда стекаются все данные о пользователях, настройках, шаблонах графиков, устройствах. Установка по стандартной схеме.
sudo apt install mariadb-server
Запуск сервиса, автозагрузка, проверка статуса - три команды подряд.
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo systemctl status mariadb
Заходим в консоль базы.
mysql
Создаём базу, пользователя и выставляем нужную кодировку. Здесь есть один нюанс, на который новички часто попадаются. Кодировка utf8mb4 обязательна для корректной работы современного Cacti, иначе часть функционала просто не поедет.
CREATE DATABASE cactidb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
GRANT ALL PRIVILEGES ON cactidb.* TO 'cacti_user'@'localhost' IDENTIFIED BY 'password';
ALTER DATABASE cactidb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Пароль "password" в примере годится исключительно для учебных задач. Для боевого сервера стоит сгенерировать что-то сложное и длинное. Применяем изменения и выходим.
flush privileges;
exit;
Теперь импортируем данные о часовых поясах. Cacti активно работает с временем, и без этой таблицы корректные графики не построить.
mysql mysql < /usr/share/mysql/mysql_test_data_timezone.sql
Возвращаемся в консоль MariaDB и выдаём пользователю cacti_user доступ к таблице временных зон.
mysql
GRANT SELECT ON mysql.time_zone_name TO cacti_user@localhost;
Снова сбрасываем привилегии и выходим.
flush privileges;
exit;
Следующий шаг - главный в тонкой настройке базы. Без этих параметров Cacti формально заработает, но производительность будет плачевной, а при большом количестве устройств система начнёт захлёбываться.
vim /etc/mysql/mariadb.conf.d/50-server.cnf
Первым делом комментируем две строки, добавив решётку.
#collation-server = utf8mb4_general_ci
#character-set-server = utf8mb4
Затем в секцию [mariadb] добавляем целый блок настроек. Здесь выверенные значения для буферов, параллельных потоков ввода-вывода и размеров временных таблиц.
collation-server = utf8mb4_unicode_ci
character-set-server=utf8mb4
max_heap_table_size = 128M
tmp_table_size = 128M
join_buffer_size = 128M
innodb_file_format = Barracuda
innodb_large_prefix = 1
innodb_buffer_pool_size = 1G
innodb_flush_log_at_timeout = 3
innodb_read_io_threads = 32
innodb_write_io_threads = 16
innodb_io_capacity = 5000
innodb_io_capacity_max = 10000
innodb_doublewrite = 0
Каждое значение здесь обдумано разработчиками Cacti специально под нагрузку, которую создаёт сборщик метрик. Трогать их без понимания последствий не стоит. После сохранения файла перезапускаем MariaDB.
systemctl restart mariadb
Развёртывание самого Cacti и связка всех компонентов в единую рабочую систему
Официальный сайт проекта хранит свежие релизы в удобном формате. Скачиваем архив прямо на сервер.
wget https://www.cacti.net/downloads/cacti-latest.tar.gz
Распаковываем.
tar -zxvf cacti-latest.tar.gz
Перемещаем распакованную папку в корень Apache под понятным именем.
mv cacti-1* /var/www/html/cacti
Теперь загружаем схему базы данных из SQL-дампа, который шёл вместе с архивом.
mysql cactidb < /var/www/html/cacti/cacti.sql
Осталось подсунуть Cacti реквизиты для подключения к базе. Редактируем основной конфиг.
cd /var/www/html/cacti/include/
vim config.php
Внутри ищем и приводим параметры подключения к такому виду.
$database_type = 'mysql';
$database_default = 'cactidb';
$database_hostname = 'localhost';
$database_username = 'cacti_user';
$database_password = 'password';
$database_port = '3306';
Теперь выставляем права на каталог, чтобы веб-сервер мог писать свои данные.
chown -R www-data:www-data /var/www/html/cacti/
chmod -R 775 /var/www/html/cacti/
Ключевой момент любой системы мониторинга - регулярный опрос устройств. За это отвечает cron. Открываем файл задания.
vim /etc/cron.d/cacti
И добавляем строку, которая раз в пять минут запускает сборщик метрик. Пять минут - золотая середина между детализацией и нагрузкой на сеть.
*/5 * * * * www-data php /var/www/html/cacti/poller.php > /dev/null 2>&1
Настройка виртуального хоста Apache и первый вход в веб-интерфейс мониторинга
Отдельный конфиг виртуального хоста - правило хорошего тона. Смешивать настройки Cacti с дефолтными параметрами Apache не стоит.
vim /etc/apache2/sites-available/cacti.conf
Содержимое файла получается объёмным. Здесь и алиас пути, и правила доступа, и набор флагов PHP, которые обеспечивают корректную работу старых и новых частей кода.
Alias /cacti /var/www/html/cacti
<Directory /var/www/html/cacti>
Options +FollowSymLinks
AllowOverride None
<IfVersion >= 2.3>
Require all granted
</IfVersion>
<IfVersion < 2.3>
Order Allow,Deny
Allow from all
</IfVersion>
AddType application/x-httpd-php .php
<IfModule mod_php.c>
php_flag magic_quotes_gpc Off
php_flag short_open_tag On
php_flag register_globals Off
php_flag register_argc_argv On
php_flag track_vars On
# this setting is necessary for some locales
php_value mbstring.func_overload 0
php_value include_path .
</IfModule>
DirectoryIndex index.php
</Directory>
Активируем виртуальный хост одной командой.
a2ensite cacti
Проверяем, что симлинк создался корректно.
ls -l /etc/apache2/sites-enabled/cacti.conf
Перезапуск Apache, и вся конструкция оживает.
systemctl restart apache2
Статус сервиса для спокойствия души.
systemctl status apache2
Если всё собрано правильно, в ответе будет заветное "active (running)". Теперь в браузере открывается адрес сервера.
http://your-server-ip/cacti
Дальше идёт классический мастер первого запуска. Логин и пароль по умолчанию одинаковые - admin. Первая же форма заставит сменить пароль, и это правильно. Затем нужно принять условия лицензии GPL, пройти проверку окружения, подтвердить права на директории, выбрать профиль по умолчанию и согласиться с установкой шаблонов. Каждый шаг сопровождается подробными пояснениями и подсветкой ошибок, если что-то настроено не так.
Этапы мастера укладываются в короткий список.
- Смена стандартного пароля администратора на собственный
- Согласие с лицензионным соглашением GPL
- Прохождение предустановочных проверок окружения
- Выбор типа установки, новый сервер или обновление
- Подтверждение прав на директории Cacti
- Проверка наличия и версий бинарных файлов
- Финальное подтверждение и запуск импорта шаблонов
По завершении мастера открывается дашборд. Сначала он пустой, потому что Cacti ещё не знает ни об одном устройстве. Добавление первого узла делается через меню, и там же выбирается шаблон, подходящий под железо. Через 10-15 минут после настройки опроса на графиках появляются первые линии. Момент, ради которого всё это и затевалось.
Что делать после установки и как превратить чистый Cacti в полноценный центр управления сетью
Свежеразвёрнутый Cacti напоминает пустой блокнот. Возможности безграничны, но писать пока нечего. Первое, что стоит сделать - добавить устройства. Маршрутизаторы, коммутаторы, серверы, принтеры, всё, что умеет отвечать по SNMP. Для каждого типа железа в комплекте идут готовые шаблоны, и в большинстве случаев ничего допиливать не придётся.
Второй важный шаг - настройка уведомлений. Просто смотреть графики недостаточно. Система мониторинга должна будить админа, когда что-то идёт не так. Для этого ставится плагин Thold, который умеет отслеживать пороговые значения и слать письма при превышении. Параллельно имеет смысл разобраться с пользователями и группами, если сервером пользуются несколько человек.
Отдельная история - резервное копирование. База Cacti растёт медленно, но зато её потеря означает потерю всей истории мониторинга. А история - самое ценное в таких системах. Тренд загрузки за полгода рассказывает больше, чем десяток мгновенных замеров. Настроить ежедневный дамп базы и архивирование каталога /var/www/html/cacti можно за пятнадцать минут, а пользы принесёт на годы вперёд.
По итогу на руках оказывается рабочий инструмент, который честно делает свою работу без капризов. Cacti не претендует на звание самой красивой системы мониторинга и не пытается заменить собой весь зоопарк инструментов эксплуатации. Зато делает то, ради чего создавался - показывает, что происходит в сети прямо сейчас и что происходило там неделю, месяц, год назад. Для большинства задач этого более чем достаточно.