Paso 1. Instalar paquetes.
Después de seguir los pasos de la entrada Instalar Nginx, PHP y mariadb procedemos a instalar cacti. Lo primero que haremos será instalar los paquetes requeridos por cacti. Tened en cuenta que todo lo haremos como usuario root.
~# apt update
~# apt install wget php-gd php-gmp php-ldap php-mbstring php-simplexml php-xml php-snmp rrdtool
Paso 2. Crear base de datos
Una vez todo instalado crearemos la base de datos. Para ello entramos en nuestro cliente mysql y creamos la base de datos con el nombre que deseemos y un usuario con privilegios sobre dicha base de datos. (En este caso usamos como nombre para la base de datos «cacti» y usuario «cactiuser»):
~# mysql
mysql> CREATE DATABASE cacti;
mysql> GRANT ALL ON cacti.* TO 'cactiuser'@'localhost' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
Ahora vamos a crear la tabla de zonas horarias (time zone) que viene incluida en un script dentro de mysql y le daremos permiso de lectura (SELECT) a nuestro nuevo usuario (cactiuser).
~# mysql -u root -p mysql < /usr/share/mysql/mysql_test_data_timezone.sql
~# mysql
mysql> GRANT SELECT ON mysql.time_zone_name TO cactiuser@localhost;
mysql> ALTER DATABASE cacti CHARACTER SET='utf8mb4' COLLATE='utf8mb4_unicode_ci';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
Paso 3. Configurar Base de datos
Lo siguiente será configurar mysql con los requisitos que nos pide cacti. Para ello modificaremos y añadiremos las lineas del fichero de configuración de mysql en la sección [mysqld].
~# vim /etc/mysql/mariadb.conf.d/50-server.cnf
Las lineas son las siguientes:
[mysqld]
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
max_heap_table_size = 128M
tmp_table_size = 64M
join_buffer_size = 128M
innodb_file_format = Barracuda
innodb_large_prefix = 1
innodb_buffer_pool_size = 1GB
innodb_buffer_pool_instances = 10
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
Después de estos dos pasos reiniciamos mysql y pasamos a configurar php.
~# /etc/init.d/mysql restart
Paso 4. Configurar PHP
En este paso modificaremos los ficheros de configuración. Configuraremos la zona horario, tiempo máximo de ejecución de un fichero y el límite de memoria que nos exige cacti. Vamos a cambiar dos fichero, pero vamos a realizar los mismos cambios. (En este caso tenemos instalada la version de PHP FPM 7.3, si fuese otra versión deberíamos de cambiar la dirección del fichero)
~# vim /etc/php/7.3/fpm/php.ini
~# vim /etc/php/7.3/cli/php.ini
FPM es el manejador de PHP que usará NGINX y CLI es PHP en consola de comandos.
En la sección [PHP] descomentamos las entradas max_execution_time y memory_limit y le asignamos los valores 70 y 512M respectivamente. Y en la sección [DATE] descomentamos date.timezone e indicamos nuestra zona horaria (Europe/Madrid en nuestro caso).
[PHP]
max_execution_time = 70
memory_limit = 512M
[DATE]
date.timezone = Europe/Madrid
Para terminar el paso 4 reiniciamos PHP:
~# /etc/init.d/php7.3-fpm restart
Paso 5. Crear VirtualHost en NGINX
Vamos a borrar el VHost por defecto y luego crear uno nuevo para cacti de la siguiente manera:
~# rm /etc/nginx/sites-enabled/default
~# vim /etc/nginx/conf.d/cacticonfig.conf
Y en el fichero añadimos:
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php;
access_log /var/log/cactiacess.log;
error_log /var/log/cacti.log;
charset utf-8;
gzip on;
gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location /api/v0 {
try_files $uri $uri/ /api_v0.php?$query_string;
}
location ~ .php {
include fastcgi.conf;
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}
location ~ /.ht {
deny all;
}
}
Tened en cuenta que estamos usando php7.3-fpm. En el caso de usar otro habría que cambiarlo en la línea número 21.
Y para terminar reiniciamos NGINX:
/etc/init.d/nginx restart
Paso 6. Instalar CACTI
Lo primero que haremos será descargar la última versión de CACTI. Una vez descargado lo descomprimimos, lo pasamos al directorio del nuevo VirtualHost y le asignamos como propietario el servidor web (www-data).
~# wget https://www.cacti.net/downloads/cacti-latest.tar.gz
~# tar -zxvf cacti-latest.tar.gz
~# mv cacti-1* /var/www/html/cacti
~# chown -R www-data:www-data /var/www/html/
Lo siguiente será crear la estructura de la base de datos. Para ello importamos un script que viene incluido en cacti.
~# mysql -u root -p cacti < /var/www/html/cacti/cacti.sql
Y por último configuramos cacti para que se pueda conectar a la base de datos. Para ello modificamos el fichero de configuración añadiendo los datos que usamos en el Paso 2. Crear Base de Datos.
~# vim /var/www/html/cacti/include/config.php
Y añadimos los siguientes datos:
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "password";
$database_port = "3306";
$database_ssl = false;
Paso 7. Automatizar poller.
El poller es el encargado de recolectar los datos. Para ello tiene que ejecutarse cada cierto tiempo, para así recopilar datos en el tiempo. En el caso de cacti, es recomendable que el poller se ejecute cada 5 minutos y por eso vamos a crear una entrada el demonio CRON de nuestro servidor.
~# vim /etc/cron.d/cacti
Y añadimos:
*/5 * * * * www-data php /var/www/html/cacti/poller.php > /dev/null 2>&1
Paso 8. Asistente de instalación WEB
Ahora vamos a abrir un navegador en nuestro PC y nos conectaremos a nuestro servidor poniendo de URL la dirección IP del servidor Cacti. Nos pedirá usuario y contraseña, que por defecto son admin y admin respectivamente, después de conectarnos nos pedirá cambiar la contraseña y empezará un asistente de configuración, el cual comprueba que todos los pasos anteriores estén realizados correctamente.
Que significa el /5 del apartado 7
Lo que significa es que se ejecuta el script los minutos divisibles por 5, esto sería cada 5 minutos.