Observium en Debian10

Supongamos que tenemos una infraestructura de red en Proxmox:

Y queremos monitorearla en Observium:

Pero… ¿Qué es Observium?

Observium, es una herramienta más para monitorizar dispositivos como Nedi o Centreon. Lo bueno de Observium que es muy intuitiva y completa. Es muy fácil de agregar dispositivos por SNMP y puede llegar a monitorizar memoria, CPU, Espacio, temperatura, voltaje… Incluso diferenciar sistemas operativos, dispositivos de red…

¿Qué debemos hacer?

Primero que todo, un container o CT de Proxmox con Debian10, crear una nueva máquina virtual con ese CT y configuramos los repositorios en /etc/apt/sources.list. Ejecute apt-update, apt-upgrade y apt dist-upgrade con el objetivo de tener actualizado a los últimos parches de seguridad en la máquina virtual.

Teniendo esto, vamos al pollo del arroz con pollo, el proceso de instalación. Instalando el soporte básico:

apt install -y wget php mariadb-server nginx php-{pear,cgi,common,curl,mbstring,gd,mysql,gettext,bcmath,imap,json,xml,snmp,fpm,zip}

Entonces, una ves instalado todo, debemos editar la config de php dejándola de la siguiente manera:

nano /etc/php/7.3/fpm/php.ini
date.timezone = "America/Havana"

Guardamos y salimos del editor.

Ahora debemos editar la configuración de MariaDB, añadiendo en la claúsula [mysqld]:

nano /etc/mysql/mariadb.conf.d/50-server.cnf
innodb_file_per_table = 1
sql-mode = ""
lower_case_table_names = 0

Guardamos, salimos del editor y reiniciamos MariaBD.

/etc/init.d/mysql restart

Se recomienda ejecutar el script:

mysql_secure_installation

Para mejorar un poco la seguridad y el performance del servidor MariaDB, por favor, tenga especial atención con las opciones de password, pues de olvidar o equivocarse, será un poco trabajoso/molesto recuperar el password de root de MariaDB.

Ahora necesitamos crear la base de datos para el Observium, por lo que escribimos en la consola:

mysql -u root -p
CREATE DATABASE observium DEFAULT CHARACTER SET = utf8;
USE observium;
CREATE USER 'observium'@'localhost' IDENTIFIED BY 'observium*123';
GRANT USAGE ON *.* TO 'observium'@'localhost' IDENTIFIED BY 'observium*123';
GRANT ALL PRIVILEGES ON observium .* TO 'observium'@'localhost';FLUSH PRIVILEGES;
quit;

Añadimos el usuario de observium del sistema:

useradd -r -M -d /opt/observium observium

Descargamos Observium en /opt

cd /opt
wget -c http://www.observium.org/observium-community-latest.tar.gz
tar xzfv observium-community-latest.tar.gz
rm observium-community-latest.tar.gz
cd observium
chown -R observium:observium /opt/observium/
mkdir /opt/observium/{rrd,logs}
chown www-data:www-data rrd
chmod -R 775 /opt/observium/

Ahora añadimos el usuario al grupo www-data

usermod -a -G observium www-data

Instalamos las dependencias que necesita Observium para funcionar debidamente:

apt install -y rrdtool whois fping imagemagick graphviz \
mtr-tiny nmap python-mysqldb snmp snmpd python-memcache \
mtr-tiny acl ipmitool

La configuración:

cp /opt/observium/config.php.default /opt/observium/config.php

Adaptamos la configuración a los datos de conexión:

// Database config --- This MUST be configured
$config['db_extension'] = 'mysqli';
$config['db_host'] = 'localhost';
$config['db_user'] = 'observium';
$config['db_pass'] = 'observium*123';
$config['db_name'] = 'observium';

Adaptando SNMP a nuestras necesidades

Edite/Copie el archivo de prueba snmpd y adáptelos a sus necesidades, pero debe recordar los cambios hechos, pues posteriormente los necesitará:

cp /opt/observium/snmpd.conf.example /etc/snmp/snmpd.conf

Y reinicie snmp:

/etc/init.d/snmpd restart

Configurando Nginx. Añada/modifique en nginx.conf:

server_tokens off;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

Chequée que el usuario www-data es el usuario permitido para ejecutar nginx, sino, ajuste la configuración:

user www-data;

Salve la configuración y salga del archivo.

