Nagios es un sistema de monitorización de redes ampliamente utilizado, de código abierto, que vigila los equipos (hardware) y servicios (software) que se especifiquen, alertando cuando el comportamiento de los mismos no sea el deseado.
Más información en la Wikipedia: http://es.wikipedia.org/wiki/Nagios
Mostraré como instalar y configurar Nagios para monitorizar una red de equipos, concretamente utilizando una Raspberry Pi corriendo Raspbian, una variante de Debian, pero los ejemplos pueden extrapolarse a otras distribuciones con pocos cambios.
Los pasos que seguiré son:
- Instalar Nagios vía apt-get
- Añadir equipos, grupos y servicios a la configuración.
- Consejos avanzados.
- Enlaces de interés.
Partimos del punto en que el sistema operativo está funcionando y disponemos de acceso SSH.
-
Instalar Nagios vía apt-get:
Accedemos vía SSH al terminal, ya sea con Putty en Windows, con el Terminal en Mac OS o Linux y actualizamos nuestro apt-get:
sudo apt-get updatesudo apt-get upgradeLuego instalamos nagios3:
sudo apt-get install nagios3 nagios-plugins nagios-nrpe-pluginsudo apt-get install nagios-nrpe-server nagios-pluginsAparecerá una pantalla azul solicitando dos veces la contraseña de la administración Web de Nagios, será necesaria cada vez que queramos acceder al panel Web de gestión, el usuario es nagiosadmin (Captura de la pantalla).
Ya tenemos instalado el servicio y activo en la url: http://ip_del_terminal/nagios3 .
Ahora bien, lo interesante está en la configuración.
-
Añadir equipos, grupos y servicios a la configuración
Ya tenemos el panel de gestión accesible en la carpeta nagios3 del servidor web con el usuario «nagiosadmin» y la contraseña que establecimos al instalarlo, pero si accedemos podemos ver que sólo hay un equipo, el propio servidor que se «autoañade» al panel.
Lo óptimo es añadir equipos organizados en ficheros según su tipo, switches y routers en un fichero (switch.cfg), equipos Windows en otro (windows.cfg), etc…
El primero que añadiremos será nuestro propio router, ya que todo el mundo tiene uno siempre encendido, crearemos un fichero switch.cfg en la ruta: /etc/nagios3/objects/switch.cfg con el siguiente contenido:
# HOSTS DEFINITIONS # ROUTER 1 define host { use generic-host host_name router1 display_name Router1 address 192.168.1.1 check_period 24x7 check_interval 5 retry_interval 1 max_check_attempts 10 } # SERVICE DEFINITIONS define service { use generic-service host_name router1 service_description PING check_command check_ping!200.0,20%!600.0,60% normal_check_interval 5 retry_check_interval 1 }
Para crear el fichero desde cero puedes usar el comando:
sudo nano /etc/nagios3/objects/switch.cfgEn el primer bloque de código hemos añadido el host (router) y en el segundo hemos creado un servicio que hace ping cada 5 minutos, si falla, lo intenta cada minuto, devolviendo alerta crítica cuando el ping tarda más de 600ms y una alerta cuando supera los 200ms.
En la definición del Host tenemos ciertas propiedades y valores, los más importantes son:
- use: indica que tipo de máquina se va a analizar, por defecto sería «generic-host», esto aplica ciertas propiedades según las plantillas analizadas, veremos otras más adelante.
- host_name: es el nombre del host, es importante porque será nuestro identificador a la hora de asociar servicios por ejemplo.
- display_name: Nombre a mostrar en el panel de gestión.
- address: Dirección IP de la máquina a ser analizada.
- check_period: Es opcional e indica el periodo de actividad del host, se puede establecer a diferentes valores como por ejemplo 24×7 que indica que está siempre activo (24h 7 días), es posible definir periodos de tiempo (horarios de apertura de una tienda por ejemplo), más información acerca de los «time periods» en: http://nagios.sourceforge.net/docs/3_0/timeperiods.html.
- check_interval: Indica el intervalo de tiempo en el que se controlará el estado del host (DOWN/UP).
- retry_interval: Intervalo de tiempo de recomprobación cuando el intento de consulta de estado falla.
- max_check_attempts: Indica el máximo número de intentos de conectar con el host una vez que ha pasado al estado DOWN.
Las propiedades más importantes de la definición de los servicios son:
- use: indica el tipo de servicio, usaremos «generic-service».
- host_name: Establece el host o hosts (separados por comas) a los que afectará este servicio.
- service_description: Texto descriptivo de la funcionalidad del servicio.
- check_command: Es el comando que se lanzará contra el host, existen muchos predefinidos y podemos crear más, los comandos predefinidos están en la ruta /usr/lib/nagios/plugins, hay mucha información en Google de cómo funciona y cómo parametrizar cada comando.
- nombre_check_interval: El tiempo transcurrido entre cada ejecución del comando.
- retry_check_interval: El tiempo que transcurre desde que hay una ejecución del comando fallida y el siguiente intento.
Ahora que hemos añadido un nuevo host y nuevo servicio en el archivo switches.cfg, tenemos que decirle a Nagios que lea ese fichero al iniciar el servicio, para ello tenemos que editar el fichero nagios.cfg situado en: /etc/nagios3/nagios.cfg, y quitar la almohadilla (#) de la linea que dice:
cfg_file=/etc/nagios3/objects/switch.cfgDe esta forma ya no es un comentario y la ejecutará al iniciar el servicio.
Ahora, para que los cambios tengan efecto y aparezca nuestro nuevo host y servicio en el panel tenemos que reiniciar el servicio nagios.
[themoneytizer id=»16871-1″]Reiniciar el servicio Nagios3 para que los cambios tengan efecto:
sudo service nagios3 restartCon esto ya deberíamos ver nuestro router en el panel de gestión, en la sección Hosts, y en la sección servicios, deberíamos ver el ping que se le hace al router, captura de pantalla:
Añadir Equipos Windows y Linux
Antes de entrar en profundidad con los servicios, en necesario catalogarlos en dos tipos, servicios «públicos» y servicios «privados», los servicios «públicos» serían aquellos de los cuales se puede obtener información sin necesidad de acreditarse, servicios ofrecidos por el servidor como por ejemplo HTTP, FTP, POP3, IMAP.
Luego existen otro tipo de servicios, los llamados «privados» porque son internos del equipo y no se ofrecen al exterior, como por ejemplo el uso de la memória, la carga de la CPU, el espacio de disco, los procesos, los servicios y demás, son los más interesantes y nos proporcionan un información muy valiosa.
Para poder monitorizar servicios «privados» es necesario instalar un agente en el equipo que actúa de proxy entre el servidor nagios y el equipo a monitorizar enviando la información.
El que voy a explicar es aparte del más sencillo, el más utilizado; NSClient++.Agente de nagios para Windows NSClient++ (28MB): http://sourceforge.net/projects/nscplus/El proceso de instalación del agente sería:
[themoneytizer id=»16871-1″]Reemplazar la dirección 192.168.1.100 por la ip de tu servidor nagios, y el password evidentemente.
Ya teniendo instalado NSClient++ en la maquina Windows pasamos a darlo de alta en nuestro sistema nagios.
Hemos visto como añadir un «generic-host» a la configuración, creando un fichero switch.cfg.
Ahora añadiremos un PC con Windows a la monitorización de Nagios, como hemos visto antes, separamos los diferentes tipos de hosts por ficheros, ahora crearemos el fichero /etc/nagios3/objects/windows.cfg en donde especificaremos la definición de un host Windows y sus servicios, para crear el fichero desde el terminal usamos:
sudo nano /etc/nagios3/objects/windows.cfgAñadiremos el siguiente contenido, muy similar al anterior del router:
# HOST DEFINITIONS define host { use windows-server host_name miservidor alias Mi Servidor Windows address 192.168.1.104 } # SERVICE DEFINITIONS # Obtenemos la versión instalada de NSClient++ define service { use generic-service host_name miservidor service_description Versión de NSClient++ check_command check_nt!CLIENTVERSION } # Carga de CPU define service { use generic-service host_name miservidor service_description Carga de CPU check_command check_nt!CPULOAD!-l 5,80,90 }
Vemos que en este ejemplo hemos definido el Host (miservidor) del tipo «windows-server» y a él le hemos agregado dos servicios, obtendremos la carga de CPU y la Versión del agente que tienen instalado, los dos utilizando el comando check_nt que da para mucho juego como veremos más adelante.
El valor del campo «host_name» de la definición de servicio indica a que equipos afecta dicho servicio, en nuestro caso únicamente a «miservidor».
También tenemos que modificar el fichero /etc/nagios3/nagios.cfg para quitar la almohadilla (#) de las siguientes lineas:
cfg_file=/etc/nagios3/objects/windows.cfgy
cfg_file=/etc/nagios3/objects/templates.cfgNota: Asegúrate de que existe el fichero /etc/nagios3/objects/templates.cfg, si no lo tienes, puedes copiarlo de aquí: http://www.tropiezosenlared.com/ficheros/nagios/templates.cfg, es importante ya que ahi están las plantillas más importantes como la que hemos usado en el ejemplo: «windows-server», yo lo he tenido que copiar.
Volvemos a reiniciar el servicio nagios3 para que los cambios se apliquen:
sudo service nagios3 restartSi entramos ahora en el panel de gestión de nagios veremos que ya tenemos nuestra maquina windows listada y sus dos servicios asociados.
Más ejemplos de servicios:
Hemos visto cómo obtener la versión de NSClient instalada y la carga de CPU, veamos ahora otros ejemplos, no pongo la definición completa del servicio, solo el comando, el resto de la definición es simplemente como las dos que hemos visto antes, cambiando el service description por un texto descriptivo.
- Uptime, o tiempo desde el arranque:
check_command check_nt!UPTIME
- Uso de memória:
check_command check_nt!MEMUSE!-w 80 -c 90
Los parámetros indican los umbrales de alerta para el Warning (-w) y para el Critical (-c), es decir, al 80% de uso de memoria hará una advertencia y al 90% un crítico.
- Espacio de disco usado:
check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90
Al 80% de dico C:\ usado tendremos un Warning y al 90% un Critical.
- Estado de un servicio:
check_command check_nt!SERVICESTATE!-d SHOWALL -l filezillaserver
Este comando devuelve un Critical cuando el servicio «filezillaserver» está parado.
- Estado de un proceso (aplicación):
check_command check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
Devolverá un Critical si el proceso Explorer.exe no está en ejecución.
- Estado del servicio HTTP:
check_command check_http
Devolverá Critical si el servicio HTTP no esta funcionando.
- Estado del servicio HTTP por el puerto 4000:
check_command check_http!-p 4000
Comprobará el estado del servicio HTTP por el puerto 4000.
- Estado del servicio de correo SMTP:
check_command check_smtp
- Estado del papel de una impresora:
check_command check_printer!paper!1
Devolverá el estado del papel den la bandeja de la impresora, Critico si la impresora está sin papel.
Existen infinidad de definiciones de servicios, yo he listado los más comunes, pero al poder añadir comandos de terceros en la carpeta plugins podemos hacer prácticamente cualquier comprobación, basta con indagar un poco.
[themoneytizer id=»16871-2″]Contraseña en el NSClient++:
Si hemos especificado una contraseña en la instalación del agente NSClient++ será necesario especificarla en los comandos, para ello lo más sencillo es redefinir el comando «check_nt» para que incluya las credenciales.
Editaremos el fichero /etc/nagios3/commands.cfg con el comando:
sudo nano /etc/nagios3/commands.cfgy añadiremos las siguientes lineas reemplazando «PASSWORD» por la contraseña establecida en NSClient++:
define command{ command_name check_nt command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s PASSWORD -v $ARG1$ $ARG2$ }
y de nuevo reiniciamos el servicio nagios3
sudo service nagios3 restartNota: Si nos arroja un error de definición duplicada deberemos comentar las lineas de la definición del comando check_nt en el fichero /etc/nagios-plugins/config/nt.cfg.
Ahora que ya tenemos nuestro router y nuestro PC pasamos a unos consejos para administrar alguna red más completa de una forma óptima.
Hostgroups, grupos de equipos:
Lo lógico en una red compleja es agrupar los equipos por tipo o ubicación.
Pongámonos en situación, una oficina con 50 PCs, 15 impresoras, 4 routers, 7 switches, 30 cámaras IP, 3 servidores, etc..
Para una correcta gestión, definiremos grupos de equipos a los cuales podemos aplicarles servicios.
Un ejemplo de creación tres equipos, dos grupos y dos servicios, fíjate bien cómo están definidos los grupos, en el grupo «publicservers» no usamos la clave «members» ya que en la propia definición del host especificamos a que grupo pertenece, en cambio en el grupo «privateservers» especificamos que equipos son los miembros, en este caso sólo uno, «database».
Son dos formas de hacer lo mismo, incluso se pueden combinar.En los servicios hemos definido la clave «hostgroup_name» en lugar de «host_name» como hemos visto en ejemplos anteriores, también se pueden combinar de forma que el servicio afectaría tanto a los grupos incluidos en «hostgroup_name» como a los equipos de «host_name».
Multiples valores para «hostgroup_name» y «host_name» separados por comas.
# HOST DEFINITIONS define host { host_name webserver alias Web Server (Public) address 192.168.1.80 hostgroup publicservers } define host { host_name ftpserver alias FTP Server (Public) address 192.168.1.21 hostgroup publicservers } define host { host_name database alias Database Server address 192.168.1.33 } # HOSTGROUPS DEFINITIONS define hostgroup { hostgroup_name publicservers alias Public Servers } define hostgroup { hostgroup_name privateservers alias Private Servers members database } # SERVICE DEFINITIONS define service { service_description uptime use generic-service hostgroup_name publicservers check_command check_nt!UPTIME } define service { service_description memuse use generic-service hostgroup_name privateservers check_command check_nt!MEMUSE!-w 80 -c 90 }
-
Consejos avanzados:
- Hacer que un servicio afecte a todos los equipos: En lugar de especificar el nombre de un host o de un hostgroup,pondremos un asterisco, de forma:
define service { host_name * service_description Check Inet Speed }
- Hacer que a un equipo le afecten todos los servicios: Mediante «serviceescalation» podemos hacer que todos los servicios definidos afecten a un host concreto:
define serviceescalation { host_name servidor1 service_description * }
Es importante el asterisco ya que sin él no funcionará.
- Exclusión de equipos: Podemos excluir algunos equipos de un servicio de forma que aunque en la clave «hostgroup_name» del servicio esté especificado un grupo al que pertenece el equipo que queremos excluir, éste no será incluido en el servicio por estar explícitamente excluido.
define service { hostgroup_name Servers,Desktops,Laptops,!MyMachines host_name !FileServer,!BossPC,GirlFriendPhone service_description Ping }
En ese ejemplo, excluimos todos los equipos del grupo «MyMachines» y los equipos concretos «FileServer» y «BossPC». Para excluir un equipo o un grupo le ponemos delante del nombre un símbolo de admiración (!).
- Grupos de servicios: Es posible hacer grupos de servicios para que sea más rápida la gestión. Por ejemplo, agrupar los servicios PING, HTTP, FTP y SSH en un grupo de servicios llamado «ServerServices».
define servicegroup { servicegroup_name ServerServices alias Server Services members HTTPService, FTPService, SSHService, PingService }
- Crear un grupo que contenga todos los equipos: Creamos un hostgroup y en la calve «members» especificamos un asterisco:
define hostgroup { hostgroup_name myHostGroup members * }
La cosa no queda ahi, esto no es más que una guía básica para iniciar un proyecto de monitorización con nagios, es muy versatil y permite mucha configuración y mucha más optimización.
- Hacer que un servicio afecte a todos los equipos: En lugar de especificar el nombre de un host o de un hostgroup,pondremos un asterisco, de forma:
-
Enlaces de interés:
- Web Oficial Nagios: http://www.nagios.org/.
- Nagios Object Definitions: http://nagios.sourceforge.net/docs/3_0/objectdefinitions.html.
- Time-Saving Tricks for Object Definitions: http://nagios.sourceforge.net/docs/3_0/objectdefinitions.html.
La información es poder.
Hola , me llamo diego queria saber si es indistintinto con sub redes es decir
mi sub red es 192.168.2.0/24
define host {
host_name ftpserver
alias FTP Server (Public)
address 10.10.10.12
hostgroup publicservers
}
define host {
host_name database
alias Database Server
address 10.10.30.10
tengo mi ubuntu trabajando en un entorno virtual machine dentro de un windows 7
placa de red en modo bridge
y el router que me entrega la direccion tiene enlaces gateway to gateway
con las siguientes sub redes
10.10.0.0/24
10.50.0.0/24
10.60.0.0/24
El contenido de windows.cfg que has puesto no es correcto, he hecho copia y pega y al intentar reiniciar el servicio de nagios da error.
Y que error te da?
El error que daba era que no podía reiniciar el servicio porque tenia errores el windows.cfg
No obstante he cogido una plantilla de ese fichero y he ido completando todo, no obstante ahora tengo el problema de que al añadir la máquina windows todo me da «CRITICAL – Socket timeout».
Te adjunto un pantallazo:
https://gyazo.com/f68075c7248e54f615078b59d8534cf1
Por defecto Nagios concede 10 segundos para obtener una respuesta del servidor, si en esos 10 segundos no recibe respuesta, provoca el error «Socket Timeout», prueba a aumentar ese lapso de tiempo a 20 segundos.
Es necesario editar el fichero commands.cfg, ubicado en /usr/local/nagios/etc/objects/commands.cfg o en /etc/nagios/commands.cfg debes añadir el parámetro «-t 20» a cada comando, por ejemplo:
ANTES:
define command {
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
DESPUÉS:
define command {
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -t 20
}
Lo primero agradecerte tus respuestas, al menos me hace no sentirme solo 🙂
He formateado de nuevo la Raspberry y he seguido este manual del propio Nagios.
https://support.nagios.com/kb/article.php?id=96#Debian
Y en esta instalación que he realizado, no veo en el commands.cfg ubicado en /usr/local/nagios/etc/objects/ la línea que comentas del check_nrpe.
La meto a mano en el commands.cfg??
Todos los servicios que tengo monitorizados de ping, http, etc… eso si funcionan, por lo que parece que el problema es con los que no están definidos por así decirlo.
Espero tu respuesta, y tal y como te he dicho muchas gracias por tu ayuda.
En el servidor has instalado el agente?
https://sourceforge.net/projects/nscplus/
el check_nrpe no tienes porque tenerlo, es un ejemplo, simplemente añade “-t 20” al final de cada comando para ampliar el tiempo de espera de respuesta de comando.
Otra opción es revisar el firewall de windows, quizá está bloqueando las conexiones, o tu antivirus, si usas.
El puerto que usa NSCPLUS es 12489.
En la máquina que quiero monitorizar instalé NSClient++ y lo descargué de aquí: https://www.nsclient.org/download/
También pensé en que podría ser tema del firewall, o del McAfee, pero he desactivado ambos y sigue ocurriendo
Alguna idea más?
Se me ocurre probar a monitorizar otra máquina Linux, para corroborar que es problema únicamente con las máquinas Windows.
Muchas gracias de nuevo!
Puede comprobar si el puerto está escuchando mediante el siguiente comando desde otra maquina en la misma red:
nc -z 192.168.1.22 12489
esto comprueba si el puerto 12489 está abierto y escuchando en la ip 192.168.1.22
El resultado debería ser algo así:
Connection to 192.168.30.11 port 12489 [tcp/*] succeeded!
He ejecutado el comando que me comentas, pero no ha funcionado, quiero decir ha funcionado, pero no me devuelve nada, simplemente lo ejecuta y me devuelve el prompt. Lo he ejecutado desde la propia raspberry contra la ip del host windows.
No obstante he ejecutado el nmap «ip de host windows» y me ha dado el siguiente reporte, no veo el puerto del nagios me hace sospechar.
Te adjunto el resultado del comando
https://gyazo.com/bf2fdc924790d66969079a42495a941e
Estoy probando a lanzar el comando /usr/local/nagios/libexec/check_nt -H 192.168.5.63 -p 12489 -s Soporte123 -v UPTIME y me devuelve «NSClient – ERROR: No performance data from command: check_uptime»
https://gyazo.com/e35f75f58d7a9746bed118568d0e293d
Ya que estoy, te comento que esto que me devuelve el terminal, también me aparecía hace unos días cuando lo instalé por primera vez en el «Status Information» del nagios accediendo por web. (me ocurria con todos los servicios monitorizados, con el check_drivesize, check_uptime….)
por que no me crea la carpeta objects dentro de nagios 3
?
Hola, se que el post es antiguo, pero es de mucha utilidad. Soy nuevo en el ámbito de redes, y se me ocurrió hacer un proyecto con protocolo SNMP y un raspberry. los directorios cambiaron en Nagios bastante.
Será que puedas hacer uno actualizado?, te estaria bastante agradecido.
Saludos y exitos! 🙂
Hola, mi nombre es Rait, soy estudiante de la carrera de telecomunicaciones, y me apasiona el área de gestión y monitoreo de redes digitales. Quiero realizar un proyecto con protocolo SNMP con un Raspberry Pi como el servidor, dentro de este NAGIOS.
Me encontré tu post y es antiguo lastimosamente cambió mucho, no existe el directorio objects y en vez de este directorio tenemos el conf.d
Lo mas curioso es que el archivo nagios.cfg aún tiene los ficheros descritos en la dirección de objects y este ultimo de alguna manera me confunde al momento de implementar el NMP para windows ya que no compila, ni creando la carpeta objects, ni moviendo el fichero que mencionaste para windows al directorio conf.d
Si actualizaras este tutorial, que te estoy realmente agradecido por encontrar un foro así en español y aportar a la comunidad científica. Con la ultima version de Nagios.
De antemano muchas gracias
Saludos y éxitos!!!
El post es de hace 4 años, intentaré actualizarlo en los próximos días para solucionar los problemas que estais teniendo.
Muchas gracias, estare al pendiente la implementación de Nagios en la Raspberry ahora con el actual S.O. Raspbian Stretch.
Saludos!
Hola DidE lograste actualizar el post, ando esperando con ansias.
Me sirvio mucho tu instructivo ya me funcionan algunos equipos de pruebas. Como puedo ahora monitorear performance? trafico de una interface, contero de errores mediante gráficas?. M. Gracias!!!
Buenas alguien me puede ayudar como poder monitorear el trafico de red con nagios se lo agradeceria mucho