⚙️ Паровой сервер ROADIT

Запуск цифрового манометра: Установка системы мониторинга Cacti на Ubuntu

Протестировано на:

Ubuntu: 24.04

Приветствую вас, почтенные инженеры и смотрители серверных маховиков! Вытирайте мазут с рук, присаживайтесь поближе к паровому терминалу. Сегодня мы снимем толстый слой ржавчины со старого, но чертовски надежного инструмента контроля — Cacti.

В старых мануалах времён Ubuntu 20.04 и ветхого PHP 7.4 чертежи давно покрылись плесенью. Пытаться запустить их сегодня — всё равно что подавать перегретый пар в треснувший медный цилиндр: оглушительно бабахнет ошибками депрекации. Мы в ROADIT не любим утечек давления, поэтому полностью пересоберём этот агрегат под современные реалии: Ubuntu 24.04 LTS и мощный компрессор PHP 8.3.

Cacti — это, по сути, роскошный латунный интерфейс для сурового механического самописца RRDtool. Вместо того чтобы вручную ковырять базы данных, он использует протокол SNMP (наш верный паровой телеграф) для сбора метрик с маршрутизаторов, коммутаторов и серверов, превращая сухие цифры в красивые графики давления, температуры ЦП и загрузки сетевых каналов. Cacti требует PHP 8.1+, MariaDB 5.6+ и RRDtool 1.4+ — всё это есть в свежей Ubuntu “из коробки”.



Шаг 1. Продувка системы и подготовка котлов

Прежде чем возводить надстройку, убедимся, что несущая конструкция нашей ОС не имеет дефектов. Обновим системные пакеты до актуального состояния:

sudo apt update && sudo apt upgrade -y

Теперь установим базовые узлы и механизмы, без которых наш телеграф не сможет декодировать сигналы. Нам понадобятся сам RRDtool, утилиты SNMP и важные библиотеки:

sudo apt install snmp php-snmp rrdtool librrds-perl unzip curl git gnupg2 -y

Шаг 2. Сборка приводного двигателя (Установка LAMP и тюнинг PHP)

Наш манометр требует прочного фундамента в виде связки Apache, MariaDB и свежего PHP. В репозиториях Ubuntu 24.04 нас ждет стабильный 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 php-common -y

⚡ Важно

Внимание, неочевидный нюанс! По умолчанию PHP настроен как экономная карманная грелка. Если у вас разветвленная сеть коммутаторов, Cacti быстро захлебнется. Нам нужно поддать давления в настройках. Открываем главный регулировочный клапан для Apache:

sudo nano /etc/php/8.3/apache2/php.ini

И меняем параметры на следующие (используйте поиск Ctrl+W в nano):

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

Шаг 3. Калибровка гидравлики (Настройка MariaDB)

База данных — это гидравлический аккумулятор Cacti. Старые инструкции предлагают конфигурацию, которая в современной MariaDB вызовет критический сбой, так как параметры вроде innodb_file_format давно сданы в утиль.

Открываем конфигурационный файл СУБД:

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

Перезапускаем службу, чтобы поршни встали в новые пазы:

sudo systemctl restart mariadb

Теперь заходим в святая святых базы данных для создания рабочих емкостей:

sudo mariadb

Внутри консоли инициализируем базу, создаем инженера-пользователя и выдаем ему разводной ключ (пароль StrongSteamPassword замените на свой):

CREATE DATABASE cactidb;
GRANT ALL ON cactidb.* TO cactiuser@localhost IDENTIFIED BY 'StrongSteamPassword';
FLUSH PRIVILEGES;
EXIT;

Главный капкан старых мануалов! Раньше авторы предлагали импортировать файл mysql_test_data_timezone.sql. Это фатальная ошибка — это тестовая пустышка! Cacti требует реальные часовые пояса вашей системы, иначе графики будут показывать время на Марсе. Импортируем настоящие данные из недр Linux:

mariadb-tzinfo-to-sql /usr/share/zoneinfo | mariadb -u root mysql

Снова заходим в консоль базы и даем права Cacti на чтение этих таблиц:

sudo mariadb
GRANT SELECT ON mysql.time_zone_name TO cactiuser@localhost;
FLUSH PRIVILEGES;
EXIT;

