Monitorizar servidores Tomcat con Cacti

Retomando la serie de posts dedicados a Cacti, en esta ocasión contaremos cómo podemos monitorizar servidores Tomcat con ayuda de Cacti. Para ello, nos basaremos en el post http://forums.cacti.net/about19744.html.
Antes de empezar a trabajar con Cacti, nos interesará saber si tenemos correctamente configurado nuestro servidor Apache Tomcat. Para ello accederemos con un navegador a la dirección http://IP_TOMCAT:PUERTO/manager/status?XML=true, donde IP_TOMCAT será la dirección IP de nuestro servidor tomcat, y PUERTO será el puerto de escucha del Connector-HTTP: en mi caso yo usé http://code.casa.tecnoquia.com:9080/manager/status?XML=true. Para ello, también será necesario tener desplegado el contexto manager que viene con la distribución del Tomcat. Cuando nos pregunte un Login y Password no estará pidiendo el nombre de un usuario y su contraseña que tenga el rol manager. Esto, como sabrás, viene configurado por defecto en el server.xml de tu tomcat (habitualmente se guardan tomcat-users.xml) dentro del Realm UserDatabase. Una vez consigas autenticarte, deberías podeer ver una pantall con una salida similar a la siguiente:
Lo más importante será que nos fijemos en los nombres de nuestros conectores, y de ellos, aquellos que queremos monitorizar.

En mi ejemplo se puede ver que tengo dos conectores: uno llamado jk-9009 con 8 conexiones en el momento de la captura y otro llamado http-9080 que recoge la conexión que hice desde mi navegador. Para ilustrar el ejemplo, usaré el conector jk-9009, que además es el que recibe las conexiones vía ModJK desde el Apache que hace de proxy inverso transparente.
Una vez ya sabemos el puerto, ip, usuario, contraseña y el nombre del conector que queremos monitorizar podemos empezar con Cacti.
  1. Descargar el fichero TomcatStats-0.1.zip, descomprimirlo. Copiar el script tomcatstats.pl al directorio los scrips, de nuestro servidor cacti y darle permisos de ejecución.
    scp tomcatstats.pl root@SERVIDOR_CACTI:/var/www/cacti/scripts/
    ssh root@SERVIDOR_CACTI chmod 755 /var/www/cacti/scripts/tomcatstats.pl
  2. Ahora nos conectaremos a nuestro servidor CACTI, e intentaremos lanzar la consulta que más tarde hará Cacti para dibujar las gráficas. Esto nos permitirá saber las librerías de perl que nos faltan por instalar al equipo. Una vez conectados ejecutar el comando...
    perl /var/www/cacti/scripts/tomcatstats.pl \
    IP_TOMCAT:PUERTO \
    USUARIO_CON_ROL_MANAGER \
    CONTRASEÑA_USUARIO \
    NOMBRE_CONECTOR
    Deberas obtener algo similar a lo siguiente, en una sóla línea.
    jvm_memory_free:28303544 jvm_memory_max:830013440 jvm_memory_total:55246848
    connector_max_time:183042 connector_error_count:0 connector_bytes_sent:83477881
    connector_processing_time:624695 connector_request_count:378
    connector_bytes_received:0 connector_current_thread_count:12
    connector_min_spare_threads:4 connector_max_threads:200
    connector_max_spare_threads:50 connector_current_threads_busy:9
    Si no lo obtienes, será porque te falta alguna librería de Perl. Al ejecutar el comando te dirá qué librería no encuentra. Busca el error en Google y es posible qe alguien le haya pasado algo similar y te de alguna pista. Hasta que no consigas ver la línea similar a la que te indico, no es necesario que sigas configurando porque no se dibujarán las gráficas. Por si si te srive de algo, yo algunas veces necesito instalar los paquetes perl-XML-Simple:
    yum -y install perl-XML-Simple perl-XML-Simple.noarch
  3. Una vez nos funcione el comando en la consola del servidor Cacti, accederemos como Administrador a la consola Web de Cacti y acceder a Console->Import/Export->Import Templates y cargar el fichero: cacti_host_template_tomcat_server.xml, que obtuvimos al descomprimir TomcatStats-0.1.zip. Luego pulsar el botón Save

