Monitoreo Servidores · 6 min read · Oct 18, 2025

Monitoreo de Servidores Con Icinga En Debian Squeeze - Página 3

4 Agregando Un Servidor Remoto (server2) A Icinga

Monitorear localhost está bien, pero, por supuesto, sería aún mejor si pudiéramos monitorear todos nuestros servidores en un solo lugar. Esto es posible con Icinga, y este capítulo describe cómo podemos agregar nuestro segundo servidor Debian Squeeze (server2.example.com) a la configuración.

Para hacer esto, necesitamos instalar el servidor Nagios NRPE (Nagios Remote Plugin Executor) en server2, y el plugin Nagios NRPE en server1. El servidor NRPE escuchará en server2; server1 se conectará a él usando el plugin NRPE y pasará comandos que el servidor NRPE ejecutará en server2; este devolverá los resultados a server1.

Primero instalamos el paquete nagios-nrpe-plugin en server1:

server1:

apt-get install nagios-nrpe-plugin

Contraseña de administración web de Nagios: <– nagiosadmin_password
Confirmación de contraseña: <– nagiosadmin_password

Ahora vamos a server2:

server2:

Instalamos el paquete nagios-nrpe-server:

apt-get install nagios-nrpe-server

Nombre de grupo de trabajo/dominio: <– WORKGROUP

Ahora abrimos /etc/nagios/nrpe.cfg:

vi /etc/nagios/nrpe.cfg

Debemos configurar el servidor NRPE para permitir que server1 (IP: 192.168.0.100) se conecte, por lo tanto, agregamos 192.168.0.100 a la línea allowed_hosts:

| [...] # DIRECCIONES IP PERMITIDAS # Esta es una lista opcional de direcciones IP o nombres de host # que están permitidos para comunicarse con el demonio NRPE. # # Nota: El demonio solo realiza una verificación rudimentaria de la IP # del cliente. Recomendaría encarecidamente agregar entradas en su /etc/hosts.allow # para permitir que solo el host especificado se conecte al puerto # en el que está ejecutando este demonio. # # NOTA: Esta opción se ignora si NRPE se está ejecutando bajo inetd o xinetd allowed_hosts=127.0.0.1,192.168.0.100 [...] |

(Si no haces esto, recibirás el siguiente error cuando ejecutes

/usr/lib/nagios/plugins/check_nrpe -H 192.168.0.101

en server1:

root@server1:/etc/nagios-plugins/config# /usr/lib/nagios/plugins/check_nrpe -H 192.168.0.101  
CHECK_NRPE: Error - No se pudo completar el apretón de manos SSL.  
root@server1:/etc/nagios-plugins/config#

)

Además, server1 necesita ser permitido para pasar argumentos de línea de comandos al servidor NRPE, así que aún en el mismo archivo configuramos dont_blame_nrpe a 1:

| [...] # PROCESAMIENTO DE ARGUMENTOS DE COMANDO # Esta opción determina si el demonio NRPE permitirá a los clientes # especificar argumentos a los comandos que se ejecutan. Esta opción solo funciona # si el demonio fue configurado con la opción del script de configuración --enable-command-args. # # * ¡HABILITAR ESTA OPCIÓN ES UN RIESGO DE SEGURIDAD! * # Lea el archivo SECURITY para obtener información sobre algunas de las implicaciones de seguridad # de habilitar esta variable. # # Valores: 0=no permitir argumentos, 1=permitir argumentos de comando dont_blame_nrpe=1 [...] |

(Si no haces esto, verás el error

CHECK_NRPE: Se recibieron 0 bytes del demonio. Verifique los registros del servidor remoto para mensajes de error.

para muchos chequeos de servicio remoto en la interfaz web de Icinga, y en /var/log/syslog en server2 verás estos errores:

Aug 23 14:20:20 server2 nrpe[11496]: Error: ¡La solicitud contenía argumentos de comando, pero la opción de argumento no está habilitada!  
Aug 23 14:20:20 server2 nrpe[11496]: La solicitud del cliente era inválida, saliendo...

)

Finalmente, debemos agregar definiciones de comandos para cada chequeo de servicio que queramos ejecutar en server2 y que no esté ya definido. Quiero ejecutar los chequeos check_procs, check_all_disks y check_mysql_cmdlinecred en server2; estos no están definidos en /etc/nagios/nrpe.cfg, así que los agrego ahora (también quiero ejecutar los chequeos check_users y check_load, pero estos ya están definidos):

| [...] command[check_procs]=/usr/lib/nagios/plugins/check_procs -w 250 -c 400 command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w '20%' -c '10%' -e command[check_mysql_cmdlinecred]=/usr/lib/nagios/plugins/check_mysql -H localhost -u 'nagios' -p 'howtoforge' [...] |

(Si no haces esto, recibirás errores como

NRPE: Comando 'check_all_disks' no definido  
NRPE: Comando 'check_mysql_cmdlinecred' no definido  
NRPE: Comando 'check_procs' no definido

en la interfaz web de Icinga.)

