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»