Recientemente comencé a usar Nagios para monitorear alrededor de 25 servidores (principalmente virtuales, algunos independientes). La mayoría de los servidores (incluido el propio host de Nagios) ejecutan Ubuntu 14.04 LTS, y algunos ejecutan 12.04 LTS. Por lo tanto, pensé que podría utilizar NRPE y terminar de una vez.
Configurar NRPE ha resultado ser bastante complejo para mí. Por ejemplo, para un comando simple check_disk, tuve que especificar manualmente qué partición verificar excluyendo todas las demás particiones/sistemas de archivos, como se muestra a continuación:
command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 57% -x /dev -x /run -x /run/lock -x /run/shm -x /run/user -x /sys/fs/cgroup
De lo contrario, mis umbrales de advertencia y crítico fueron inmediatamente activados por sysfs, proc u otras particiones.
Luego eché un vistazo al monitor de servicio base que el host de Nagios realiza sobre sí mismo. Está listado dentro de /usr/local/nagios/etc/localhost.cfg y contiene lo siguiente (¡lo siento! ¡No entiendo por qué no se formatea correctamente!)
define service{
use local-service ; Name of service template to use
host_name localhost
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Root Partition
check_command check_local_disk!20%!10%!/
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Current Users
check_command check_local_users!20!50
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Total Processes
check_command check_local_procs!250!400!RSZDT
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Current Load
check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Swap Usage
check_command check_local_swap!20!10
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description SSH
check_command check_ssh
notifications_enabled 0
}
define service{
use local-service ; Name of service template to use
host_name localhost
service_description HTTP
check_command check_http
notifications_enabled 0
}
Lo que resulta en esto en el tablero:
Esto es perfecto para mí. Esto es exactamente lo que quiero que muestre cada host que agrego. En lugar de perder el tiempo con comandos personalizados, ¿cómo debo exactamente "copiar" esto a cada host a través del archivo de configuración NRPE para ver todos estos servicios específicos para cada host que agrego? Está claro que esto ya está aquí y ya funciona en localhost. Estoy luchando por comprender la organización necesaria para que esto suceda.
Gracias por todos y cada uno de los consejos.
Respuesta1
No hace mucho escribí un script de instalación automática NRPE realmente bueno que creo que puede ayudarte si lo editas para adaptarlo a tus necesidades. El script incluye muchas comprobaciones integradas que se agregan al nrpe.cfg
archivo de cada host. Es decir, puede configurar las comprobaciones que sean relevantes para usted y asegurarse de que cada host que ejecuta el script también las tenga, eso es del lado del cliente.
Un enlace al guión:Aquí.
En lo que respecta al lado del servidor (Nagios), puede instalar un Administrador de configuración de Nagios como NagioSQL, por ejemplo, que le ayudará a administrar sus hosts y servicios de una manera más conveniente a través de una GUI.
Más que eso, para asegurarse de que todos sus hosts tengan estas comprobaciones que mostró, simplemente cree un grupo de servicios que incluya todos estos servicios (verificaciones) que desea monitorear y luego simplemente adjunte este grupo de servicios a cada host que monitoree.
Déjame decirte lo que hice en mi empresa, quería asegurarme de que cada servidor fuera monitoreado con la check_load
verificación, pero como no tenemos una línea base de hardware en la empresa, lo que significa que cada servidor tiene especificaciones diferentes y check_load
se calcula por núcleos/cpu. en la máquina, agregué al módulo "Nagios_client" en nuestro servidor Puppet un custom_fact
que identifica cuántos procesadores existen en una máquina y configura Nagios check_load
en consecuencia.
Entonces, por ejemplo, digamos que el servidor1 tiene 4 CPU, lo que significa que una carga de 2,8 es ideal (0,7 por CPU). Puppet facter
identifica el número de CPU y luego edita el servidor nrpe.cfg
de esta manera:
command[check_load]=/usr/local/nagios/libexec/check_load -w 2.9,3.0,3.1 -c 4.0,5.0,6.0
Luego, en NagioSQL, por ejemplo, puede utilizar la "función de Importación" que le permite importar *.cfg
archivos que se cargarán en Nagios como Hosts y Servicios. Por lo tanto, puede crear un host.cfg
archivo y, a través de un script, duplicarlo por host que desea monitorear y simplemente cambiar el nombre de host/ip de cada máquina y esto lo llevará a un paso más hacia configuraciones más automáticas.
En mi caso, por ejemplo, Puppet es capaz de entender que se está ejecutando por primera vez en una máquina y luego también creó el host.cfg
archivo correspondiente en Nagios.
Creo que con Puppet + NagioSQL tu administración de Nagios sería una tarea mucho más sencilla.
Con respecto a su dificultad para configurar cualquier verificación... Siempre puede escribir su propio script y configurar Nagios para que lo ejecute por usted. Por ejemplo, tomemos su check_disk
comando, es un comando muy rico que le permite mostrar todo tipo de datos que son innecesariamente importantes para usted.
Tuve el mismo problema con check_procs
, otro comando muy rico que te brinda todo tipo de datos... que no necesitaba, así que escribí un script de verificación simple que hace exactamente lo que necesito y lo configuré en Nagios. Ejemplo:
#!/bin/bash
# This script checks for running processes for mt.js and adb-server.js
# Script by Itai Ganot 2015 .
process="$1"
appname=$(basename $0)
if [ -z "$1" ]; then
echo "Please specify a process to check"
exit 1
fi
ps -ef | grep "$process" | egrep -v "grep|$appname" &>/dev/null
if [ "$?" -eq "0" ] ; then
stat="OK"
exitcode="0"
msg="Process $process is running"
else
stat="Critical"
exitcode="2"
msg="There are currently no running processes of $process"
fi
pid=$(ps -ef | grep "$process" | egrep -v "grep|$appname" | awk '{print $2}')
echo "$stat: $msg Process PID: $pid"
exit $exitcode
Me da menos información que la real check_procs
pero me da justo la información que necesito.
Entonces, para abreviar, si su check_disk
comando le dificulta configurarlo, simplemente cree su propio script, esa es la belleza de Nagios.
Espero haberte ayudado.
Respuesta2
Necesita algún tipo de software de gestión de configuración para configurar e instalar el demonio nrpe en cada host remoto, así como implementar las configuraciones y, en última instancia, sus complementos.
Puedo sugeriransiblepara esta tarea.
https://github.com/bobmaerten/ansible-role-nagios-nrpe-server