Como ves, he codificado los argumentos de línea de comandos porque usar variables como command[check_procs]=/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ no funcionó para mí. Pero aún así, cuando configuramos los chequeos de servicio para server2 en server1, tendremos que pasar argumentos de línea de comandos a estos chequeos; server2 ignorará estos porque he codificado los argumentos de línea de comandos en /etc/nagios/nrpe.cfg, pero si los dejas fuera, recibirás errores como /usr/lib/nagios/plugins/check_nrpe: option requires an argument – ‘a’ en la interfaz web de Icinga.

Ahora guarda el archivo y reinicia el servidor NRPE:

/etc/init.d/nagios-nrpe-server restart

Ahora verifica si el servidor NRPE está escuchando:

netstat -tap | grep nrpe
root@server2:~# netstat -tap | grep nrpe  
tcp        0      0 *:nrpe                  *:*                     LISTEN      2132/nrpe  
root@server2:~#

Ahora regresa a server1…

server1:

… y verifica si puede conectarse al servidor NRPE en server2:

/usr/lib/nagios/plugins/check_nrpe -H 192.168.0.101

La salida debería ser la siguiente en caso de éxito:

root@server1:~# /usr/lib/nagios/plugins/check_nrpe -H 192.168.0.101  
NRPE v2.12  
root@server1:~#

Ahora regresa a server2:

server2:

Queremos verificar MySQL en server2; porque usamos el demonio NRPE, podemos ejecutar el chequeo localmente en server2, es decir, no tenemos que abrir MySQL al exterior para permitir que server1 ejecute el chequeo. Por lo tanto, creo el usuario de MySQL nagios para localhost y localhost.localdomain en lugar de para 192.168.0.100 y server1.example.com:

mysql -u root -p
GRANT USAGE ON *.* TO nagios@localhost IDENTIFIED BY 'howtoforge';  
GRANT USAGE ON *.* TO [email protected] IDENTIFIED BY 'howtoforge';  
FLUSH PRIVILEGES;
quit;

Ahora volvemos a server1…

server1:

… y creamos la configuración de Icinga para server2:

vi /etc/icinga/objects/server2_icinga.cfg

| define host{ use generic-host host_name server2.example.com alias server2 address 192.168.0.101 } define service{ use generic-service host_name server2.example.com service_description PING check_command check_ping!100.0,20%!500.0,60% } define service{ use generic-service ; Nombre de la plantilla de servicio a usar host_name server2.example.com service_description Espacio en Disco check_command check_nrpe!check_all_disks!20%!10% } define service{ use generic-service host_name server2.example.com service_description Usuarios Actuales check_command check_nrpe!check_users!20!50 } define service{ use generic-service ; Nombre de la plantilla de servicio a usar host_name server2.example.com service_description Procesos Totales check_command check_nrpe!check_procs!250!400 } define service{ use generic-service ; Nombre de la plantilla de servicio a usar host_name server2.example.com service_description Carga Actual check_command check_nrpe!check_load!5.0!4.0!3.0!10.0!6.0!4.0 } define service{ use generic-service host_name server2.example.com service_description MySQL check_command check_nrpe!check_mysql_cmdlinecred!nagios!howtoforge } define service{ use generic-service host_name server2.example.com service_description SMTP check_command check_smtp } define service{ use generic-service host_name server2.example.com service_description POP3 check_command check_pop } define service{ use generic-service host_name server2.example.com service_description IMAP check_command check_imap } |

(Si he mencionado antes, aunque he codificado los argumentos de línea de comandos para algunos comandos en /etc/nagios/nrpe.cfg en server2, aún necesitamos agregar argumentos de línea de comandos a ciertos chequeos aquí.)

Como ves, uso check_nrpe para algunos chequeos y paso el chequeo real (como check_all_disks) como un argumento de línea de comandos a check_nrpe. Estos son los chequeos que se ejecutarán localmente por el servidor NRPE en server2. check_nrpe no es necesario para todos los chequeos. Chequeos que prueban una conexión desde el exterior como check_ping o check_smtp pueden ser ejecutados desde server1.

Para verificar los servicios SSH y HTTP en server2, podemos O agregar las siguientes secciones a /etc/icinga/objects/server2_icinga.cfg…

| [...] define service { use generic-service host_name server2.example.com service_description SSH check_command check_ssh } define service { use generic-service host_name server2.example.com service_description HTTP check_command check_http } |

O agregamos server2.example.com a los grupos de hosts http-servers y ssh-servers en /etc/icinga/objects/hostgroups_icinga.cfg:

vi /etc/icinga/objects/hostgroups_icinga.cfg

| # Algunas definiciones de grupos de hosts genéricos # Un grupo de hosts simple con comodín define hostgroup { hostgroup_name all alias Todos los Servidores members * } # Una lista de tus servidores Debian GNU/Linux define hostgroup { hostgroup_name debian-servers alias Servidores Debian GNU/Linux members localhost,server2.example.com } # Una lista de tus servidores web define hostgroup { hostgroup_name http-servers alias Servidores HTTP members localhost,server2.example.com } # Una lista de tus servidores accesibles por ssh define hostgroup { hostgroup_name ssh-servers alias Servidores SSH members localhost,server2.example.com } |

Reinicia Icinga:

/etc/init.d/icinga restart

Después deberías encontrar server2 en la interfaz web de Icinga:

Aquí están los chequeos de servicio para server2:

Si has agregado server2 a los grupos de hosts, debería estar listado bajo Resumen de Servicios Para Todos los Grupos de Hosts también:

5 Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.