¿Qué es Nagios?
Nagios es un sistema de monitorización de código abierto que tiene una interface web que nos va a permitir ver si todos tus sistemas están OK o si tienen algún tipo de problema.
Existen dos versiones la versión:
- Nagios Core: La versión base, la que se usa y está disponible de forma gratuita o Community.
- Nagios XI: La versión profesional y que está licenciada. Fue creada para luchas contra Zabbix, que es otra aplicación comercial de monitorización.
Con esta aplicación, puedes comprobar múltiples tipos de sistemas gracias a la integración SNMP, check de puertos, ….
Tiene un amplio catálogo de aplicaciones y protocolos los cuales pueden comprobar como espacio, memoria, smtp, pop, ftp,… o aplicaciones como el propio ssh del servidor. Pero además cuenta con NRPE para que usemos los nuestros propios.
Lo interesante de este sistema es que no monitoriza el servidor en el que se ejecuta, puede monitorizar cualquier sistema al que se tenga acceso tanto interno como cualquier sistema de internet.
NRPE
NRPE es una aplicación que nos permite ejecutar nuestros propios scripts bajo cualquier sistema y usarlo para la comprobación con Nagios.
Crea un servicio en el servidor y a través del fichero de configuración /etc/nagios/nrpe.cfg le indicamos que comandos nos pueden ejecutar desde el exterior.
Lanzando Nagios en un Docker
He creado una Imagen en Docker para tenerlo de manera fácil. Esta Imagen está configurada para que levante Exim, Nagios y Apache, de manera que le pasemos los ficheros de configuración de Nagios en un directorio.
Para instalarlo en nuestro sistema es muy simple:
git clone --recurse-submodules https://github.com/Alferez/docker-nagios
cd docker-nagios
docker build --no-cache -t docker-nagios .
Con esto ya tenemos nuestro docker-nagios compilado, ahora solo tendremos que descomprimir el fichero que tenemos dentro de la carpeta default-config y editar los distintos ficheros de configuración al igual que el ejemplo que ya tenemos.
También podemos usar directamente la última versión y pasarle la configuración en una carpeta. Para ello ejecutamos el docker:
docker run --rm -p 80:80 -v /YOUR_CONFIGURATION_FOLDER:/usr/local/nagios/etc --name nagios alferez/nagios:latest
Actualización: La imagen ha sido actualizada a las últimas versiones. También tienes disponibles múltiples scripts para usar en la monitorización.
Configuración de Nagios
Como hemos dicho antes, la configuración de ejemplo la tenemos dentro de la propia carpeta de GitHub.
Entre los ficheros que existen, tenemos que tener en cuenta varias carpetas que veremos a continuación para que se usan:
commands.d
Es donde definimos los comandas que usaremos, ya que dentro de la configuración usaremos un nombre que le asociaremos (command_name), pero tenemos que definir ese command line que hará.
Su formato es:
define command{
command_name check_ftp
command_line $USER1$/check_ftp -H $HOSTADDRESS$ $ARG1$
}
Además tenemos los commandos que usaremos para la notificación. En nuestro caso por mail, pero podemos usar telegram o SMS.
contacts.d
Aquí es donde estaremos nosotros, las personas que gestionamos los servidores. Aquí es donde vamos a poner nuestro correo o nuestro movil para las notificaciones.
define contact{
contact_name nagiosadmin
alias nagiosadmin
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email yourmail@gmail.com
pager 666666666
}
contactgroups.d
Aquí es donde se crearán los grupos de notificaciones y donde se pondrán los grupos de persona que se monitorizarán.
define contactgroup {
contactgroup_name nagiosadmin
alias nagiosadmin
members nagiosadmin, nagiosadmin2, nagiosadmin3, nagiosadmin4
}
hosts.d
La parte más importante, ya que es donde se dan de alta los servidores. Si esta parte está mal, no se podrán comprobar luego sus servicios.
define host{
use generic-host
host_name servidor
alias servidor
address 192.168.1.100
check_command check-host-alive
max_check_attempts 2
contact_groups nagiosadmin
notification_interval 15
notification_period 24x7
notification_options d,u,r
}
hostgroups.d
Aquí es donde agrupamos los hosts creados en el paso anterior para tener más claro en que lugar se encuentras los apartados.
define hostgroup {
hostgroup_name office
alias office
members servidor, impresora, router
}
services.d
La segunda parte importante, aquí es donde especificamos que queremos comprobar en base al alias del servidor definido en el fichero hosts.d
define service{
use without_alarm-service
host_name servidor
service_description HTTP
check_command check_http
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 5
retry_check_interval 1
contact_groups nagiosadmin
notification_interval 15
notification_period 24x7
notification_options w,u,c,r
}
En caso de fallar, el aviso llegará al grupo nagiosadmin, que tenemos que tener creado. En caso de que alguno de los parámetros falle en cualquier definición, el servicio no arrancará.