Cacti - это open-source веб-приложение, система позволяет строить графики при помощи RRDtool. Cacti собирает статистические данные за определённые временные интервалы и позволяет отобразить их в графическом виде. Преимущественно используются стандартные шаблоны для отображения статистики по загрузке процессора, выделению оперативной памяти, количеству запущенных процессов, использованию входящего/исходящего трафика.
Устанавливать будем на примере Debian Stretch. В качестве веб-сервера будет Nginx, настроенный для работы по протоколу https://.
Будут использоваться:
Cacti - 1.1.36 (пакет с офф. сайта);
Spine - 1.1.36 (установка из исходников);
MariaDB - репозиторий,
PHP-7.0-FPM - +
Nginx - дистрибутива.
Обновляем систему и пакеты:
Перед обновлением добавить "non-free" в "/etc/apt/sources.list" для пакета snmp-mibs-downloader.
# apt-get update && apt-get upgrade
Устанавливаем необходимые пакеты:
- PHP-7.0-FPM
# apt-get install php7.0-fpm php7.0-mcrypt php7.0-mysql php7.0-gd php7.0-mbstring php7.0-xml php7.0-json php7.0-opcache php7.0-snmp php7.0-ldap php7.0-gmp
- MARIA-DB
# apt-get install mariadb-server
- NGINX
# apt-get install nginx
- CACTI
# apt-get install snmp snmpd rrdtool snmp-mibs-downloader
- OTHER
# apt-get install net-tools sudo
PHP-7.0-FPM:
Настраиваем timezone для php7.0-fpm:
Требуется для Cacti, иначе установка не завершится.
# nano /etc/php/7.0/fpm/php.ini
date.timezone = Europe/Moscow
# /etc/init.d/php7.0-fpm restart
Настраиваем пользователя и группу для pool.d php7.0-fpm:
# nano /etc/php/7.0/fpm/pool.d/www.conf
user = cacti
group = cacti
# /etc/init.d/php7.0-fpm restart
User and Catalog's:
Создаем пользователя:
# useradd cacti -b /home/ -m -U -s /bin/false
- задаем пароль
# passwd cacti (passuser)
Создаем необходимые каталоги:
# mkdir -p -m 775 /home/cacti/www/{cacti.mtvsite.ru,logs_cacti.mtvsite.ru}
- Предоставляем пользователю cacti права на них:
# chown -R cacti:cacti /home/cacti/www
- Предоставим Nginx, доступ в домашнюю директорию пользователя cacti:
Добавив пользователя "www-data" в группу "cacti".
# usermod -a -G cacti www-data - Добавить пользователя www-data в группу cacti.
# gpasswd -d www-data cacti - Удалить пользователя www-data из группы cacti.
# id www-data - Проверить в какие группы входит пользователь www-data.
MySQL:
Закрепляем пароль за пользователем root: [link]
# mysql -h localhost
use mysql;
update user set plugin='' where user='root';
flush privileges;
quit;
Настройка MariaDB:
# mysql_secure_installation (rootuserpass)
- проверим,
# mysql -h localhost -u root
# mysql -h localhost -u root –p
Cоздаем пользователя и бд:
- Логинимся к БД:
# mysql -u root -p(rootuserpass)
- Создаем пользователя:
MariaDB> create user 'cacti'@'localhost' identified by 'cactiuserpass';
- Создаем БД:
MariaDB> create database `cacti` character set = 'utf8';
- Присваиваем права:
MariaDB> GRANT ALL PRIVILEGES ON `cacti`.* to `cacti`@localhost;
MariaDB> FLUSH PRIVILEGES;
MariaDB> quit;
MySQL TimeZone database:
Требуется для установки Cacti.
# mysql -u root -p(rootuserpass) mysql < /usr/share/mysql/mysql_test_data_timezone.sql
# mysql -u root -p(rootuserpass) -e 'grant select on mysql.time_zone_name to cacti@localhost'
Настраиваем server mariadb:
Минимальные требования для установки Cacti.
# nano /etc/mysql/mariadb.conf.d/50-server.cnf
# Cacti
max_heap_table_size = 128M
tmp_table_size = 64M
join_buffer_size = 64M
innodb_buffer_pool_size = 512M
innodb_doublewrite = OFF
innodb_additional_mem_pool_size = 80M
innodb_flush_log_at_timeout = 3
innodb_read_io_threads = 32
innodb_write_io_threads = 16
# /etc/init.d/mysql restart
Cacti:
Установка Cacti-Spine:
# apt-get install build-essential dos2unix dh-autoreconf help2man libssl-dev libmysql++-dev libmariadb-dev libmariadbclient-dev librrds-perl libsnmp-dev
# wget -P /tmp https://www.cacti.net/downloads/spine/cacti-spine-1.1.36.tar.gz
# tar -xf /tmp/cacti-spine-1.1.36.tar.gz -C /home/cacti/www/cacti.mtvsite.ru
# cd /home/cacti/www/cacti.mtvsite.ru/cacti-spine-1.1.36
- Собираем,
# ./bootstrap
# ./configure
# make
# make install
- Устанавливаем права,
# chown root:root /usr/local/spine/bin/spine
# chmod +s /usr/local/spine/bin/spine
- Настраиваем конфигурационный файл,
# nano /usr/local/spine/etc/spine.conf
DB_Host localhost
DB_Database cacti
DB_User cacti
DB_Pass cactiuserpass
DB_Port 3306
DB_PreG 0
Cacti:
# wget -P /tmp https://www.cacti.net/downloads/cacti-1.1.36.tar.gz
# tar -xf /tmp/cacti-1.1.36.tar.gz -C /home/cacti/www/cacti.mtvsite.ru
# cd /home/cacti/www/cacti.mtvsite.ru/cacti-1.1.36
Импортируем необходимые таблицы:
# mysql -u cacti -pcactiuserpass cacti < cacti.sql
Настраиваем когфигурационный файл cacti:
# nano include/config.php
$database_type = 'mysql';
$database_default = 'cacti';
$database_hostname = 'localhost';
$database_username = 'cacti';
$database_password = 'cactiuserpass';
$database_port = '3306';
$database_ssl = false;
$url_path = '/';
Web-Server:
OpenSSL:
# mkdir /etc/ssl/nginx
# openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -keyout /etc/ssl/nginx/cacti.mtvsite.ru.key -out /etc/ssl/nginx/cacti.mtvsite.ru.crt
Генерируем ключ Диффи — Хеллмана:
# openssl dhparam -out /etc/ssl/nginx/dhparam_c.pem 2048
Nginx:
Для работы по протоколу "https://".
# rm /etc/nginx/sites-enabled/default
- и приступаем к настройке нашего конфига:
# nano /etc/nginx/sites-available/cacti.mtvsite.ru
server {
listen 80;
server_name cacti.mtvsite.ru;
rewrite ^ https://$http_host$request_uri? permanent;
}
server {
listen 443 ssl http2;
server_name cacti.mtvsite.ru;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';
add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options “DENY”;
add_header X-Content-Type-Options nosniff;
#add_header Content-Security-Policy "default-src 'self';";
ssl on;
ssl_certificate /etc/ssl/nginx/cacti.mtvsite.ru.crt;
ssl_certificate_key /etc/ssl/nginx/cacti.mtvsite.ru.key;
#ssl_trusted_certificate /etc/letsencrypt/live/cacti.mtvsite.ru/chain.pem; # Если включён ssl_stapling;
ssl_dhparam /etc/ssl/nginx/dhparam_c.pem;
access_log off;
error_log off;
root /home/cacti/www/cacti.mtvsite.ru/cacti-1.1.36;
index index.php;
location ~ \.php {
fastcgi_param HTTPS on;
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTP_PROXY "";
fastcgi_index index.php;
include fastcgi_params;
}
}
Настраиваем nginx.conf: [GitHub_Gist]
Параметры "limit_conn_zone" и "limit_req_zone" не используются, # comment.
# nano /etc/nginx/nginx.conf
Включаем наш конфиг Nginx созданием симлинка:
# ln -s /etc/nginx/sites-available/cacti.mtvsite.ru /etc/nginx/sites-enabled/cacti.mtvsite.ru
# /etc/init.d/nginx restart
SNMP Service:
# nano /etc/snmp/snmp.conf
#mibs :
# nano /etc/snmp/snmpd.conf
agentAddress udp:127.0.0.1:161
#agentAddress udp:161,udp6:[::1]:161
rocommunity snmp_string localhost
rocommunity snmp_string 192.168.5.0/24
sysLocation Sitting on the Dock of the Bay
sysContact Me <me@example.org>
# /etc/init.d/snmpd restart
# systemctl status snmpd.service
Устанавливаем права на папки и файлы:
-type f применить после установки?
- пользователь и группа:
# chown -R cacti:cacti /home/cacti/www/
# cd /home/cacti
- for directories:
# find . -type d -exec chmod 0710 {} \;
- for files:
# find . -type f -exec chmod 0644 {} \;
END:
Завершающий этап:
Краткий перечень настроек.
https://cacti.mtvsite.ru/
admin:admin
- Spine Binary File Location: The path to Spine binary.
/usr/local/spine/bin/spine
- Console -> Configuration -> Settings -> Poller
spine
- Console -> Configuration -> Settings -> Paths and update Cacti-Spine
/usr/local/spine/etc/spine.conf
- Console -> Management -> Devices and hit on + icon
SNMP Community:
snmp_string
Рисуем RRD графики:
# sudo -u cacti /usr/bin/php /home/cacti/www/cacti.mtvsite.ru/cacti-1.1.36/poller.php > /home/cacti/www/logs_cacti.mtvsite.ru/cron.log 2>&1
Создаем в планировщике задание:
# crontab –e
*/5 * * * *
При написании мне помогла очень эта статья.