Instalar Cacti en Ubuntu 18.04

Vamos a ver la instalación de la plataforma de monitorización gráfica Cacti, sobre un servidor GNU/Linux con la distribución Ubuntu 18.04

De esta herramienta hemos hablado muchas veces en la web, pero de eso ya hace cierto tiempo, por lo que vamos a la faena.

Antes de nada…

¿Qué es Cacti?

Se trata de una plataforma que ofrece gráficos y monitores de red, que sigue la filosofía del código abierto en su desarrollo y que utiliza la herramienta de registros RRDTool. Cacti aprovecha el poder de almacenamiento de RRDTool y la funcionalidad de gráficos.

Entre sus principales funcionalidades se encuentra:

  • Soporte para múltiples métodos de adquisición de datos, por ejemplo, SNMP.
  • Soporte para un gran número de plantillas de gráficos.
  • Funcionalidad de gestión de usuarios vía ACL

Además, proporciona una interfaz web muy intuitiva y fácil de utilizar. Se puede utilizar para gestionar desde pequeñas redes de oficina hasta otras con gran número de dispositivos de red y servidores.

Requisitos mínimos

Actualmente, consultando la documentación oficial podemos listar los requisitos mínimos:

  • RRDTool 1.0.49 o superior (recomendado 1.4)
  • MySQL 5.0 o superior
  • PHP 5.1 o superior
  • Un servidor web que soporte PHP, por ejemplo Apache o IIS

Podéis consultar el apartado en la web oficial.

Instalación de Cacti en Ubuntu 18.04

Los primero de todo es actualizar el sistema:

  1. sudo apt update ; sudo apt upgrade

Instalación de PHP

Instalamos los módulos de PHP necesarios e imprescindibles para el funcionamiento de la plataforma.

  1. sudo apt install php php-mysql php-curl php-net-socket
  2. sudo apt install php-gd php-intl php-pear php-imap php-memcache
  3. sudo apt install libapache2-mod-php php-pspell php-recode php-tidy
  4. sudo apt install php-xmlrpc php-snmp
  5. sudo apt install php-mbstring php-gettext
  6. sudo apt install php-gmp php-json php-xml php-common

Una vez instalados los paquetes podemos comprobar la versión instalada de PHP

  1. davidochobits@servsocrates:~$ php -v
  2. PHP 7.2.19-0ubuntu0.18.04.2 (cli) (built: Aug 12 2019 19:34:28) ( NTS )
  3. Copyright (c) 1997-2018 The PHP Group
  4. Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
  5.     with Zend OPcache v7.2.19-0ubuntu0.18.04.2, Copyright (c) 1999-2018, by Zend Technologies

Antes de continuar debemos asegurar que está configurado la zona horaria correcta:

  1. davidochobits@servsocrates:~$ grep date.timezone /etc/php/7.2/apache2/php.ini
  2. ; http://php.net/date.timezone
  3. date.timezone = Europe/Madrid

Instalar el servicio web Apache

En esta instalación nos vamos a decantar por este popular servidor web. Su instalación es realmente sencilla:

  1. sudo apt install apache2

Una vez realizada esta instalación debemos indicar el entorno donde vamos a utilizar el servidor web.

  1. sudo vi /etc/apache2/conf-enabled/security.conf

Y editamos la línea 25:

  1. ServerTokens Prod

Esta directiva establece la respuesta HTTP del servidor, las opciones son: «Full, OS, Minimal, Minor, Major y Prod», que es la que hemos escogido.

Otra parte importante es indicar el nombre del servidor web en el fichero «/etc/apache2/apache2.conf»

  1. sudo vi /etc/apache2/apache2.conf

Y añadir:

  1. ServerName cacti.bitsandlinux.com
  2. ServerAdmin davidochobits@colaboratorio.net

Si tenemos el cortafuegos UFW habilitado debemos aplicar las siguientes reglas:

  1. # Habilitamos http
  2. sudo ufw allow http
  3. # Habilitamos https
  4. sudo ufw allow https

Reiniciamos el servidor web:

  1. sudo systemctl restart apache2

Instalar el motor de base de datos MariaDB

Para instalar el motor de base de datos puedes consultar la entrada al respecto:

Instalar MariaDB en Ubuntu 18.04

Tunear la base de datos para Cacti

Para adaptar la configuración del motor de base de datos a las necesidades de Cacti debemos modificar el fichero «/etc/mysql/mariadb.cnf» :

  1. sudo vi /etc/mysql/mariadb.cnf

E indicar justo debajo de la sección [mysqld] :

  1. max_heap_table_size=128M
  2. tmp_table_size=128M
  3. join_buffer_size=64M
  4. innodb_buffer_pool_size=512M
  5. innodb_doublewrite=OFF
  6. innodb_flush_log_at_timeout=3
  7. innodb_read_io_threads=32
  8. innodb_write_io_threads=16

Una vez hecho esto debemos reiniciar el motor de base de datos:

  1. sudo systemctl restart mariadb.service

Podemos comprobar que los cambios efectivamente se han hecho, por ejemplo:

  1. MariaDB [(NONE)]> SHOW VARIABLES LIKE 'join_buffer_size';
  2. +------------------+----------+
  3. | Variable_name    | VALUE    |
  4. +------------------+----------+
  5. | join_buffer_size | 67108864 |
  6. +------------------+----------+
  7. 1 ROW IN SET (0.002 sec)

Crear la base de datos para Cacti

Para crear la base de datos que usará la plataforma debemos acceder a la consola de MariaDB

  1. mysql -u root -p

Y escribir según nuestras necesidades:

  1. CREATE DATABASE cacti;
  2. GRANT ALL PRIVILEGES ON cacti.* TO cactiuser@'localhost' IDENTIFIED BY 'contrasea';
  3. FLUSH PRIVILEGES;
  4. exit

Instalar SNMP, RRDTool y Cacti

Como últimos pasos debemos instalar los servicios de SNMP, RRDTool, Cacti y cacti-spine

  1. sudo apt install snmp snmpd snmp-mibs-downloader
  2. sudo apt install rrdtool cacti cacti-spine

Durante la instalación debemos indicar que vamos a utilizar el servidor web Apache.

En la siguiente pregunta respondemos «no» sobre la configuración con «dbconfig-common»

Configurar SNMP

Para poder comunicarnos con el servicio SNMP del propio host debemos indicar un nombre de comunidad para indicarlo en la configuración: «/etc/snmp/snmpd.conf«, generalmente se añade sobre la línea 49 del fichero de configuración:

  1. sudo vi /etc/snmp/snmpd.conf

Y añadimos:

  1. rocommunity bitsandlinux localhost

Además, debemos deshabilitar el acceso público comentando las siguientes líneas:

  1. # rocommunity public default -V systemonly
  2. # rocommunity6 public default -V systemonly

Ahora ya podemos reiniciar el servicio:

  1. sudo systemctl restart snmpd

Siempre podemos validar que todo ha ido bien validando con snmpwalk, del que ya hemos hablado.

  1. sudo snmpwalk -v 2c -c bitsandlinux localhost

Configurar el servidor Cacti

Debemos modificar el fichero de configuración de Cacti, para indicarle los datos de las credenciales de la base de datos. Para ello editamos el fichero «/usr/share/cacti/site/include/config.php»

  1. sudo vi /usr/share/cacti/site/include/config.php

Con el contenido según las credenciales de la base de datos y su usuario correspondiente:

  1. $database_type = "mysqli";
  2. $database_default = "cacti";
  3. $database_hostname = "localhost";
  4. $database_username = "cactiuser";
  5. $database_password = "contrasea";
  6. $database_port = "3306";
  7. $database_ssl = false;

Guardamos y salimos

Instalamos el esquema de la base de datos:

  1. mysql -u cactiuser -p cacti < /usr/share/doc/cacti/cacti.sql

Definimos la «timezone» para la base de datos:

  1. mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

Para ello debemos dar privilegios especiales para el usuario Cacti a mysql.time

  1. mysql -u root -p

Y:

  1. GRANT SELECT ON mysql.time_zone_name TO cactiuser@localhost;
  2. FLUSH privileges;
  3. exit