Con esto tendremos lo básico para poder monitorizar tomcats, pero el autor de la plantilla no tuvo en cuenta que podríamos tener diferentes tomcats en la misma máquina y en diferentes puertos, usando diferentes nombres de conector, diferentes usuarios, etc. Vamos a modificar la plantilla para parametrizar todas estas variables. Para hacerlo:
  1. Ir a Console->Collection Methods->Data Input Methods y pulsar en la parte derecha en TomcatStatus.
  2. En el campo Input String, se le dice a Cacti que comando debe ejecutar para leer los datos con los que luego poder realizar la gráfica. Debemos cambiar los siguientes campos: "8444" por <tcpport> "admin" por tomcatadmin "passwords" por cocacola "http-8080" por <conname> * Pulsar el boton SAVE
    • 8444 por <TcpPort>
    • admin por <UserManager>
    • passwords por <Password>
    • http-8080 por <ConnectorName>
    Cuando lo hayamos hecho pulsar el botón Save.
  3. Nos devolverá a la pantalla anterior, con el mensaje Save Successful.. Volver hacer click en TomcatStatus
  4. En Input Fields hay que pulsar Add. En Field [Input], en el combobox elegir <TcpPort> y en Friendly Name escribir Puerto, Regular Expression -> escribir \d+ . Luego pulsar el botón Create...
  5. Volver a Input Fields y pulsar Add. En Field [Input], en el combobox elegir <UserManager> y en Friendly Name escribir Usuario. En Regular Expression escribir \S+ . Luego pulsar el botón Create...
  6. De nuevo en Input Fields, pulsar Add. En Field [Input], en el combobox elegir <Password> y en Friendly Name escribir Contraseña. En Regular Expression escribir \S+ . Luego pulsar el botón Create...
  7. Otra vez en Input Fields, pulsar Add. En Field [Input], en el combobox elegir <ConnectorName> y en Friendly Name escribir NombreConector. En Regular Expression escribir \S+ . Luego pulsar el botón Create...
  8. Pulsar el botón Save.
  9. Ahora, en la consola de Cacti, acceder a Console->Templates->Data Templates, y luego seleccionar Tomcat Status. En la parte de abajo de la página, dentro de la sección Custom Data, marcar las casillas hostname, Puerto, Usuario, Contraseña y NombreConector. Cuando lo hayamos hecho pulsar el botón Save, que está muy a la derecha de la página (tendremos que usar la barra de desaplazamiento horizontal). Con esta acción, permitimos poder personalizar estas variables, cuando incluyamos las gráficas para algún Host.

