Instalando Cacti en Debian 9 (Stretch)

Cacti (proyecto) es una herramienta de monitoreo gráfica que obtiene sus datos principalmente por SNMP, permitiéndonos tener una visión general de los recursos de un equipo. Principalmente, es utilizado como monitor de trafico de red, pero se puede graficar cualquier tipo de recurso del cual se entreguen estadísticas por SNMP.

Hoy instalaremos esta aplicación en Debian 9 (Stretch), pero cambiando la forma de obtener los paquetes de los repositorios, puede aplicar a cualquier sistema operativo. Instalaremos también su propio poller de datos, Spine, que si bien estará sobrado para la mayoría de los casos (ya que el de PHP funciona sin problemas para pocos hosts).

Como requerimientos previos, instalaremos Apache, PHP7 y MySQL desde los repositorios, si ya tienen estas aplicaciones instaladas, ignoren los siguientes pasos y vayan directo a las instalaciones de Spine y Cacti. Los programas prioncipales, los compilaremos desde sus fuentes ya que los repositorios estan bastante atras en lo que versiones se refiere.

Instalando Apache + PHP y MySQL

Como siempre, antes de comenzar, nos aseguraremos de tener un sistema con paquetes y repositorios al día.

apt-get update
apt-get upgrade

Comenzaremos instalando Apache y PHP, para eso ejecutaremos lo siguiente

apt install apache2 libapache2-mod-php7.0 php7.0 php7.0-snmp php7.0-xml php7.0-mbstring php7.0-json php7.0-gd php7.0-gmp php7.0-zip php7.0-ldap php7.0-mcrypt

El único ajuste que deberemos hacer, es configurar la zona horaria en PHP, para eso, ejecutaremos la sentencia siguiente, ajustando nuestra zona horaria según los datos del link(Recuerden escapar con «\» las barras), en el ejemplo, usaremos Montevideo.

sed -i -e 's/\;date.timezone\ \=/date.timezone\ \=\ America\/Montevideo/g' /etc/php/7.0/apache2/php.ini

Continuaremos con la base de datos y el plugin para manejarla de PHP.

apt-get install mysql-server php-mysql

En versiones nuevas de MySQL, el plugin que maneja el usuario root, nos autenticara sin contraseña si estamos logueados con el mismo usuario en el sistema y no queremos eso, lo ajustaremos para que use su propio esquema de autenticación y aseguraremos la instalación.
Cambiaremos la contraseña por una definida por nosotros y aceptaremos el default de los demás ajustes propuestos por el script.

mysql mysql -e "update user set plugin='' where user='root';flush privileges;"
mysql_secure_installation

Para continuar, haremos los ajustes que requiere Cacti para funcionar, cargaremos datos de test en la tabla de zona horaria de la base y también crearemos la base y el usuario de acceso para la aplicación.
Para el ejemplo, llamaremos «cacti» a la base, el usuario sera «cactidb» y su contraseña «PASSWORD_CACTIDB» y utilizaremos la contraseña generada en el paso anterior para ejecutar las sentencias siguientes.

mysql -u root -p -e "create database cacti;grant all on cacti.* to 'cactidb'@'localhost' identified by 'PASSWORD_CACTIDB';flush privileges;"
mysql -u root -p mysql < /usr/share/mysql/mysql_test_data_timezone.sql
mysql -u root -p -e "grant select on mysql.time_zone_name to [email protected];flush privileges;"

Editaremos ahora el archivo de configuración de la base, para tunear algunos de los parámetros por defecto y ajustarlos a los requerimientos

nano /etc/mysql/mariadb.conf.d/50-server.cnf

y agregaremos luego del bloque de «Fine Tunning» los siguientes parametros

max_heap_table_size              = 100M
tmp_table_size                   = 64M
join_buffer_size                 = 64M
innodb_buffer_pool_size          = 490M
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

Y por ultimo reiniciaremos los dos servicios que instalamos

service mysql restart
service apache2 restart

Instalando Spine

Instalaremos ahora el poller Spine para ejecutar las consultas por SNMP y pasarselos al demonio de Cacti para graficar.
Comenzaremos instalando algunos pre requisitos, algunos son compartidos con Cacti, por lo que si se saltan este paso, pueden llegar a necesitar alguno de los paquetes (principalmente rrdtool en el que se base).

apt install rrdtool build-essential dos2unix dh-autoreconf help2man libssl-dev libmysql++-dev libmariadb-dev libmariadbclient-dev librrds-perl libsnmp-dev

Crearemos ahora una carpeta temporal donde descargar las fuentes, para el ejemplo, crearemos una carpeta tmp en el home del usuario que estemos usando.

mkdir ~/tmp
cd ~/tmp

Y descargaremos la aplicacion y la desempaquetaremos (el link del ejemplo, descarga una versión especifica, siempre vale la pena confirmar que sea la ultima o cambiar el link por el que apunta a cacti-spine-latest.tar.gz)

wget https://www.cacti.net/downloads/spine/cacti-spine-1.1.27.tar.gz
tar zxvf cacti-spine-1.1.27.tar.gz
cd cacti-spine-1.1.27

Ahora, configuraremos y compilaremos la aplicacion, cambiando la ruta de instalación de /usr/local/spine por /etc/spine, en caso de querer las rutas por defecto, quitar los argumentos del script «configure» (tengan en cuenta que el resto de los ajustes harán referencia a esta ruta)

./bootstrap
./configure --prefix /etc/spine
make
make install

Haremos los ajustes de permisos en los binarios necesarios para su ejecución.

