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.
Una vez ya sabemos el puerto, ip, usuario, contraseña y el nombre del conector que queremos monitorizar podemos empezar con Cacti.
- 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 - 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 \
Deberas obtener algo similar a lo siguiente, en una sóla línea.
IP_TOMCAT:PUERTO \
USUARIO_CON_ROL_MANAGER \
CONTRASEÑA_USUARIO \
NOMBRE_CONECTORjvm_memory_free:28303544 jvm_memory_max:830013440 jvm_memory_total:55246848
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:
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:9yum -y install perl-XML-Simple perl-XML-Simple.noarch
- 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ónSave
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:
- Ir a
Console->Collection Methods->Data Input Methods
y pulsar en la parte derecha enTomcatStatus
. - 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>
Save
. - Nos devolverá a la pantalla anterior, con el mensaje
Save Successful.
. Volver hacer click enTomcatStatus
- En
Input Fields
hay que pulsarAdd
. EnField [Input]
, en el combobox elegir<TcpPort>
y enFriendly Name
escribir Puerto,Regular Expression ->
escribir\d+
. Luego pulsar el botónCreate
... - Volver a
Input Fields
y pulsarAdd
. EnField [Input]
, en el combobox elegir<UserManager>
y enFriendly Name
escribir Usuario. EnRegular Expression
escribir\S+
. Luego pulsar el botónCreate
... - De nuevo en
Input Fields
, pulsarAdd
. EnField [Input]
, en el combobox elegir<Password>
y enFriendly Name
escribir Contraseña. EnRegular Expression
escribir\S+
. Luego pulsar el botónCreate
... - Otra vez en
Input Fields
, pulsarAdd
. EnField [Input]
, en el combobox elegir<ConnectorName>
y enFriendly Name
escribir NombreConector. EnRegular Expression
escribir\S+
. Luego pulsar el botónCreate
... - Pulsar el botón
Save
. - 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ónSave
, 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:
- Ir a
Console->Devices->Add
- En la ventana que nos aparecerá rellenar los siguientes campos:
Description
: app-NOMBRE_APLICACION-SERVIDORHostname
: Escribir la dirección IP del servidor.Host Template
: SeleccionarTomcat Server
Downed Device Detection
: SeleccionarPing or SNMP
Save Successful.
. Haremos click enCreate Graphs for this Host
. - 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
yCreate: Tomcat - Throughput
.Marcar las casillas de verificación de cada fila y luego el botónCreate
. - 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 TomcatPuerto
: 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=trueContraseña
: escribir la password de acceso para ese usuario.NombreConector
: escribir el nombre del conector que queremos monitorizar. En mi ejemplo usaré jk-9009.
Create
. - Ahora crearemos la entrada en el árbol de gráficas. Vamos a
Graph Trees
y desplegamos el árbol. Luego enTree Items
pinchamos en(Add)
deProduccion->Aplicaciones_Java
, o la rama que nos interese. - Cambiar
Tree Item Type
y seleccionar Host. Luego buscar enHost
el device que acabamos de crear y pinchar en el botónCreate
para guardar los cambios.
Connection Ratey
Heap Statisticsy según del depurador se debía a
invalid y-grid. Fui a
Console-<Templates-<Graph Templatesde 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