La importación del XML, nos creó una plantilla de Host llamada TomcatServer con las cuatro gráficas. La usaremos porque en el mismo servidor Linux/Windows podríamos tener diferentes Tomcats configurados ejecutándose en diferentes puertos. Así, en vez de dar de alta las cuatro gráficas para un servidor (Linux/Windows), podríamos crear un nuevo Device que tuviera sólo estas cuatro gráficas, y estaríamos dando de alta un Tomcat: Cacti no tiene problema en que se repitan las direcciones IP, siempre que no se repitan los nombres de dispositivo. Me he encontrado clientes que tienen servidores Tomcat dedicados a una sóla aplicación, y que ejecutan varios de estos en el mismo servidor.
Ya sólo nos queda dar de alta una nueva aplicación o tomcat:
  1. Ir a Console->Devices->Add
  2. En la ventana que nos aparecerá rellenar los siguientes campos:
    • Description: app-NOMBRE_APLICACION-SERVIDOR
    • Hostname: Escribir la dirección IP del servidor.
    • Host Template: Seleccionar Tomcat Server
    • Downed Device Detection: Seleccionar Ping or SNMP
    Pulsar en el botón Create. Cambiará la página y nos dirá Save Successful.. Haremos click en Create Graphs for this Host.
  3. Cambiará la página. Ahora nos aparecerán las 4 gráficas de la plantilla: Create: Tomcat - Connection Rate, Create: Tomcat - Heap Statistics, Create: Tomcat - Thread Statistics y Create: Tomcat - Throughput.Marcar las casillas de verificación de cada fila y luego el botón Create.
  4. Ahora llega la hora de darle valor a las variables que hemos estado configurando para sean parametrizables. Lo bueno es que podremos monitorizar los tomcats que queramos y cómo queramos (puerto, usuario, conector, etc). Lo malo es que cada vez que demos de alta un nuevo Tomcat tendremos que rellenar estos campos cuatro veces, aunque podremos hacerlo copiando y pegando.Para completar estos campos necesitaremos saber los datos del tomcat que queremos monitorizar, y que averguamos al principio del post, cuando accedimos a http://IP_TOMCAT:PUERTO/manager/status?XML=true.
    • Hostname: escribir la dirección IP del servidor Tomcat
    • Puerto: Escribir el puerto en el que escucha HTTP ese Tomcat para poder llamar a la URL http://IP_TOMCAT:PUERTO/manager/status?XML=true.
    • Usuario: Escribir el login del usuario con el Rol Manager que puede acceder http://IP_TOMCAT:PUERTO/manager/status?XML=true
    • Contraseña: escribir la password de acceso para ese usuario.
    • NombreConector: escribir el nombre del conector que queremos monitorizar. En mi ejemplo usaré jk-9009.
    Esto debemos hacerlo para las cuatro gráficas: Copiando y pegando podemos ir bastante rápido. Cuando terminemos pulsar el botón Create.
  5. Ahora crearemos la entrada en el árbol de gráficas. Vamos a Graph Trees y desplegamos el árbol. Luego en Tree Items pinchamos en (Add) de Produccion->Aplicaciones_Java, o la rama que nos interese.
  6. Cambiar Tree Item Type y seleccionar Host. Luego buscar en Host el device que acabamos de crear y pinchar en el botón Create para guardar los cambios.
Después de esperar algunos minutos, podremos empezar a ver el resultado. Si por lo que sea alguna de las gráficas no se dibujara, deberíamos entrar en modo debug de la gráfica y ver cuál es la causa. Yo tuve este problema con las gráficas Connection Rate y Heap Statistics y según del depurador se debía a invalid y-grid. Fui a Console-<Templates-<Graph Templates de cada una y eliminé el valor que venía establecido por defecto, dejando el campo vacío. Alfonso, perdona por el retraso. Espero que os sirva.
La foto la he sacado del album de Katey Nicosia en flickr

El plan cósmico

Os dejo con un vídeo de Sixto Paz que me ha recomendado mi propio hijo, y del que le hablaron el otro día en clase de Ciencias Naturales (¿?). Me extrañé bastante cuando me lo dijo y le comenté que por qué no decía a la profesora que se limitara a enseñarles el conocimiento científico contrastado y reconocido, y dejaba este tipo de textos y material para que cada uno en casa lo consultara a modo de ampliación.

No estoy en contra de usar material trasversal en las clases de ciencias, pero me preocupa que en clase no se explique ni se dedique el suficiente tiempo a la teoría de la evolución de las especies, las leyes de Mendel, o el principio de incertidumbre de Heisenberg, y al final los chavales salgan con la convicción de todo se debe a un complot extraterrestre, que fomente aún más en ellos su insensibilidad hacia el planeta y el sentido de la irresponsabilidad de sus actos. Esto puede ser muy acertado en clase de filosofía, pero no en la de ciencias.

Por otro lado me alegré que cada vez más gente sepa de estas creencias, que yo descubrí casi por casualidad hace varios años. El vídeo describe de forma resumida la historia de Urantia, que es el nombre originario de nuestro planeta dentro del plan cósmico. Podéis conocer la historia completa en el Libro de Urantia, donde se narra la historia del Universo, de nuestro planeta, y del origen del hombre como experimento genético extraterrestre. Yo os recomendaría que primero vierais el vídeo (son 50minutos) a modo de introducción, luego os leyerais el Acerca del Libro de Urantia , y después fuerais curioseando entre los capítulos del libro. Es muy entretenido e ingenioso en algunos capítulos.



Recordar que la ciencia ayuda a saber lo que va a pasar, pero nunca nos explica el por qué, la razón de que sucedan, ni el objetivo. El método científico comienza con la observación, y es capaz de predecir lo que pasará viendo que suceden los antecedentes, pero nunca se detiene en el por qué suceden estos, y cuando se pregunta la razón, se nos dice que son los consecuentes de unos antecedentes previos, y así sucesivamente hasta el límite de la observación.

casa.tecnoquia.com

Esta semana sabíamos que Google Street View ya tiene digitalizada casi toda España. He buscado la casa que se ha hecho mi querida y adorada mujer, y que con tanto esfuerzo estamos pagando, y ya está visible.

Ver mapa más grande

Tomcat y autenticación LDAP

Cuando disponemos de un LDAP es habitual querer centralizar la autenticación de nuestros servicios en el directorio. Uno de los servicios que podríamos configurar es la autenticación de los administradores de nuestro Tomcat, para evitar que alguien pudiera replegarnos una aplicación, usando las cuentas que trae por defecto. Para hacerlo, tendríamos que comentar la configuración de UserDatabase

<!--
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
debug="0" resourceName="UserDatabase"/>
-->

y añadir la configuración para que busque en OpenLDAP, en la sección de REALMs:
<Realm    className="org.apache.catalina.realm.JNDIRealm" debug="99"
resourceName="UserDatabase"

connectionName="cn=nssproxy,ou=edu,o=carm,c=es"
connectionPassword="**SECRET**"
connectionURL="ldap://openldap.edu.carm.es:389"

userBase="ou=usuarios,ou=edu,o=carm,c=es"
userSubtree="true"
userSearch="(cn={0})"

userRoleName="memberOf"
roleBase="ou=grupos,ou=edu,o=carm,c=es"
roleName="cn"
roleSubtree="true"
roleSearch="(member={0})"
/>

Luego tendremos que crear los grupos admin manager en nuestro LDAP, bajo la rama indicada por roleBase, y añadirles los usuarios (instancicar el atributo configurado por el filtro roleSearch) que queremos puedan administrar nuestros servidores tomcats. Además, el propio usuario también deberá almcenar la pertencia a estos grupos, instanciando el atributo configurado en userRoleName.
Después de aplicar estos cambios tendremos que reiniciar nuestro servidor Tomcat y tener disponible el contexto Manager.
La foto la he sacado del album de iirraa en flickr

Búsqueda en árboles LDAP mediante URL

Cuando usamos un directorio LDAP, a menudo necesitamos lanzar búsquedas de objetos en todos el árbol, pero no siempre tenemos a mano nuestro cliente LDAP favorito. Entre las numerosas funcionalidades de Microsoft Internet Explorer encontramos las posibilidad de poder lanzar búsquedas a un directorio LDAP especificando una URL:

ldap://IP_DEL_SERVIDOR:PUERTO/Raiz_de_busqueda?Atributos_a_recuperar?SCOPE?FILTRO

Para lanzar un par de búsquedas en profundidad podríamos usar, las siguientes URLs:
ldap://openldap.edu.carm.es/ou=usuarios,ou=edu,o=carm,c=es?*?sub?cn=ibm*

ldap://openldap.edu.carm.es/ou=padres,ou=edu,o=carm,c=es?*?sub?dni=34123123*

