Недавно ковырялся в закромах одного старого серверного шкафа и наткнулся на древний, покрытый пылью коммутатор, который верой и правдой служил компании лет десять. И так мне захотелось увидеть классические, до боли знакомые графики сетевой загрузки — те самые, аккуратные, цветные, без лишнего «модного» хипстерского глянца. В голове сразу щелкнуло: нужно ставить Cacti.
Для тех, кто провёл последние годы исключительно в компании Prometheus и Grafana, напомню: Cacti — это легендарный латунный манометр из эпохи зарождения сисадминства. Он работает в связке с неубиваемым движком RRDtool и собирает метрики по протоколу SNMP. Ему не нужны гигабайты оперативной памяти и сложные кластеры. Он просто берёт и рисует графики. Железно. Надёжно.
Но когда я попытался развернуть его по первой попавшейся в поиске инструкции, мой виртуальный котёл чуть не взорвался от давления. Топовые статьи в сети безнадёжно устарели: они застряли во временах Ubuntu 20.04, мертвого PHP 7.4 и древнего синтаксиса баз данных. Попытка скопировать те команды на современную Ubuntu гарантированно приведёт к куче ошибок депрекации.
Мы в инженерном бюро ROADIT не любим бракованные чертежи. Поэтому ловите полностью переработанное, свежее руководство по сборке этого механизма на базе PHP 8.3 и актуальной MariaDB. Погнали!
Важное примечание: Все манипуляции проводим под учетной записью с правами sudo. Вытирайте мазут с рук и открывайте терминал.
Часть I. Проверяем тягу и засыпаем уголь
Первым делом нужно обновить несущие конструкции нашей операционной системы, чтобы никакие старые пакеты не заклинили шестерни:
sudo apt update && sudo apt upgrade -y
Теперь установим «паровой телеграф» — протокол SNMP, сам движок отрисовки RRDtool и сопутствующие инженерные библиотеки:
sudo apt install snmp php-snmp rrdtool librrds-perl unzip curl git gnupg2 -y
Часть II. Собираем силовой привод (Apache + PHP 8.3)
Наш будущий пульт управления требует веб-сервер и актуальный интерпретатор кода. В современной Ubuntu нас ждёт стабильный PHP 8.3. Закачиваем пакеты в топку:
sudo apt install apache2 mariadb-server php php-mysql libapache2-mod-php php-xml php-ldap php-mbstring php-gd php-gmp php-intl -y
А теперь — важнейший нюанс, о котором часто забывают новички. Из коробки PHP настроен как экономная карманная грелка, а нам нужен промышленный компрессор. Если у вас в сети больше пяти коммутаторов, Cacti моментально захлебнется без выделенной памяти.
Открываем главный регулировочный клапан конфигурации для веб-сервера:
sudo nano /etc/php/8.3/apache2/php.ini
Ищем через Ctrl+W следующие строки и приводим их к правильным инженерным значениям:
memory_limit = 512M
max_execution_time = 60
date.timezone = Europe/Moscow
Затем открываем точно такой же файл, но для консольного режима (CLI). Если этого не сделать, наш системный планировщик просто не сможет прокрутить тяжелые шестеренки сбора метрик:
sudo nano /etc/php/8.3/cli/php.ini
Выставляем там ровно те же параметры. После чего даем команду Apache перенаправить потоки пара:
sudo systemctl restart apache2
Часть III. Настройка гидравлики (База данных MariaDB)
База данных — это наше гидравлическое хранилище. И здесь кроется главная мина старых мануалов. Если вы пропишете туда параметры пятилетней давности вроде innodb_file_format = Barracuda, MariaDB даже не запустится — эти опции давно исключены из движка.
Открываем чертеж конфигурации СУБД:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Строго внутри секции [mysqld] добавляем или изменяем настройки. Это заставит базу данных работать на максимальных оборотах:
collation-server = utf8mb4_unicode_ci
max_heap_table_size = 128M
tmp_table_size = 64M
join_buffer_size = 64M
innodb_buffer_pool_size = 512M
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 = OFF
Перезапускаем поршни СУБД:
sudo systemctl restart mariadb
Теперь заходим в консоль управления базой:
sudo mariadb
Создаем рабочую емкость, пользователя и выдаем ему именной ключ (пароль MySteamPassword меняйте на свой, более сложный):
CREATE DATABASE cactidb;
GRANT ALL ON cactidb.* TO cactiuser@localhost IDENTIFIED BY 'MySteamPassword';
FLUSH PRIVILEGES;
EXIT;
Старые статьи предлагают импортировать файл mysql_test_data_timezone.sql. Друзья, это тестовая пустышка, из-за которой ваши графики потом будут показывать время на Марсе, а сам Cacti выдаст критическую ошибку. Нам нужны реальные временные зоны вашей ОС. Закачиваем их напрямую:
mariadb-tzinfo-to-sql /usr/share/zoneinfo | mariadb -u root mysql
Снова забегаем в MariaDB на секунду, чтобы дать права нашему пользователю на чтение этих зон:
sudo mariadb
GRANT SELECT ON mysql.time_zone_name TO cactiuser@localhost;
FLUSH PRIVILEGES;
EXIT;
Часть IV. Сборка и смазка механизмов Cacti
Скачиваем чистейший дистиллированный релиз Cacti с официального сайта проекта:
wget https://www.cacti.net/downloads/cacti-latest.tar.gz
tar -zxvf cacti-latest.tar.gz
sudo mv cacti-1* /var/www/html/cacti
Заливаем базовую структуру таблиц в наш подготовленный резервуар:
mariadb -u cactiuser -p cactidb < /var/www/html/cacti/cacti.sql
(Система вежливо попросит секретный шифр — вводите ваш MySteamPassword)
Теперь подружим скрипты Cacti с базой данных. Создаем рабочий конфиг из шаблона:
sudo cp /var/www/html/cacti/include/config.php.dist /var/www/html/cacti/include/config.php
sudo nano /var/www/html/cacti/include/config.php
Приводим параметры к нашему виду:
$database_type = 'mysql';
$database_default = 'cactidb';
$database_hostname = 'localhost'; // Маленький лайфхак: если база закапризничает, замените на 127.0.0.1
$database_username = 'cactiuser';
$database_password = 'MySteamPassword';
$database_port = '3306';
Создаем пустой журнал для системных логов и отдаем все права пользователю www-data (именно под его именем трудится Apache):
sudo touch /var/www/html/cacti/log/cacti.log
sudo chown -R www-data:www-data /var/www/html/cacti/
sudo chmod -R 775 /var/www/html/cacti/
Чтобы графики обновлялись каждые пять минут, нам нужен неустанный механический маятник — планировщик задач. Создаем задание для cron:
sudo nano /etc/cron.d/cacti
Записываем туда строчку автоматического запуска поллера:
*/5 * * * * www-data php /var/www/html/cacti/poller.php > /dev/null 2>&1
Часть V. Запуск парораспределителя Apache
Осталось направить поток веб-трафика в нужный сектор. Создаем файл конфигурации виртуального хоста:
sudo nano /etc/apache2/sites-available/cacti.conf
Наполняем его актуальным содержимым:
Alias /cacti /var/www/html/cacti
<Directory /var/www/html/cacti>
Options +FollowSymLinks
AllowOverride None
Require all granted
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
php_value mbstring.func_overload 0
php_value include_path .
</IfModule>
DirectoryIndex index.php
</Directory>
Вводим шестерни в зацепление и перезапускаем сервер:
sudo a2ensite cacti
sudo systemctl restart apache2
Часть VI. Первый запуск главного пульта
Всё готово! Открывайте браузер и переходите по адресу: http://IP_ВАШЕГО_СЕРВЕРА/cacti.
Перед вами появится строгая медная панель авторизации. Заводские настройки по умолчанию:
- Логин: admin
- Пароль: admin
Система мгновенно потребует изменить этот пароль на ваш личный сложный шифр. После этого запустится интуитивный мастер установки. Просто кликайте «Далее» (Next). На этапе проверок вы увидите, что все индикаторы горят успокаивающим зеленым цветом — это результат нашей точной ручной калибровки PHP и MariaDB.
Как только мастер завершит работу, вы попадете в святая святых — панель управления устройствами. Добавляйте свои сервера, коммутаторы по SNMP и наслаждайтесь бессмертной классикой сетевого мониторинга.
Вывод
Cacti — это отличный пример того, как софт «старой школы» может исправно служить в современных реалиях, если правильно подойти к его обслуживанию. Никакого лишнего оверхеда, только чистая польза и суровые графики.
Понравился мануал? Подписывайтесь на наш канал в Дзене — мы регулярно пересобираем сложные IT-механизмы, чистим конфиги от ржавчины и делимся боевым опытом администрирования.
→ Оригинал статьи и другие шпаргалки на roadit.ru
⚙️ Паровой конденсатор знаний
Эта статья — лишь капля в нашем резервуаре.
Если хотите освоить системное администрирование до уровня старшего механика, загляните в ROADIT — там собраны полные шпаргалки, Roadmap’ы и обзоры софта без воды.[👉 Перейти в машинной отделение]
📡 И подписывайтесь на наш Дзен, чтобы не пропустить новые инструкции.