chown root:root /etc/spine/bin/spine
chmod +s /etc/spine/bin/spine

y por ultimo, agregaremos los datos de autenticación para la base de datos. El siguente snippet hara el trabajo por nosotros, solo debemos ajustar los datos a los que hayamos configurado en pasos anteriores.

echo "DB_Host localhost
DB_Database cacti
DB_User cactidb
DB_Pass PASSWORD_CACTIDB
DB_Port 3306
DB_PreG 0" >> /etc/spine/etc/spine.conf

Instalando Cacti

La parte final de tutorial es para Cacti, descargaremos las fuentes, las cargaremos en nuestro WS y configuraremos algún checkeo para ver que todo funcione correctamente
Para comenzar, volveremos a la carpeta temporal, descargaremos el código y lo desempaquetaremos.

cd ~/tmp
wget https://www.cacti.net/downloads/cacti-latest.tar.gz
tar zxvf cacti-latest.tar.gz

Ahora crearemos una carpeta en la raíz de nuestro WS (podríamos utilizar la raíz mismo si no la utilizaran para otra cosa) y moveremos el contenido de la carpeta de instalación a ella ajustando luego los permisos de la misma.

mkdir /var/www/html/cacti
cp -rf cacti-1.1.27/* /var/www/html/cacti
chown -R www-data: /var/www/html/cacti/

Ajustaremos las credenciales de la base de datos editando el archivo /var/www/html/cacti/include/config.php, si respetamos los nombres de la base y solo debemos cambiar usuario y contraseña, podemos usar estos comandos, modificando cactidb y PASSWORD_CACTIDB por los datos que hayamos colocado

sed -i '/\$database_username/ s/cactiuser/cactidb/' /var/www/html/cacti/include/config.php 
sed -i '/\$database_password/ s/cactiuser/PASSWORD_CACTIDB/' /var/www/html/cacti/include/config.php

Importaremos ahora el esquema de tablas que utilizara la aplicación

mysql -u cactidb cacti -pPASSWORD_CACTIDB < /var/www/html/cacti/cacti.sql

Y por ultimo, crearemos el archivo de log para cacti. La ubicación por defecto es dentro del WS, para el ejemplo, lo moveremos a /var/log/cacti para hacerlo menos accesible

mkdir /var/log/cacti
touch /var/log/cacti/cacti.log
chown www-data: /var/log/cacti/cacti.log

El resto de la configuración, la haremos a través de la interfaz web

Para ello, utilizando su navegador de preferencia, iremos a http://IP_Servidor/cacti, donde veremos una Bienvenida y el acuerdo de licencia  GPL que deberemos aceptar para comenzar la instalación.

 

 

La siguiente pantalla nos indicara los pre requisitos y su estado, si seguimos los pasos anteriores, no deberíamos tener ninguno de ellos en rojo, en caso de tenerlos, deberemos solucionarlos antes de poder continuar

 

 

 

 

 

 

 


Para continuar, deberemos elegir el tipo de instalación, aquí tendremos la opción de configurar un server principal  o una colector secundario que enviara los datos procesados a otro, útil si se tienen multiples ambientes a los que se le quiera centralizar el monitoreo. Para nuestro ejemplo, iremos por la opcion de servidor primario.

La siguiente pantalla, nos mostrara el checkeo de las rutas para los binarios necesarios, en nuestro caso, deberemos modificar la ruta del ejecutable de Spine, ya que lo movimos de su ubicación por defecto (pondremos /etc/spine/bin/spine como ruta) y la ubicación del log (cambiaremos la ruta por /var/log/cacti/cacti.log), el resto de los parámetros, debería estar correctos.

Podremos elegir el tema también, pero esto es mejor hacerlo luego de instalado ya que no lo veremos hasta finalizar.

 

Pasaremos ahora a la confirmación de los permisos de escritura necesarios para la instalación, aquí también deberíamos ver todo correcto si seguimos los pasos previos.

 

 

 

Y por ultimo podremos importar las planillas mas usadas, las necesarias para extraer datos de routers Cisco, equipos con Windows, Linux y un genérico que contienen los OID comunes a la mayoría de los dispositivos.

Presionando «Finalizar» se ejecutara la instalación y se nos devolverá a la pantalla de login, a la cual nos autenticaremos con las credenciales por defecto admin/admin e inmediatamente se nos requerirá cambiar la contraseña.

Para terminar la instalación, configuraremos la ruta del archivo de configuración de Spine, para esto, iremos a «Configuración – Opciones» y luego a la pestaña «Rutas» y en el campo «Ruta al archivo de configuración de Spine» cargaremos /etc/spine/etc/spine.conf y seleccionaremos la opción de rotar el log de Cacti. En la misma página, pero en la pestaña Sonda, cambiaremos el «Tipo de Sonda» de cmd.php a Spine.

Solo nos queda configurar un cron para procesar los datos recolectados por Spine, para esto, volveremos a la terminal y cargaremos en el cron del usuario del WS

crontab -u www-data -e
*/5 * * * * /usr/bin/php /var/www/html/cacti/poller.php > /var/log/cacti/cacti_poller.log 2>&1

Con esto habremos terminado la instalación de Cacti con Spine como poller de datos.
Como agregado, podremos configurar el plugin Threshold, que nos permitirá definir alertas para nuestras datos en caso que algún dato alcance un valor determinado.

cd /var/www/html/cacti/plugins
wget https://github.com/Cacti/plugin_thold/archive/develop.zip
unzip develop.zip
mv plugin_thold-develop/ thold

Y lo activaremos e instalaremos yendo a «Configuración – Administración de Plugins»

Deja un comentario