Empecé con la primera Raspberry allá por 2014 y desde entonces han ido cayendo unas cuantas, de tal modo que ya tengo siete. La primera, una triste Raspberry que llevaba un tiempo sin utilizar, así que se me ha ocurrido que podría servir para monitorizar el estado de las otras seis.
Hace unos cuantos años utilicé Nagios y poco después me pasé a Icinga, que era una bifurcación de Nagios. Ahora ya van con Icinga 2. Con mis pequeño CPD lleno de raspberries, he montado Icinga. Parte del sistema de monitorización es una interfaz web donde pueden verse las distintas alarmas y eso queda muy bonito para alguien que lo tenga siempre a la vista. De eso he prescindido y las alarmas me llegan por correo electrónico en vez de verlas en un panel.
Para instalar Icinga en un raspberry he tirado de los paquetes oficiales de Icinga, no de los que vienen con la distribución Raspbian, ya que los paquetes oficiales de Icinga son algo más modernos. Para ello he añadido un repositorio a las listas de SW oficial. En el directorio /etc/apt/sources.list.d he añadido un fichero llamado icinga.list con el siguiente contenido:
$ cat /etc/apt/sources.list.d/icinga.list deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] http://packages.icinga.com/raspbian icinga-buster main deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] http://packages.icinga.com/raspbian icinga-buster main
Ojo, el fichero son dos líneas, aunque se lean cuatro o más en la entrada del blog si la pantalla no es suficientemente ancha. Además la segunda línea, la que empieza por deb-src se puede eliminar si no se va a instalar los paquetes desde el código fuente.
Una vez modificado el fichero, hay que actualizar la base de datos de paquetes:
$ sudo apt-get update
Y ahora se puede instalar los paquetes necesarios:
$ sudo apt-get install icinga2
Si se desea instalar también los paquetes necesarios para la interfaz web se puede hacer todo junto:
$ sudo apt-get install icinga2 icingaweb2
Como esto ya se tendría el servicio Icinga en funcionamiento, pero sólo monitorizando al propio equipo donde se está ejecutando. Se puede arrancar el servicio
$ sudo systemctl start icinga2.service
Se puede parar también:
$ sudo systemctl stop icinga2.service
O ver su estado:
$ systemctl status icinga2.service
Es interesante también instalar algunos plugins extras de Nagios para que Icinga pueda monitorizar ciertos servicios. Por ejemplo, me interesaba el plugin de MySQL ya que hay varios equipos con este servidor de bases de datos. Para ello instalé el paquete nagios-plugins-standard:
$ sudo apt-get install nagios-plugins-standard
Ahora ya sólo queda configurar Icinga para que empiece a monitorizar las máquinas.
Para monitorizar la base de datos de WordPress del blog añadí un servicio al que llamé «MySQL WordPress» y que definí en el fichero /etc/icinga2/conf.d/services.conf
apply Service "MySQL WordPress" { import "generic-service" check_command = "mysql" vars.mysql_username = "wordpress_user" vars.mysql_password = "wordpress_password" vars.mysql_database = "wordpress_bbdd" assign where host.vars.mysql_wordpress == true }
Lo que quiere decir es que este servicio se aplicará a todos aquellos hosts que tengan la variable mysql_wordpress a true. Por lo tanto, cuando defina el host que quiero que se monitorice esa base de datos tendré que poner algo así como:
object Host "host_bbdd" { ... vars.mysql_wordpress = true ... }
Muy importante es que cuando se modifique algún fichero de configuración se compruebe primero si la configuración es correcta, que no haya, por ejemplo, algún error sintáctico. Se ejecutará el comando:
$ sudo icinga2 daemon -C
Y si hay algún error avisará:
[2021-10-11 17:32:12 +0100] information/cli: Icinga application loader (version: r2.13.2-1) [2021-10-11 17:32:12 +0100] information/cli: Loading configuration file(s). [2021-10-11 17:32:13 +0100] critical/config: Error: syntax error, unexpected $end, expecting '}' Location: in /etc/icinga2/conf.d/hosts.conf: 155:0-155:1 /etc/icinga2/conf.d/hosts.conf(153): } /etc/icinga2/conf.d/hosts.conf(154): /etc/icinga2/conf.d/hosts.conf(155): ^^ [2021-10-11 17:32:13 +0100] critical/cli: Config validation failed. Re-run with 'icinga2 daemon -C' after fixing the config.
Si todo ha salido bien, la salida de ese comando será algo similar a :
[2021-10-11 17:38:18 +0100] information/cli: Icinga application loader (version: r2.13.2-1) [2021-10-11 17:38:18 +0100] information/cli: Loading configuration file(s). [2021-10-11 17:38:20 +0100] information/ConfigItem: Committing config item(s). [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 1 IcingaApplication. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 2 HostGroups. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 6 Hosts. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 30 Notifications. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 1 CheckerComponent. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 3 Zones. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 1 Endpoint. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 2 NotificationCommands. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 1 Downtime. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 1 FileLogger. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 244 CheckCommands. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 1 NotificationComponent. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 1 UserGroup. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 1 User. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 3 TimePeriods. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 3 ServiceGroups. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 1 ScheduledDowntime. [2021-10-11 17:38:24 +0100] information/ConfigItem: Instantiated 24 Services. [2021-10-11 17:38:24 +0100] information/ScriptGlobal: Dumping variables to file '/var/cache/icinga2/icinga2.vars' [2021-10-11 17:38:24 +0100] information/cli: Finished validating the configuration file(s).
Existe una documentación muy extensa y de gran calidad en la web de Icinga: https://icinga.com
Lo tengo configurado para que me envíe un correo cuando hay alguna alarma. Y lo que me llega es este tipo de correos: