Introducción
Actualmente utilizo cacti para monitorizar de forma gráfica el ancho de banda utilizado por el router y por el servidor, tanto en la red local como en la salida a Internet.
Actualización de la versión de cacti
- Hacer una copia de seguridad de la bbdd de cacti:
$sudo mysqldump -l -u root --add-drop-table cacti -p > mysql.cacti
- Y nos pedirá la contraseña de root
- Hacer un backup del antiguo cacti (en mi caso el directorio de instalación que usó por defecto el apt-get es /usr/share):
$ cd /usr/share
$ mv cacti cacti_old
- Descomprimir al nueva versión (a mí me gusta moverlo todo lo que vamos a descomprimir a /usr/src):
$ sudo mv cacti-0.8.7e.tar.gz /usr/src
$ sudo tar xvfz cacti-0.8.7e.tar.gz
- Llevar la nueva versión al directorio original donde estaba instalado cacti:
$ sudo mv /usr/src/cacti-0.8.7e /usr/share/cacti
- Incluir la información de usuario, password y base de datos de Mysql en el fichero include/config.php:
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "root";
$database_password = "laquetengas";
- Copiar los ficheros *.rrd del antiguo directorio de Cacti. En mi caso, al utilizar de nuevo apt-get para instalar cacti, los coloca en /var/lib/cacti/rra, cosa que he podido detectar gracias al find:
$ sudo find / -name /rra
/usr/share/cacti/rra
/var/lib/cacti/rra
- Los copiamos y le ponemos el mismo propietaro que tenían (www-data.www-data):
$ sudo cp /var/lib/cacti/rra/* /usr/share/cacti/rra/
$ cd /usr/share/cacti/rra
$ chown -R www-data.www-data *
- Copiar cualquier script relevante del directorio antiguo (pero que no estén en el nuevo, para no sobreescribirlos):
$sudo cp -u /usr/share/cacti_old/site_old/scripts/* /usr/share/scripts/
- Copiar cualquier xml relevante del directorio antiguo:
$ cp -u -R /usr/share/cacti_old/site_old/resource/* /usr/share/cacti/resource/
- Poner los permisos apropiados para los directorios rra y log donde se generarán los gráficos:
chown -R cactiuser rra/ log/
- En mi caso, la instalación de apt-get hace que dentro del directorio /usr/share/cacti, se cree un directorio site que es al que apuntará apache. En la versión descargable no existe este directorio intermedio, por tanto modificamos el fichero de apache donde se dice el "site" de cacti. Está almacenado en /etc/apache2/conf.d y se llama cacti.conf:
$ cd /etc/apache2/conf.d
$ sudo vi cacti.conf
- Y cambiamos las líneas siguientes:
Alias /cacti /usr/share/cacti/site
<DirectoryMatch /usr/share/cacti/site>
- Por estas otras:
Alias /cacti /usr/share/cacti
<DirectoryMatch /usr/share/cacti>
- Y reiniciamos apache:
$ sudo /etc/init.d/apache2 restart
- Cambiar los permisos para los directorios rra y log (esta es la versión de la documentación original):
$ sudo cd /usr/share/cacti
$ chown -R cactiuser rra log
Pero a mí no me crea el usuario cactiuser la instalación con apt-get, así que utilizo lo siguiente:
$ sudo chown -R root.www-data rra log
Errores
- En el fichero de logs veo las siguientes entradas:
09/01/2009 07:35:01 PM - CMDPHP: Poller[0] Host[1] DS[20] WARNING: Result from CMD not valid. Partial Result:
09/01/2009 07:35:01 PM - CMDPHP: Poller[0] Host[1] DS[20] WARNING: Result from CMD not valid. Partial Result:
09/01/2009 07:35:01 PM - CMDPHP: Poller[0] Host[1] DS[20] WARNING: Result from CMD not valid. Partial Result:
09/01/2009 07:35:01 PM - CMDPHP: Poller[0] Host[1] DS[19] WARNING: Result from CMD not valid. Partial Result:
09/01/2009 07:35:01 PM - CMDPHP: Poller[0] Host[1] DS[19] WARNING: Result from CMD not valid. Partial Result:
09/01/2009 07:35:01 PM - CMDPHP: Poller[0] Host[1] DS[18] WARNING: Result from CMD not valid. Partial Result:
que, seguramente tenga que ver conque el crontab que ejecuta periódicamente cacti, está apuntando al antiguo directorio. Edito el fichero de crontab de cacti:
$sudo vi /etc/cron.d/cacti
Y efectivamente, tengo la línea:
*/5 * * * * www-data php /usr/share/cacti/site/poller.php >/dev/null 2>/var/log/cacti/poller-error.log
La cual, cambio a:
*/5 * * * * www-data php /usr/share/cacti/poller.php >/dev/null 2>/var/log/cacti/poller-error.log
Referencias
http://www.cacti.net/downloads/docs/html/upgrade.html
Instalación de ArchitecturePlugins
- Descargamos el último fichero de ArchitecturePlugins (para poder instalar posteriormente los plugins):
http://cactiusers.org/downloads/patches/
- Lo descomprimimos en /usr/src
$ sudo tar -zvxf cacti-plugin-arch.tar.gz
- Nos metemos dentro del directorio files-* y lo copiamos al directorio de cacti:
$ cd /usr/src/cacti-plugin-0.8.7e-PA-v2.5/
$ cd files-0.8.7e/
$ sudo cp -R * /usr/share/cacti/
- Ir al fichero /usr/share/cacti/include/global.php, editarlo y cambiar la línea:
$config['url_path'] = '/';
Por esta otra:
$config['url_path'] = '/cacti/';
- Para los plugins nuevos (por ejemplo thold) es necesario instalar el Plugin Management que simplemente, consiste en añadir el fichero pa.sql a la bbdd de cacti. Si no, este plugin, por ejemplo, no funcionará. Para ello:
$ cd /usr/src/cacti-plugin-0.8.7e-PA-v2.5/
$ mysql -u root cacti -p <pa.sql
- Ahora daremos permisos a los distintos usuarios dentro del apartado User Management-><usuario>->Realm Permissions->Plugin Management, con lo cual ya funcionarán los plugins basados en esta arquitectura.
Referencias
http://cactiusers.org/wiki/PluginArchitectureInstall
Instalación de Plugins
Plugin settings
Este plugin es el que permite enviar correos electrónicos (utilizando el smtp+dns instalado en el equipo) para realizar las distintas notificaciones, por lo que es el primero que instalaremos. Para ello, primero descargamos de aquí la última versión:
http://cactiusers.org/downloads/settings.tar.gz
Y ahora, lo movemos a /usr/src/ y lo descomprimimos:
$ sudo mv settings.tar.gz /usr/src
$ tar xvfz settings.tar.gz
A continuación, copiamos el directorio tal cual al directorio plugins de cacti y le ponemos como propietario del directorio al usuario que lanza cacti (puede ser cactiuser o, en mi caso, es www-data):
$ cp -R settings /usr/share/cacti/plugins
$ chown -R www-data.www-data /usr/share/cacti/plugins/settings
Y por último, añadimos el plugin al fichero /usr/share/cacti/include/global.php
Y nos vamos a las líneas:
$plugins = array();
//$plugins[] = 'thold';
Descomentamos la línea y le ponemos el mismo nombre que tenga la carpeta del plugin, con lo que quedaría así:
$plugins = array();
$plugins[] = 'settings';
Ya deberíamos ver una nueva pestaña en el apartado Settings llamada Mail/DNS donde podremos configurar los datos del correo electrónico y hacer una prueba de envío.
Plugin reports
- Vamos a intentar instalar el plugin en el que estamos interesados que es beta y no muy conocido. Es el plugin Reports que nos permitirá enviar informes (diarios, semanales o mensuales) a la cuenta de correo que especifiquemos, lo cual parece bastante interesante para no estar mirando Cacti continuamente.
- Para elllo, en primer lugar descargamos el plugin de aquí:
http://cactiusers.org/forums/viewtopic.php?f=9&t=771
- Y a, continuación, lo descomprimimos en /usr/src:
$ cd /usr/src
$ sudo tar xvfz reports-v0.2.tar.gz
- Copiamos el directorio creado al directorio de plugins de cacti:
$ sudo cp -R reports /usr/share/cacti/plugins
- Editamos el fichero /usr/share/cacti/include/global.php
$ sudo vi /usr/share/cacti/include/global.php
Nos vamos a las líneas:
$plugins = array();
$plugins[] = 'settings';
Añadimos el mismo nombre que tenga la carpeta del plugin, con lo que quedaría así:
$plugins = array();
$plugins[] = 'settings';
$plugins[] = 'reports';
Y este plugin requiere que añadamos nuevas tablas a la base de datos de cacti. Para ello, previamente hacemos una copia de seguridad:
$ mysqldump -l -u root --add-drop-table cacti -p > mysql.cacti
Y luego, ejecutamos el fichero sql del plugin:
$ mysql -u root cacti -p < /usr/share/cacti/plugins/reports/reports.sql
Entramos con el usuario admin, que es el que tiene permiso para ver todo y nos vamos a "User Management", seleccionamos nuestro usuario normal y le damos permiso para "Configure Reports".
Ya nos debe aparecer un nuevo apartado, llamado Reports donde crearemos los informes (diarios, semanales o mensuales) mediante el botón Add para cada dispositivo que tengamos definido.