Шаг 4. Монтаж шестерней самого 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

(Система потребует ввести созданный вами ранее StrongSteamPassword)

Создаем рабочий конфигурационный файл из заводского шаблона:

sudo cp /var/www/html/cacti/include/config.php.dist /var/www/html/cacti/include/config.php

Прописываем реквизиты доступа к нашей гидравлической системе:

$database_type     = 'mysql';
$database_default  = 'cactidb';
$database_hostname = 'localhost';
$database_username = 'cactiuser';
$database_password = 'StrongSteamPassword';
$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/

Чтобы манометр обновлял показания каждые 5 минут, нам нужен неустанный маятник — планировщик cron. Создаем задачу:

sudo nano /etc/cron.d/cacti

Вносим туда строчку автоматического запуска поллера:

*/5 * * * * www-data php /var/www/html/cacti/poller.php > /dev/null 2>&1

⚡ Важно

Начиная с Cacti 1.2.16, можно использовать systemd вместо cron. Если предпочитаете systemd — обратитесь к официальной документации, но классический cron-способ остаётся полностью рабочим.


Шаг 5. Настройка парораспределителя (Apache)

Остался последний штрих в железной части — объяснить Apache, как правильно подавать пар в кабину управления Cacti. Создаем файл виртуального хоста:

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>

⚡ Важно

В современных версиях Apache и PHP многие из этих php_flag уже устарели или игнорируются. Мы оставляем их для обратной совместимости, но основной упор делаем на настройки в php.ini

Вводим конфигурацию в зацепление и перезапускаем сервер:

sudo a2ensite cacti
sudo systemctl restart apache2

Шаг 6. Запуск главного пульта управления

Открывайте ваш любимый навигатор по сети и вбивайте адрес: http://ip-адрес-вашего-сервера/cacti.

Перед вами появится медная табличка авторизации. Ключи по умолчанию:

  • Логин: admin
  • Пароль: admin

Система тут же заставит вас сменить этот заводской дефект безопасности на надежный шифр. Далее запустится мастер инсталляции. Нажимайте «Далее» (Next), подтверждая, что все наши манометры, PHP-модули и пути к RRDtool светятся зеленым цветом.

Как только процесс завершится, перед вами раскинется величественная контрольная панель Cacti. Подключайте к ней свои паровые машины, коммутаторы и роутеры по SNMP, и пусть ваши графики никогда не зашкаливают!


Диагностика и устранение неисправностей

Графики не строятся

Проверьте, работает ли поллер:

sudo -u www-data php /var/www/html/cacti/poller.php

Смотрите логи:

tail -f /var/www/html/cacti/log/cacti.log

Ошибка подключения к БД

Проверьте доступность MariaDB:

sudo systemctl status mariadb
sudo mariadb -u cactiuser -p -e "SHOW DATABASES;"

Страница Cacti пустая (белый экран)

Включите отображение ошибок PHP:

sudo nano /etc/php/8.3/apache2/php.ini

Установите:

display_errors = On
error_reporting = E_ALL

Перезапустите Apache и посмотрите на ошибки.

Cron не запускает поллер

Проверьте, выполняется ли задача:

sudo grep poller /var/log/syslog

Убедитесь, что путь к PHP в cron корректен:

which php
# /usr/bin/php

Бонус: ускоряем сбор данных со Spine

Cacti поставляется с поллером на PHP, но для серьёзных нагрузок есть Spine — высокопроизводительный поллер на C. Установка:

sudo apt install cacti-spine -y

Настройка Spine:

sudo cp /etc/spine.conf.dist /etc/spine.conf
sudo nano /etc/spine.conf

Пропишите те же параметры БД, что и в config.php:

DB_Host       localhost
DB_Database   cactidb
DB_User       cactiuser
DB_Pass       StrongSteamPassword
DB_Port       3306

В веб-интерфейсе Cacti зайдите в Console → Configuration → Settings → Poller и выберите Spine вместо cmd.php.



⚙️ Машинное отделение ROADIT благодарит за прочтение.
Больше команд, шпаргалок и обзоров — на roadit.ru и в нашем Телеграф-канале.
📋 Все команды

Оставьте комментарий