Configurar Cacti para el control de acceso en Apache

Siempre es recomendable restringir el acceso a la interfaz, esto se consigue modificando el fichero del Virtual Host en «/etc/apache2/conf-available/cacti.conf«, por ejemplo:

  1. sudo vi /etc/apache2/conf-available/cacti.conf

Por ejemplo:

  1. Require host localhost
  2. Require ip 192.168.122.0/24

Aquí se puede indicar una IP o un rango de IPs

Siempre que hagamos cambios debemos reiniciar el servidor web:

  1. sudo systemctl restart apache2

Instalación de Cacti-Spine

Cacti-Spine o spine a secas es un programa escrito C. Se trata de un sustituo más eficiente y eficaz para cmd.php. Spine es mucho más rápido. La única pega es que hay que compilarlo.

Para ello necesitamos una serie de paquete:

  1. sudo apt install build-essential dos2unix dh-autoreconf help2man 
  2. sudo apt install libssl-dev libmysql++-dev  librrds-perl libsnmp-dev 
  3. sudo apt install libmysqlclient-dev libmysqld-dev

Ahora ya podemos descargar la última versión del programa:

  1. wget https://www.cacti.net/downloads/spine/cacti-spine-latest.tar.gz
  2. tar xfz cacti-spine-latest.tar.gz 
  3. cd cacti-spine-1.2.7/

Y compilamos:

  1. ./bootstrap 
  2. ./configure 
  3. make
  4. sudo make install

Ahora le asignamos permisos para root:

  1. sudo chown root:root /usr/local/spine/bin/spine 
  2. sudo chmod +s /usr/local/spine/bin/spine

Por último que no menos inmportante editamos su fichero de configuración con los datos de la base de datos de Cacti:

  1. vi  /usr/local/spine/etc/spine.conf

Con el contenido:

  1. DB_Host localhost
  2. DB_Database cacti
  3. DB_User cactiuser
  4. DB_Pass contrasea
  5. DB_Port 3306
  6. DB_PreG 0

Instalación web de Cacti

Ahora le toca la parte de la instalación del producto vía web. Para ello debemos escribir el nombre de la web o de la IP más «/cacti»

Lo primero es aceptar la licencia del producto, que como se observa es software libre, ya que utiliza una licencia GPL

Aceptación de licencia


En el siguiente paso indica si cumplimos con todos los requisitos de instalación.

Cumplimiento de requistos de instalación


Debemo indicar si se trata de una instalación principal o en cambio es una instalación remota:

Se indica el tipo de servidor


Confirmamos la ubicación de los binarios:

Confirmación ruta binarios


Debemos apuntar los permisos que deben tener las rutas de instalación:

Permisos rutas de instalación


Importamos las plantillas a utilizar. Yo he indicado que las quiero utilizar todas.

Plantillas disponibles


En el próximo paso ya nos aparecerá la pantalla de acceso.

Pantalla de acceso a Cacti


El usuario predeterminado es «admin» con la contraseña «admin».

Por seguridad debemos cambiar la contraseña:

Solicitud de cambio de contraseña


De esta manera ya podemos ver la interfaz del producto.

Interfaz web de Cacti


De esta manera ya podemos a empezar a jugar.

Habilitar Spine vía interfaz web

Ahora toca cambiar el recolector de datos a spine. Para ello en la interfaz web nos vamos a «Console» -> «Settings» -> «Settings» -> «Poller» y allí cambiar cmd.php a spine.

El otro cambio se tiene que hacer en «Console» -> «Configuration» -> «Settings» -> «Paths» y allí en la ruta para el fichero de configuración indicamos: «/usr/local/spine/etc/spine.conf«, además del binario «/usr/local/spine/bin/spine» y guardamos.

Quizás os puedan interesar las siguientes entradas al respecto

Añadir nuevo dispositivo a Cacti
Instalar Cacti en un servidor CentOS 7
Añadir un cliente Windows Server a Cacti
Añadir gráficas de threads en Cacti

Y esto es todo, espero que la entrada os pueda ser de utilidad en algún momento.