Durante esta serie de artículos sobre Monitorización de Servicios de Solaris 10 con Nagios hemos visto las diferentes alternativas que tenemos. En esta ocasión, y como última parte de la serie, vamos a ver un plugin de Nagios que nos permite monitorizar remótamente las máquinas sin tener que utilizar SSH.
En la Primera Parte de Monitorización de Servicios de Solaris 10 con Nagios hemos visto cómo podemos utilizar unos pequeños plugins para <localmente> hacer checks a <svc> -básicamente es un warper del comando <svcs>-, en la Segunda Parte de Monitorización de Servicios de Solaris 10 con Nagios hemos visto cómo utilizar SSH para poder acceder remótamente al sistema de check
En esta ocasión hablaremos de NPRGE, un plugin de Nagios que nos permitirá monitorizar los servicios remotamente a través de un servicio que escucha en un puerto determinado.
La ventaja de este plugin es que la carga del sistema no se ve tan afectada -recordar que en la Parte 2 hablábamos de utilizar SSH- ya que el servicio consume menos recursos y no tiene que estar creando y destruyendo sesiones SSH. Sin embargo no todo son buenas noticias. El uso de este plugin -mejor dicho, una configuración incorrecta- hace que tengamos que tener mucho cuidado ya que abre un puerto y por lo tanto, debemos blindar su acceso.
Para aquellos que no tengais tiempo -o ganas- de compilar los paquetes os dejo aquí un par de tar.gz con las versiones compiladas para NRPE Solaris 10 SPARC y NRPE Solaris 10 x86, que incluyen los archivos para Solaris 10 SMF.
Instalación de NPRGE en Solaris 10
La instalación del plugin en Solaris 10 no requiere de gran cosa, sin embargo, deberemos hacer algún cambio en el código fuente para que compile sin problemas. Además, si queremos incluir soporte SSL -muy recomendable- deberemos tener OpenSSL instalado.
Para evitar tener que ir instalando OpenSSL por todos los host podemos utilizar el que viene incluido en Solaris 10 </usr/sfw>, aunque es de 32bits nos servirá. Por ello, he decidido utilizar como compilador <gcc> y el OpenSSL incluido en Solaris 10.
Como os he comentado, antes de poder compilar correctamente el plugin, debemos hacer un pequeño ajuste en el código fuente, concretamente en <src/nrpe.c> con estas líneas de código:
else if(!strcmp(varvalue,"authpriv"))
log_facility=LOG_AUTHPRIV;
else if(!strcmp(varvalue,"ftp"))
log_facility=LOG_FTP;
En Solaris 10, los niveles de log <LOG_AUTHPRIV> y <LOG_FTP> no están definidos, y por lo tanto, la compilación falla con el siguiente error:
nrpe.c: In function `get_log_facility':Para solucionarlo, tenemos dos opciones: Eliminar esos niveles de log o Sustituirlos por uno definido. En nuestro ejemplo, vamos a sustituirlos por <LOG_AUTH> en ambos casos, así:
nrpe.c:618: error: `LOG_AUTHPRIV' undeclared (first use in this function)
nrpe.c:618: error: (Each undeclared identifier is reported only once
nrpe.c:618: error: for each function it appears in.)
nrpe.c:620: error: `LOG_FTP' undeclared (first use in this function)
make[1]: *** [nrpe] Error 1
else if(!strcmp(varvalue,"authpriv"))Una vez explicado el problema -y con la solución- vamos a proceder a instalar el plugin -podemos utilizar una máquina de pruebas para realizar la compilación, ya que luego copiaremos los archivos necesarios a los hosts que queramos monitorizar-
log_facility=LOG_AUTH;
else if(!strcmp(varvalue,"ftp"))
log_facility=LOG_AUTH;
$ wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
$ gtar zxpf nrpe-2.12.tar.gz
$ cd nrpe-2.12
$ cat src/nrpe.c |sed s/LOG_AUTHPRIV/LOG_AUTH/g > src/nrpe.c.1
$ mv src/nrpe.c.1 src/nrpe.c
$ cat src/nrpe.c |sed s/LOG_FTP/LOG_AUTH/g > src/nrpe.c.1
$ mv src/nrpe.c.1 src/nrpe.c
$ ./configure --prefix=/opt/nagios/nrpe --with-nrpe-user=svcmon --with-nrpe-group=svcmon --with-ssl=/usr/sfw --with-ssl-lib=/usr/sfw/lib --with-ssl-inc=/usr/sfw/include --with-log-facility=local7 --with-nagios-user=svcmon --with-nagios-group=svcmon
*** Configuration summary for nrpe 2.12 03-10-2008 ***:
General Options:
-------------------------
NRPE port: 5666
NRPE user: svcmon
NRPE group: svcmon
Nagios user: svcmon
Nagios group: svcmon
Review the options above for accuracy. If they look okay,
type 'make all' to compile the NRPE daemon and client.
$ make
Si todo ha sido correcto, procederemos a la instalación con los siguientes comandos -recordar que si no tenemos permisos de escritura en el directorio <--prefix> deberemos ejecutarlo como <root>-
# make install-plugin
cd ./src/ && make install-plugin
make[1]: Entering directory `/export/home/itily/NRP/plugin/nrpe-2.12/src'
/usr/local/bin/install -c -m 775 -o svcmon -g svcmon -d /opt/nagios/nrpe/libexec
/usr/local/bin/install -c -m 775 -o svcmon -g svcmon check_nrpe /opt/nagios/nrpe/libexec
make[1]: Leaving directory `/export/home/itily/NRP/plugin/nrpe-2.12/src'
# make install-daemon
cd ./src/ && make install-daemon
make[1]: Entering directory `/export/home/itily/NRP/plugin/nrpe-2.12/src'
/usr/local/bin/install -c -m 775 -o svcmon -g svcmon -d /opt/nagios/nrpe/bin
/usr/local/bin/install -c -m 775 -o svcmon -g svcmon nrpe /opt/nagios/nrpe/bin
make[1]: Leaving directory `/export/home/itily/NRP/plugin/nrpe-2.12/src'
# make install-daemon-configConfiguración de SysLog
/usr/local/bin/install -c -m 775 -o svcmon -g svcmon -d /opt/nagios/nrpe/etc
/usr/local/bin/install -c -m 644 -o svcmon -g svcmon sample-config/nrpe.cfg /opt/nagios/nrpe/etc
En el proceso de <configure> hemos declarado nuestro nivel de log en <local7> y por lo tanto, debemos declararlo en nuestra configuración de syslog
# vi /etc/syslog.conf
# Nagios PlugIn Log
local7.debug /var/log/nrpe.log
:wq
# touch /var/log/nrpe.logPrueba de Funcionamiento Correcto
# chmod 600 /var/log/nrpe.log
# svcadm restart system-log
Ahora vamos a comprobar que todo funciona correctamente, para ello, vamos a ejecutar el daemon y vamos a hacer un par de checks, recordar que nuestro puerto es el 5666 y que no queremos ejecutarlo a través de xinetd por eso utilizamos la opción <-d>
# /opt/nagios/nrpe/bin/nrpe -c /opt/nagios/nrpe/etc/nrpe.cfg -dSi todo ha salido correctamente -no veo por qué no- ya podemos configurar correctamente nuestro plugin para ello, deberemos editar el archivo de configuración <$NRPE_HOME/etc/nrpe.cfg> e incluir la dirección IP del host que autorizamos a realizar peticiones -en nuestro caso nagios-server- y los checks que queremos publicar.
# netstat -an|grep 5666
*.5666 *.* 0 0 49152 0 LISTEN
# /opt/nagios/nrpe/libexec/check_nrpe -H localhost
NRPE v2.12
# tail /var/log/nrpe.log
Apr 5 12:29:01 zion nrpe[2457]: [ID 601491 local7.notice] Starting up daemon
Apr 5 12:29:01 zion nrpe[2457]: [ID 624405 local7.info] Listening for connections on port 5666
Apr 5 12:29:01 zion nrpe[2457]: [ID 907248 local7.info] Allowing connections from: 127.0.0.1
Para autorizar un host a que haga peticiones a nuestro plugin deberemos incluirlo en la propiedad <allowed_hosts> -debemos tener en cuenta, si queremos varios deben estar separados por comas-
# vi /opt/nagios/nrpe/etc/nrpe.cfg
allowed_hosts=127.0.0.1,192.168.1.200
:wq
Ahora vamos a declarar los checks que permitimos ejecutar, para ello deberemos editar las entradas de command añadiendo una por check que queramos exportar. El formato de la propiedad command tiene la siguiente estructura:
command[<command_name>]=<command_line>Además, incluiremos los scripts <check_> en el directorio $NRPE_HOME/libexec, así que nosotros vamos a incluir el script de verificación de Solaris 10 SMF que utilizábamos en la primera parte
# cd $NRPE_HOME/libexec/
# wget http://blog.sfchildren.com/blogger/solaris-smf-nagios/check_svc
Tener en cuenta los permisos, ya que el usuario noprivilegiado con el que ejecutamos el servicio debe ser capáz de ejecutarlos pero no queremos que pueda tocar más estructura de nuestra instalación, así que ponemos los siguientes permisos:
# chown svcmon:svcmon check_*
# ls -ltr
total 138
-r-xr-xr-x 1 svcmon svcmon 54512 abr 5 12:20 check_nrpe
-r-xr-xr-x 1 svcmon svcmon 1190 abr 5 15:07 check_svc
-r-xr-xr-x 1 svcmon svcmon 12706 abr 5 15:16 check_solaris_smf
# chmod 500 check_*
# ls -la
total 142
drwxr-xr-x 2 root root 512 abr 5 15:16 .
drwxr-xr-x 6 root root 512 abr 5 15:19 ..
-r-x------ 1 svcmon svcmon 54512 abr 5 12:20 check_nrpe
-r-x------ 1 svcmon svcmon 12706 abr 5 15:16 check_solaris_smf
-r-x------ 1 svcmon svcmon 1190 abr 5 15:07 check_svc
Ahora, si queremos exportar el check para verificar nuestro Tomcat sobre SMF, podemos utilizar la siguiente definición:
command[check_tomcat6]=/opt/nagios/nrpe/libexec/check_svc tomcat_6:default_64bitsPor lo tanto, nuestro archivo de configuración tendrá una configuración similar a esta
allowed_hosts=127.0.0.1,192.168.1.200
command_timeout=60
command[check_tomcat6]=/opt/nagios/nrpe/libexec/check_svc tomcat_6:default_64bits
connection_timeout=300
debug=0
dont_blame_nrpe=0
log_facility=local7
nrpe_group=svcmon
nrpe_user=svcmon
pid_file=/var/run/nrpe.pid
server_port=5666
Instalación de NRPE Mediante SMF
Como es habitual, utilizaremos el framework SMF para poder gestionar el servicio, para ello, deberemos descargarnos el Descriptor SMF para NRPE y el Method de Solaris SMF para NRPE e instalarlos, vamos a verlo.
Recordar que este artículo es la tercera parte y por lo tanto, asumo que el usuario, grupo y project están ya creados como indicábamos en la Parte 2 de Monitorización de Solaris con Nagios. Además, puede que debamos incrementar el valor de <task.max-lwps>
# cd /var/svc/manifest/application/managementActivamos el servicio con <svcadm> -tenemos dos, uno con SSL activado y otro SIN SSL-, en nuestro caso, vamos a utilizar SSL_Enabled
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/solaris-smf-nagios/nrpe/nrpe_2.xml
# chown root:sys nrpe_2.xml
# chmod 444 nrpe_2.xml
# svccfg
svc:> validate nrpe_2.xml
svc:> import nrpe_2.xml
svc:> quit
# cd /lib/svc/method
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/solaris-smf-nagios/nrpe/nrpe2
# chown root:bin nrpe2
# chmod 755 nrpe2
# svcs nrpe_2Finalización Instalación
STATE STIME FMRI
disabled 16:08:25 svc:/application/management/nrpe_2:ssl_disabled
disabled 16:08:27 svc:/application/management/nrpe_2:ssl_enabled
# svcadm enable nrpe_2:ssl_enabled
# svcs -p nrpe_2
STATE STIME FMRI
disabled 16:08:25 svc:/application/management/nrpe_2:ssl_disabled
online 16:11:00 svc:/application/management/nrpe_2:ssl_enabled
16:11:00 20279 nrpe
Ya hemos acabado con la Instalación de NRPE Sobre Solaris 10! Como veis, no ha sido tan complicada, no?
Conclusión Final
Durante estos capítulos hemos visto diferentes formas de monitorizar los servicios de Solaris 10 utilizando Nagios. Sobre cuál es la forma correcta? Bueno, la verdad es que depende de qué quieras hacer y sobre todo qué impacto de rendimiento sufre.
El uso de comandos a través de SSH hace que -al menos en teoria- se puedan controlar más los accesos y, sobre todo no expones un nuevo puerto, sin embargo, esto supone una carga muy elevada en la máquina.
Si nos decantamos por el uso de NRPE podemos ver cómo la carga se disminuye pero debemos tener mucho cuidado con los accesos y controlar -mediante IPFilter- quién puede acceder y qué puede hacer. Ademas, qué pasa si el daemon se cae? Para evitar eso, tenemos nuestro NRPE dentro de SMF, al menos, sabemos que Solaris lo gestionará de forma "automática" y nos da mayor garantia de funcionamiento. Si a eso le unimos poder checkear por SSH el demonio, ya tenemos nuestro sistema "blindado"
Referencias
- Monitorizar Servicios de Solaris 10 con Nagios - Parte 1
- Monitorizar Servicios de Solaris 10 con Nagios - Parte 2
- Nagios Home Page
- Nagios Remote Check for Solaris 10 SMF Services
- Cómo Hacer que SSH No pida contraseña
- Comandos Básicos y No tan Básicos de Solaris
- Configurar IPFilter para Hadoop en Solaris 10
- Instalar IPFilter en Solaris 10 - Paso a Paso
- NRPE Solaris 10 SPARC
- NRPE Solaris 10 x86
ya lo instale y desde consola de donde esta instalado nagios me da correcto:
ResponderEliminar# ./check_nrpe -H ip-destino -c check_users
USERS OK - 1 users currently logged in |users=1;5;10;0
Pero desde la interface web, me da WARNING en
Current Users
WARNING 09-06-2010 16:35:59 0d 5h 4m 48s 3/3 (null)
Configure los servicios con nagiosql3, estoy en solaris10 x86
Mi linea de configuracion para nrpe es:
$USER1$/usr/local/nagios/libexec/check_nrpe -H $HOSTADDRESS$ -t 15 -c $ARG1$
si le quito $USER1$ de plano me da error
¿alguna idea?
Tengo instalado nrpe y desde consola en el servidor nagios funciona bien
ResponderEliminar# ./check_nrpe -H ip-destino -c check_users
USERS OK - 1 users currently logged in |users=1;5;10;0
Sin embargo en el web me da un WARNING:
Host Sort by host name (ascending)Sort by host name (descending) Service Sort by service name (ascending)Sort by service name (descending) Status Sort by service status (ascending)Sort by service status (descending) Last Check Sort by last check time (ascending)Sort by last check time (descending) Duration Sort by state duration (ascending)Sort by state duration time (descending) Attempt Sort by current attempt (ascending)Sort by current attempt (descending) Status Information
ShoreSQL
Current Load
WARNING 09-06-2010 16:45:02 0d 5h 3m 18s 3/3 (null)
Current Users
WARNING 09-06-2010 16:45:59 0d 5h 12m 21s 3/3 (null)
El comando lo configure con nagiosql y esta dado alta como
$USER1$/usr/local/nagios/libexec/check_nrpe -H $HOSTADDRESS$ -t 15 -c $ARG1$
¿qué podrá ser?
Hola Oscar,
ResponderEliminarVamos a ver si podemos indentificar el problema. Como comentas, si ejecutas (por ejemplo):
# ./check_nrpe -n -H 10.4.0.201 -c check_tomcat6
CRITICAL tomcat_6:default_64bits is disabled
# echo $?
2
- Puedes verificar el valor de retorno (con $?) para comprobar que el plugin devuelve "0" (OK)
- Si esto es correcto, vamos a ir a la configuración del plugin dentro de Nagios y verificar que la variable $USER1 está declarada y tiene un valor (probablemente tenga valor "/").
- Verificación de los permisos del PlugIn. El usuario que ejecuta Nagios, tiene permiso de ejecución -me imagino que sí, pero es por ir descartando-
Podemos ir avanzando por ahí, y a ver si encontramos la solución,
Un Saludo,
Urko