Creando el virtualhosting:

nano /etc/nginx/sites-available/observium.conf
server {
	listen 80;
	server_name observium.inutil.cu;
	root /opt/observium/html;
	index index.php;
	client_max_body_size 10m;
	client_body_buffer_size 8K;
	client_header_buffer_size 1k;
	large_client_header_buffers 4 8k;
	access_log /var/log/nginx/observium-access.log;
	error_log /var/log/nginx/observium-error.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;
		}
}

Salve la configuración y salga a la consola nuevamente.

En /etc/nginx si no existe, crear el archivo fastcgi.conf con el siguiente contenido:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

Salve la configuración y salga del archivo. Ahora haremos un link simbólico para activar el virtualhosting.

ln -s /etc/nginx/sites-available/observium.conf /etc/nginx/sites-enabled/observium.conf

Testeamos la configuración ante posibles errores:

nginx -t

Si todo está OK, reiniciamos Nginx:

/etc/init.d/nginx restart

Ahora para llenar los datos basicos de la base de datos de Observium:

cd /opt/observium
./discovery.php -u

La salida:

  ___   _                              _
 / _ \ | |__   ___   ___  _ __ __   __(_) _   _  _ __ ___
| | | || '_ \ / __| / _ \| '__|\ \ / /| || | | || '_ ` _ \
| |_| || |_) |\__ \|  __/| |    \ V / | || |_| || | | | | |
 \___/ |_.__/ |___/ \___||_|     \_/  |_| \__,_||_| |_| |_|
Observium Community Edition 18.9.10000
http://www.observium.org

Install initial database schema ... done.

Este paso en la instalación demora un poco, así que tenga paciencia…

Agregamos un usuario administrador:

./adduser.php admin PassWord** 10

Donde:
admin -> usuario
PassWord** -> es el password para el usuario admin
10 -> el más alto nivel de acceso

La salida del comando debe ser:

Observium CE 18.9.10000
Add User

User root added successfully.

Ahora entren en:

http://observium.inutil.cu/

Loguéense con la combinación de usuario/contraseña anterior y listo. Ahora debemos setear una tarea en el cron para descubrir/detectar nuevos dispositivos o encuestar los que ya hayamos añadido:

nano /etc/cron.d/observium
33  */6   * * *   root    /opt/observium/discovery.php -h all >> /dev/null 2>&1
*/5 *     * * *   root    /opt/observium/discovery.php -h new >> /dev/null 2>&1
*/5 *     * * *   root    /opt/observium/poller-wrapper.py 2 >> /dev/null 2>&1

Reiniciamos el cron:

/etc/init.d/cron restart

Nota: Si tiene algún firewall puesto entre los dispositivos a monitorear, debe abrir los puertos 161 y 162, tcp/udp, sino, no logrará obtener ninguna información del dispositivo.

Para añadir dispositivos a monitorear ir a Devices -> Add Device. Rellene los datos[SNMP], dispositivo[IP del dispositivo], comunidad[public] y listo.

Añadamos estas lineas en el config.php de Observium, con el fin de mejorar el timeout y los reintentos de encuestar dispositivos, ante posible latencia de la red:

// Timeout Config
$config['snmp']['timeout'] = 20; // timeout in seconds
$config['snmp']['retries'] = 5; // how many times to retry the query
$config['ping']['retries'] = 10; // How many times to retry ping
$config['ping']['timeout'] = 1500; // Timeout in milliseconds

Para monitorear nuestro host recordemos:

com2sec readonly default 0bs3rv1um

Entonces necesitaremos:

cp /opt/observium/scripts/distro /usr/local/bin/distro
chmod 755 /usr/local/bin/distro

Ahora en la consola directamente ejecutamos dentro del directorio /opt/observium:

./add_device.php localhost 0bs3rv1um
./discovery.php -h all && ./poller.php -h all

Esperamos a que termine, y en el Tab Devices de la web de Observium podemos ver nuestro nuevo host.

Podemos añadir cuantos hosts necesitemos

Para chequear la generación de los graficos RRD:

./poller.php -h localhost -m system -d | grep RRD

Y listo. Hasta acá eso es todo.

Mediante SNMP se pueden monitorear muchos detalles[memoria, cpu, espacio en hdd, uso de la red, etc] de los host que integran nuestra red:

Lo demás queda de parte de ustedes, prueben y comenten.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *