Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccin
Una de las cosas que ms echo en falta en la versin actual de SMF sobre Solaris 10u8 es poder
Monitorizar los estados de los servicios. La verdad es que se habla mucho de poder utilizar SNMP para
hacer consultas a los estados, pero, a da de hoy no est implementado.
Para solucionar este problema -hasta que implementen SNMP- podemos utilizar diferentes scripts que nos
proporcionaran la funcionalidad de monitorizacin necesaria.
En este primer acercamiento vamos a utilizar una versin modificada de un PlugIn para Nagios que nos
permitir saber el estado de un servicio, su uso es el siguiente:
check_svc <service name>
Este sencillo plugin nos devuelve OK si el servicio est online, WARNING si est en online* y
CRITICAL si est en maintance. Si el servicio est OFFLINE, entonces devuelve UNKNOW, veamos un
ejemplo sencillo:
# ./check_svc tomcat_6:default_64bits
OK tomcat_6:default_64bits is online
# echo $?
0
# ./check_svc tomcat_6:default_32bits
UNKNOWN tomcat_6:default_32bits is disabled
# echo $?
3
Este plugin tiene como ventaja que es realmente rpido, sin embargo, tiene deficiencias ya que no
podemos establecer cuando un estado de disabled es un WARNING o CRITICAL, siempre nos devuelve
UNKNOWN. Adems, para hacer que sea rpido he tenido que hacer algunos cambios en el cdigo
original. Aqu os dejo una versin de verificacin de Solaris SMF para Nagios modificada
Para verificaciones ms complejas tenemos otra versin -tambin en Nagios Exchange- llamada
check_solaris_smf que nos permite parametrizar el nivel de CRITICAL, WARNING y OK de la siguiente
forma:
check_solaris_smf -f <frmi> -c <critical> -w <warning> -o <ok>
Por ejemplo, si queremos evaluar el servicio tomcat_6:default_64bits y los valores sn: CRITICAL si est
disabled u offline, WARNING si est en maintance o degraded y OK si est en online. Para ello
utilizaremos el siguiente comando:
# ./check_solaris_smf -f tomcat_6:default_64bits -c DIS,OFF -w MNT,DGD -o ON
SMF SVCS OK - tomcat_6:default_64bits ON
# echo $?
0
Cul Utilizo?
La verdad es que depende un poco de las necesidades, pero la mayor potencia del script
check_solaris_smf hace que sea ms lento. Aqu os dejo los tiempos de ambos scripts al ejecutar la misma
comprobacin:
# time ./check_solaris_smf -f tomcat_6:default_64bits -c DIS,OFF -w MNT,DGD -o ON
SMF SVCS OK - tomcat_6:default_64bits ON
real 0m0.184s
user 0m0.046s
sys 0m0.095s
# time ./check_svc tomcat_6:default_64bits
OK tomcat_6:default_64bits is online
real 0m0.084s
user 0m0.021s
sys 0m0.039s
Conclusin
En esta primera parte, hemos visto cmo podemos crear -utilizar- unos pequeos scripts que nos van a
permitir ver el estado de los servicios, y devolvernos un nivel para la monitorizacin con Nagios.
El principal problema que tienen, es que asumen que los servicios que vamos a monitorizar se encuentran
en la misma mquina donde tenemos instalado nuestro Nagios y eso -normalmente- no es as.
# 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
Configuracin de SysLog
En el proceso de <configure> hemos declarado nuestro nivel de log en <local7> y por lo tanto, debemos
declararlo en nuestra configuracin 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
travs de xinetd por eso utilizamos la opcin <-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 configuracin <$NRPE_HOME/etc/nrpe.cfg> e incluir la
direccin 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 aadiendo una por check que queramos exportar. El formato de la propiedad command tiene la
siguiente estructura:
command[<command_name>]=<command_line>
Adems, incluiremos los scripts <check_> en el directorio $NRPE_HOME/libexec, as que nosotros
vamos a incluir el script de verificacin de Solaris 10 SMF que utilizbamos 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
capz de ejecutarlos pero no queremos que pueda tocar ms estructura de nuestra instalacin, 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
drwxr-xr-x 6 root root
-r-x------ 1 svcmon svcmon
-r-x------ 1 svcmon svcmon
-r-x------ 1 svcmon svcmon
Ahora, si queremos exportar el check para verificar nuestro Tomcat sobre SMF, podemos utilizar la
siguiente definicin:
command[check_tomcat6]=/opt/nagios/nrpe/libexec/check_svc tomcat_6:default_64bits
Por lo tanto, nuestro archivo de configuracin tendr una configuracin 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
Instalacin 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 artculo es la tercera parte y por lo tanto, asumo que el usuario, grupo y project
estn ya creados como indicbamos en la Parte 2 de Monitorizacin de Solaris con Nagios. Adems,
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
Finalizacin Instalacin
Ya hemos acabado con la Instalacin de NRPE Sobre Solaris 10! Como veis, no ha sido tan complicada,
no?
Conclusin Final
Durante estos captulos hemos visto diferentes formas de monitorizar los servicios de Solaris 10
utilizando Nagios. Sobre cul 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 travs de SSH hace que -al menos en teoria- se puedan controlar ms los accesos y,
sobre todo no expones un nuevo puerto, sin embargo, esto supone una carga muy elevada en la mquina.
Si nos decantamos por el uso de NRPE podemos ver cmo la carga se disminuye pero debemos tener
mucho cuidado con los accesos y controlar -mediante IPFilter- quin 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 "automtica" y nos da mayor garantia de funcionamiento. Si a
eso le unimos poder checkear por SSH el demonio, ya tenemos nuestro sistema "blindado"
Las versiones <tar.Z> corresponde al tipo de instalacin con pkgadd y las versiones <sh> a las versiones
autoextraibles, adems las versiones de 64bits en SPARC son referenciadas como sparcv9 y las de 32bits
como sparc. A continuacin vemos cmo se instalan los paquetes, (realmente es el mismo proceso que
cualquier otro paquete de Solaris, en mi ejemplo instalo todos aunque puedes seleccionar que quieres
instalar)
# zcat jdk-6u17-solaris-sparc.tar.Z |tar xpf # pkgadd -d .
The following packages are available:
1 SUNWj6cfg
JDK 6.0 Host Config. (1.6.0_17)
(sparc) 1.6.0,REV=2006.11.29.05.57
2 SUNWj6dev
JDK 6.0 Dev. Tools (1.6.0_17)
(sparc) 1.6.0,REV=2006.11.29.05.57
3 SUNWj6dmo
JDK 6.0 Demo Programs (1.6.0_17)
(sparc) 1.6.0,REV=2006.11.29.05.57
4 SUNWj6jmp
JDK 6.0 Man Pages: Japan (1.6.0_17)
(sparc) 1.6.0,REV=2006.12.07.19.24
5 SUNWj6man
JDK 6.0 Man Pages (1.6.0_17)
(sparc) 1.6.0,REV=2006.12.07.16.37
6 SUNWj6rt
JDK 6.0 Runtime Env. (1.6.0_17)
(sparc) 1.6.0,REV=2006.11.29.05.57
7 SUNWjavadb-client
Java DB client
(sparc) 10.4.2,REV=2008.10.20
8 SUNWjavadb-common
Java DB common files
(sparc) 10.4.2,REV=2008.10.20
9 SUNWjavadb-core
Java DB core
(sparc) 10.4.2,REV=2008.10.20
10 SUNWjavadb-demo
Java DB demo
(sparc) 10.4.2,REV=2008.10.20
... 3 more menu choices to follow;
for more choices, to stop display:
11 SUNWjavadb-docs
Java DB documentation
(sparc) 10.4.2,REV=2008.10.20
12 SUNWjavadb-javadoc Java DB javadoc
(sparc) 10.4.2,REV=2008.10.20
13 SUNWjavadb-service Java DB service management
(sparc) 10.4.2,REV=2008.11.13
Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]: all
El instalador realizar esta tarea para cada una de las zonas.
Una vez concluido el proceso, ya tenemos nuestra versin Java instalada
Instalacin desde archivo sh
Este tipo de instalacin no requiere privilegios de <root>, ya que es un shx (archivo autoextraible) y por
lo tanto, slo necesitamos permisos de escritura en el directorio en el cul queremos descomprimirlo, sin
embargo, a diferencia de la instalacin mediante <pkgadd> no queda reflejado en la base de datos de
software instalado, y por lo tanto, cuando parchemos no se aplicarn los cambios al paquete JDK.
Continuando con la instalacin mediante archivo sh, quiero descomprimirlo en /usr/jdk/instances y por lo
tanto si que necesito ser root
En esta ocasin, nos interesan las versiones <sh> de la pgina de descargas de Sun. Recordar que cuando
se transfieran los archivos al servidor si lo hacemos mediante ftp, debemos asignar el tipo de transferencia
como binario ya que sino, no se extraer correctamente. Si utilizamos sftp, no hay problema
Una vez subidos al servidor, simplemente deberos ejecutarlos en el directorio que queremos extraerlo, por
ejemplo, en mi caso los sh estn en $HOME/jdk/6/ y quiero instalarlos en /usr/jdk/instances as que hago
lo siguiente
# cd /usr/jdk/instances
# sh $HOME/jdk/6/jdk-6u17-solaris-sparc.sh
ahora sale un mensaje de licencia, pulsamos Q y aceptamos la licencia
Do you agree to the above license terms? [yes or no]
yes
Repetimos el mismo procedimiento para la versin de 64bits
# cd /usr/jdk/instances
# sh $HOME/jdk/6/jdk-6u17-solaris-sparcv9.sh
Ya tenemos concluida la instalacin de Java.
Hacer esta versin por defecto
Una vez instalada la nueva versin de Java, nuestro sistema seguir llamado a la versin de Java que tiene
en el PATH, esto es /usr/bin/java que es un link a /usr/java/bin/java, as que para hacer que sea nuestro
default tenemos dos opciones:
Establecer la variable de entorno PATH como PATH=/usr/jdk/instances/jdk1.6.0_17/bin:$PATH
Borrar y crear el link de /usr/java a /usr/jdk/instances/jdk1.6.0_17/
# /usr/sfw/bin/wget blog.sfchildren.com/blogger/tomcat/smf/tomcat_6.xml
# svccfg
svc:> validate /var/svc/manifest/application/web/tomcat_6.xml
svc:> import /var/svc/manifest/application/web/tomcat_6.xml
svc:> quit
# svcs tomcat_6
STATE STIME FMRI
disabled 13:53:39 svc:/application/web/tomcat_6:default_64bits
disabled 13:54:16 svc:/application/web/tomcat_6:default_32bits
Ahora vamos a descargar el archivo method de Tomcat encargado de ejecutar realmente el Tomcat. Esta
versin no es necesario modificar ya que se nutre de los parmetros definidos en el Manifest, podis
descargar el Method para Tomcat 6 o Method para Tomcat 5
# cd /lib/svc/method
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/tomcat/smf/tomcat6
# chown root:bin tomcat6
# chmod 555 tomcat6
Activacin del Servicio Tomcat
Ahora activaremos el servicio que deseemos, en mi caso el de 64bits, pero recordad que slo uno de los
dos puede estar activo simultneo
# svcadm enable tomcat_6:default_64bits
# svcs tomcat_6
STATE
STIME FMRI
disabled
13:54:16 svc:/application/web/tomcat_6:default_32bits
online
13:55:39 svc:/application/web/tomcat_6:default_64bits
Podemos ver el pid del proceso Java que est ejecutando utilizando el modificador <-p> del comando
<svcs>
$ svcs -p tomcat_6
STATE
STIME FMRI
disabled
dic_09 svc:/application/web/tomcat_6:default_64bits
online
11:58:26 svc:/application/web/tomcat_6:default_32bits
11:58:26 24927 java
Conclusiones
En esta ocasin hemos visto cmo podemos activar el servicio Apache Tomcat utilizando SMF y su
gestin pasa ahora por el Sistema Operativo.
Ahora que ya entendemos cmo funciona SMF, podemos hacer definiciones ms complejas utilizando
servicios dependientes en nuestros archivos manifest, pero esto es para el siguiente post