El incoveniente que encuentro es que Internet Explorer nos mostrará en la libreta de direcciones la primera entrada que recupere de la búsqueda. Para poder ver todas las entradas resultantes de la búsqueda, tendríamos que configurar nuestro servidor LDAP en la libreta de direcciones del equipo (Inicio->Programas->Accesorios->Libreta de direcciones). Si usamos los schemas LDAP apropiados en nuestro servidor, podremos configurar también nuestro cliente LDAP en Thunderbird y Evolution, y lanzar búsquedas al árbol como parte de nuestros contactos.
Si estamos usando como servidor, OpenLDAP, posiblemente nos interese permitir acceso anónimo para consulta, aunque sólo a los atributos que se mostrarán en la libreta de direcciones. Para conseguirlo podremos añadir las siguientes ACLs al principio de la lista, en el fichero de configuración /etc/openldap/slapd.conf.
# Libreta de direcciones
access to dn.subtree="ou=edu,o=carm,c=es" attrs=userPassword,homeDirectory,memberOf
by dn="cn=admin,ou=edu,o=carm,c=es" read
by dn="cn=nss,ou=edu,o=carm,c=es" read
by self read
by anonymous auth
access to dn.subtree="ou=edu,o=carm,c=es"
by * read

La foto la he sacado del album de Property#1 en flickr

RHEL5u4 DM-Multipath en HP EVA 3000 (activo/pasivo)

El pasado Lunes, me buscaron para configurar Device-Mapper Multipath de Oracle Unbreakable Linux 5 update 4, en dos blades HP BL460c conectados con doble fibra a una HP EVA 3000, con una versión Activo/Pasivo de firmware en las contraladoras, imposible de actualizar de momento. Había que configurarlos para poder instalar Oracle 10gR2.
Antes de empezar lo primero que hice fue visitar la web de HP y buscar la cadena device mapper multipath. Luego revisé algunos documentos y realicé algunas pruebas. Ninguna de las pruebas que hice funcionó, por lo que terminé optando por intentarlo por mi cuenta con ayuda de la página man. Así el fichero /etc/multipath.conf que qued fue el siguiente:

devnode_blacklist {
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z][[0-9]*]"
devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
}

defaults {
udev_dir /dev
polling_interval 5
selector "round-robin 0"
path_grouping_policy failover
getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
prio_callout "/bin/true"
path_checker tur
rr_min_io 1000
rr_weight uniform
failback immediate
no_path_retry 6
user_friendly_names yes
}
devices {
device {
vendor "HP*"
product "HSV100*"
path_grouping_policy group_by_prio

getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
path_selector "round-robin 0"
path_checker hp_sw
prio_callout "/sbin/mpath_prio_hp_sw /dev/%n"

rr_weight uniform
rr_min_io 100
failback immediate
no_path_retry 6
}
}
multipaths {
multipath {
wwid 3600508b4001014f60000d00000120000
alias ocr
}
multipath {
wwid 3600508b4001014f60000d00000190000
alias database
}
multipath {
wwid 3600508b4001014f60000d00000200000
alias fra
}
}

Luego, para aplicar los cambios ejecutaremos:
multipath -F
multipath -v 2
multipath -ll
/etc/init.d/multipathd restart
multipath -ll

La foto la he sacado del album de Will Fuller en flickr

Renombrar pseudo-dispositivos de PowerPath

A veces nos puede interesar renombrar los pseudo-dispositivos que nos crea PowerPath. Esto se puede hacer con ayuda del comando emcpadm -s ORIGEN -t DESTINO:

emcpadm renamepseudo -s emcpowerw -t emcpowerx

emcpadm renamepseudo -s emcpowerq -t emcpowerw
emcpadm renamepseudo -s emcpowerr -t emcpowerq
emcpadm renamepseudo -s emcpowero -t emcpowera

emcpadm renamepseudo -s emcpowern -t emcpowero
emcpadm renamepseudo -s emcpowerm -t emcpowern
emcpadm renamepseudo -s emcpowera -t emcpowerm

La foto la he sacado del cwol.com vía google images.

ITER volcano

Os dejo con un vídeo que se ha "currao" un compañero del grupo de investigación al que pertenece mi hermano Pepe (el astrofísico-vulcanólogo), en el cual aparece en primer lugar: el trabajador de campo. Me gusta mucho como ha quedado el montaje, la música y las fotos, que muestran algunos de los episodios por lo que tienen que pasar de nuestros investigadores. Que lo disfruteis.