SafeChildren Banner

Havoc Oracle Solaris Experts

lunes, 5 de abril de 2010

Monitorizar Servicios Solaris 10 Nagios - Parte 3

Introducción
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':
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
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í:

        else if(!strcmp(varvalue,"authpriv"))
                log_facility=LOG_AUTH;
        else if(!strcmp(varvalue,"ftp"))
                log_facility=LOG_AUTH;
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-
$ 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-config
/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
Configuración de SysLog
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.log
# chmod 600 /var/log/nrpe.log
# svcadm restart system-log
Prueba de Funcionamiento Correcto
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 -d
# 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
Si 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.

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_64bits
Por 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/management
# /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 
Activamos el servicio con <svcadm> -tenemos dos, uno con SSL activado y otro SIN SSL-, en nuestro caso, vamos a utilizar SSL_Enabled
# svcs nrpe_2
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
Finalización Instalación
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

3 comentarios:

  1. ya lo instale y desde consola de donde esta instalado nagios me da correcto:

    # ./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?

    ResponderEliminar
  2. Tengo instalado nrpe y desde consola en el servidor nagios funciona bien

    # ./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?

    ResponderEliminar
  3. Hola Oscar,

    Vamos 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

    ResponderEliminar