Cacti — классическая система мониторинга, которая строит графики по данным SNMP и хранит их в RRD-файлах. Она не такая модная, как Grafana, зато годами работает на слабом железе и подходит для сети коммутаторов и ИБП. Ниже — установка, добавление устройства, настройка опроса и разбор типичных сбоев.
Что такое Cacti и как он работает
Cacti — веб-приложение на PHP, которое опрашивает устройства по SNMP, складывает числа в RRD-файлы и рисует по ним графики. В отличие от систем с метриками в базе, здесь каждая точка рассчитана заранее: RRD усредняет значения за час, день, неделю и год. Это экономит место, но «сырые» данные за прошлый месяц уже не достать.
Актуальная ветка — 1.2.x (на момент написания 1.2.31). Требования: PHP 8.2+, MariaDB 10.5+ или MySQL 8.0+, RRDtool 1.7+, net-snmp. Опрос выполняет процесс poller, который запускает cron; веб-интерфейс лишь настраивает шаблоны и показывает результат.
Движков опроса два: встроенный cmd.php на PHP и Spine на C. Spine быстрее в разы и практически обязателен, если устройств больше десятка.
Установка в Debian и Ubuntu
sudo apt update
sudo apt install cacti cacti-spine mariadb-server
sudo apt install snmp snmpd
Пакет создаст базу и пользователя, спросив пароль через dbconfig. Установка завершается в браузере по адресу http://адрес-сервера/cacti; логин admin, пароль нужно сменить сразу.
Проверьте, что службы поднялись, а poller отрабатывает вручную:
systemctl status mariadb apache2
sudo -u www-data php /usr/share/cacti/site/poller.php --force
Команда должна завершиться без ошибок и обновить файлы в /var/lib/cacti/rra.
Готовим SNMP на устройстве
На устройстве нужен агент net-snmp с доступом только на чтение. Минимальный /etc/snmp/snmpd.conf:
rocommunity monitoring 192.168.10.5
syslocation Server room
syscontact admin@example.org
agentaddress udp:161
Здесь monitoring — community, 192.168.10.5 — адрес сервера Cacti. В продакшене лучше SNMPv3: community передаётся открытым текстом. Проверка с сервера мониторинга:
snmpwalk -v2c -c monitoring 192.168.10.1 sysUpTime.0
snmpwalk -v3 -l authPriv -u cacti -a SHA -A 'authpass' -x AES -X 'privpass' 192.168.10.1 sysDescr.0
Если ответа нет, проверьте firewall (UDP 161), маршрут и интерфейс, который слушает snmpd. Таймаут в одну-две секунды на медленном канале — отдельная причина пустых графиков.
Добавляем устройство и графики
Console → Devices → Add. Укажите hostname или IP, версию SNMP, community, таймаут и число повторов. Сохраните и нажмите «Create Graphs for this Host»: Cacti предложит подходящие шаблоны. Для Linux обычно берут SNMP — Get Mounted Partitions и Interface — Traffic, для коммутаторов — Interface — Traffic и Cisco CPU.
Шаблоны — основа Cacti. Device Template задаёт набор graph и data templates, Data Template описывает OID и тип данных, Graph Template — оформление. Встроенные шаблоны не редактируйте: клонируйте копию, иначе обновление пакета затрёт изменения.
После создания графиков проверьте RRD-файл:
rrdtool info /var/lib/cacti/rra/host_traffic_in_8.rrd | head -20
rrdtool fetch /var/lib/cacti/rra/host_traffic_in_8.rrd AVERAGE -s -1h
Poller и настройка Spine
Cacti не опрашивает сеть сам: его запускает cron. В Debian готового задания нет — в /etc/cron.d/cacti лежит только закомментированный пример обновления CSRF-ключа. Добавьте строку сами, иначе графики останутся пустыми.
*/5 * * * * www-data php /usr/share/cacti/site/poller.php > /dev/null 2>&1
sudo -u www-data /usr/sbin/spine --conf=/etc/cacti-spine.conf
Интервал в cron должен совпадать с настройкой Poller, иначе графики будут с провалами.
Для Spine укажите путь к бинарнику в Settings → Paths (/usr/sbin/spine) и выберите его в Settings → Poller. Число процессов берите равным числу ядер, потоков на процесс — 10–15. Значения выше 50 вредят: устройства не успевают отвечать.
Диагностика типовых проблем
Пустые графики чаще всего означают, что данные не приходят. Смотрите логи /var/log/cacti/ и /var/log/apache2/error.log, затем проверяйте SNMP вручную тем же OID, который указан в шаблоне.
sudo tail -50 /var/log/cacti/poller-error.log
sudo grep -Ei 'timeout|unreachable|SNMP' /var/log/cacti/poller-error.log
sudo -u www-data php /usr/share/cacti/cli/rebuild_poller_cache.php
timedatectl
Отдельная история — неправильный OID в шаблоне. Сверьте его через snmpget: если счётчик отдаёт значение, а график пуст, проблема в типе данных или в интервале опроса.
snmpget -v2c -c monitoring 192.168.10.1 .1.3.6.1.2.1.2.2.1.10.3
rrdtool lastupdate /var/lib/cacti/rra/switch_gi1_8_traffic_in_1234.rrd
Рваные линии — признак таймаутов; «poller did not finish» — не хватает времени или процессов. Разъехавшееся время ломает графики сильнее, чем кажется, поэтому проверьте синхронизацию и часовой пояс.
Проверить скорость ответа устройства удобно обычным time:
time snmpwalk -v2c -c monitoring -t 2 -r 1 192.168.10.1 .1.3.6.1.2.1.2.2.1.10
Безопасность и резервные копии
Веб-интерфейс Cacti — административная панель, поэтому закройте его от внешней сети, включите HTTPS и заведите отдельного пользователя БД с правами только на базу cacti. Обновляйте ветку 1.2.x: в релизах регулярно закрывают уязвимости зависимостей.
mysqldump --single-transaction -u cacti -p cacti > /backup/cacti-$(date +%F).sql
sudo tar czf /backup/cacti-rra.tar.gz /var/lib/cacti/rra
База и RRD-файлы должны копироваться согласованно, иначе часть графиков после восстановления будет пустой. Простой вариант — остановить cron на время копирования.
Чек-лист
- Установлены cacti, cacti-spine,
RRDtoolи net-snmp. SNMPпроверен с сервера до каждого устройства.- Интервал
cronсовпадает с настройкой Poller. Spineвыбран и путь к бинарнику указан.- Настроены
HTTPSи ограничение доступа к панели. - Есть регулярный бэкап базы и каталога rra.
Итог
Cacti — не самый современный интерфейс, но надёжный рабочий инструмент для сетевого мониторинга. Он нетребователен к ресурсам, хорошо документирован и предсказуемо хранит историю. Если нужно решение «поставил и забыл» для десятков коммутаторов и серверов, связка Cacti и Spine остаётся практичным выбором.