Nagios
Introducción
Nagios es una empresa que se dedica a todo tipo de monitores de la red, entre ellos está Nagios Core, que es su versión gratuita.
Los anteriores han sido extremadamente fáciles de configurar, así que Nagios se encargará de justo lo contrario, ¡si todo es tan fácil hasta parece aburrido!
Si replicamos la configuración en ambos nodos, nos llegarán el doble de notificaciones. Es preferible dejar un nodo monitorizando toda la red (incluido ambos nodos) y el otro nodo para vigilar que el primero siga vivo. No sería la primera vez que algo falla y no se notifica porque el que ha fallado, es el nodo que tiene Nagios.
Instalación
Nagios Core nunca está disponible como versión actualizada en los repositorios de paquetes. La versión disponible vía apt es antigua y no se recomienda. Siempre se debe compilar desde el código fuente.
Debido a que tenemos que compilar, habrá que instalar todas las dependencias.
sudo apt update
sudo apt install -y autoconf gcc libc6 libmcrypt-dev make \
libssl-dev wget bc gawk dc build-essential snmp \
libnet-snmp-perl gettext unzip libgd-dev
Para hacerlo funcionar necesitamos 3 aplicaciones:
- Nagios Core es el motor principal.
- Nagios Plugins tiene un kit de pruebas.
- NRPE es el servicio utilizado para consultar a otros servidores.
Empezamos descargando y descomprimiendo todos.
Hay que ajustar estos enlaces según la última versión. Comprobar las páginas de releases indicadas arriba para obtener las URLs actualizadas.
wget https://github.com/NagiosEnterprises/nagioscore/archive/nagios-4.5.11.tar.gz -O nagios.tar.gz
wget http://nagios-plugins.org/download/nagios-plugins-2.4.12.tar.gz -O nagios-plugins.tar.gz
wget https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.1.3/nrpe-4.1.3.tar.gz -O nrpe.tar.gz
tar xzf nagios.tar.gz
tar xzf nagios-plugins.tar.gz
tar xzf nrpe.tar.gz
Nagios Core
Creamos los usuarios y grupos de Nagios.
sudo useradd -m -s /bin/bash nagios
sudo groupadd nagcmd
sudo groupadd nagios
sudo usermod -a -G nagcmd nagios
sudo usermod -a -G nagios nagios
Compilamos y ejecutamos los procesos para su instalación.
cd nagioscore-nagios-4.5.11/
./configure --with-nagios-group=nagios --with-command-group=nagcmd --with-gd-lib=/usr/local/lib
make all
sudo make install
sudo make install-daemoninit
sudo make install-commandmode
sudo make install-config
cd ..
Nagios Plugins
Repetimos con los plugins, mucho más sencillo.
cd nagios-plugins-2.4.12/
./configure
make
sudo make install
cd ..
Nagios NRPE
Y acabamos con el NRPE (aviso que este es leeeeeento).
cd nrpe-4.1.3/
./configure
make all
sudo make install
sudo make install-config
sudo make install-init
sudo systemctl enable nrpe.service
Antes de iniciarlo, se debe configurar.
sudo vi /usr/local/nagios/etc/nrpe.cfg
Básicamente tenemos 3 puntos a ajustar:
- Qué IP puede hacer preguntas por el servicio NRPE, deberíamos dejar activo localhost y las IP de ambas Raspberry (la 2a solo requiere acceso a la 1a, pero es buena idea dejarlo preparado por si un día tenemos cambios).
- Aceptar comandos con argumentos (
dont_blame_nrpe), normalmente se dejaría apagado, pero en mi caso lo necesito para los backups notificados. - Lista de comandos aceptados, por defecto NRPE tiene varios, y podemos crear tantos como queramos. En mi caso, suelo crear uno para cada partición y apunto a ellas en vez de al disco como hace por defecto, y reajusto el warning para cargas de trabajo, ya que suele saltar a la mínima y no me es relevante.
allowed_hosts=127.0.0.1,::1,192.168.1.5,192.168.1.6
dont_blame_nrpe=1
command[check_disk_root]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /
command[check_load]=/usr/local/nagios/libexec/check_load -r -w .30,.25,.20 -c .40,.35,.30
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 200 -c 250
Una vez configurado, iniciamos ambos servicios y comprobamos el NRPE.
sudo systemctl start nagios.service
sudo systemctl start nrpe.service
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1
Al ejecutar los 3 comandos seguidos, es posible que NRPE esté encendiendo y su check falle. Si es el caso, volver a lanzar para confirmar que funciona.
Acceso directo a configuración
Para facilitar el acceso a los ficheros de configuración de Nagios, es recomendable crear un enlace simbólico desde el home del usuario.
ln -s /usr/local/nagios/etc ~/nagios-config
Esto permite acceder rápidamente a la configuración con:
cd ~/nagios-config
Lighttpd (Desde Pi-hole 2)
Esta sección documenta la configuración original con Pi-hole 2 que incluía lighttpd. Se mantiene como referencia histórica.
Nagios dispone de una web para visualizar los procesos, pero su instalación está pensada para Apache, y tenemos un Lighttpd debido a Pi Hole, lo mejor es adaptarnos a ello.
Primero debemos darle permiso al sistema de comandos, ya que sin ello no podremos hacer cosas tan importantes como decirle que vuelva a analizar un proceso.
sudo chown -R nagios:www-data /usr/local/nagios/var/rw/
Nagios tampoco tiene un sistema de inicio de sesión, pero da por hecho que accedemos con el usuario nagiosadmin, así que lo generamos. Es posible generar un fichero de estos a mano, pero me es más sencillo instalar las tools de Apache.
sudo apt install apache2-utils -y
sudo htpasswd -c /etc/lighttpd/nagios.passwd nagiosadmin
Con todo preparado, añadimos la configuración.
sudo vi /etc/lighttpd/external.conf
Nagios requiere algunos extras que Pi Hole no añade, así que los añadimos y configuramos sus rutas de acceso.
# Nagios
server.modules += (
"mod_alias",
"mod_authn_file",
"mod_cgi"
)
alias.url = (
"/nagios/cgi-bin" => "/usr/local/nagios/sbin",
"/nagios" => "/usr/local/nagios/share"
)
$HTTP["url"] =~ "^/nagios/cgi-bin" {
cgi.assign = ( "" => "" )
}
$HTTP["url"] =~ "nagios" {
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/lighttpd/nagios.passwd"
auth.require = ( "" => (
"method" => "basic",
"realm" => "nagios",
"require" => "user=nagiosadmin"
)
)
}
Reiniciamos.
sudo service lighttpd restart
Si todo ha funcionado, podremos acceder desde la misma URL que Pi Hole, cambiando admin por nagios:
Lighttpd (Desde Pi-hole 3)
Debido a que Pi-hole 3 tiene su propio servidor web, tenemos que instalar uno para que Nagios pueda ser publicado. Siguiendo el modelo anterior, lighttpd sigue siendo buena opción al ser muy ligero.
Instalar el servidor web y dependencias.
sudo apt-get install lighttpd php-cgi apache2-utils -y
Configurar el módulo de PHP (necesario para las métricas de temperatura).
sudo vi /etc/lighttpd/conf-available/10-php-cgi.conf
cgi.assign += (
".php" => "/usr/bin/php-cgi",
)
Debido a que Pi-hole usa los puertos 80 y 443, lighttpd tendrá que utilizar otros.
sudo vi /etc/lighttpd/lighttpd.conf
server.port = 81
Configurar SSL con los certificados generados por Certbot. El puerto SSL será el 444.
sudo vi /etc/lighttpd/conf-available/10-ssl.conf
# -*- conflicts: mbedtls, gnutls, nss, wolfssl -*-
server.modules += ( "mod_openssl" )
ssl.pemfile = "/etc/letsencrypt/live/rasp1.intranet.domain.cat/fullchain.pem"
ssl.privkey = "/etc/letsencrypt/live/rasp1.intranet.domain.cat/privkey.pem"
$SERVER["socket"] == "0.0.0.0:444" {
ssl.engine = "enable"
}
include_shell "/usr/share/lighttpd/use-ipv6.pl 444"
# Redirect HTTP to HTTPS
server.modules += ( "mod_redirect" )
$HTTP["scheme"] == "http" {
$HTTP["host"] =~ "([^:]+)(?::[0-9]+)?" {
url.redirect = (
"^/(.*)" => "https://%1:444/$1"
)
}
}
Los certificados de Certbot se renuevan automáticamente y el deploy hook se encarga de reiniciar lighttpd. Revisar la sección de renovación automática para confirmar que el hook está configurado.
Lighttpd necesita permisos de lectura sobre los certificados. Revisar las instrucciones de permisos en Certbot - Lighttpd.
Activar todos los módulos.
sudo lighttpd-enable-mod status cgi auth php-cgi ssl
Crear un usuario para Nagios.
sudo htpasswd -c /etc/lighttpd/nagios.passwd nagiosadmin
Y configurar la conexión hacia Nagios.
sudo vi /etc/lighttpd/conf-available/30-nagios.conf
# Nagios
server.modules += (
"mod_alias",
"mod_authn_file",
"mod_cgi"
)
alias.url = (
"/nagios/cgi-bin" => "/usr/local/nagios/sbin",
"/nagios" => "/usr/local/nagios/share"
)
$HTTP["url"] =~ "^/nagios/cgi-bin" {
cgi.assign = ( "" => "" )
}
$HTTP["url"] =~ "nagios" {
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/lighttpd/nagios.passwd"
auth.require = ( "" => (
"method" => "basic",
"realm" => "nagios",
"require" => "user=nagiosadmin"
)
)
}
Tras activar la configuración y reiniciar, se podrá acceder a la consola de Nagios.
sudo lighttpd-enable-mod nagios
sudo systemctl enable lighttpd
sudo systemctl start lighttpd
Para poder dar órdenes al motor de Nagios desde la web, el proceso de lighttpd necesita tener acceso.
sudo chown nagios:www-data /usr/local/nagios/var/rw
Acceder a Nagios desde: