Seleccionar página

En entorno de producción, una arquitectura Java EE ha empezado a tener un comportamiento anómalo al alcanzar el volumen de 5.000 usuarios diarios (20.000 páginas) por lo que se ha tenido que incorporar la librería de monitorización JavaMelody en las aplicaciones WAR / EAR y descubrir dónde están los bloqueos.

La arquitectura está montada con un servidor Apache que balancea a través del conector mod_proxy entre dos JBoss EAP 6.2 (JBoss 1 y JBoss2) manteniendo la sticky session (una vez asignado un servidor a un usuario, éste le servirá el resto de peticiones).

Uno de los proyectos a supervisar es la aplicación WebClient.war, que se despliega en http://xxx.xxx.es/ (configurando el virtual host y el contexto / en jboss-web.xml).

 

Instalación de JavaMelody

Descargamos el proyecto JavaMelody (en el momento de escribir este post utilizamos la versión 1.50 en formato ZIP), lo descomprimimos y copiamos las librerías javamelody.jar y jrobin-1.5.9.1.jar en el directorio WEB-INF/lib del proyecto WebClient.war.

 

A continuación, mostramos los cambios a efectuar en el fichero web.xml para integrar la herramienta de monitorización JavaMelody en la aplicación WebClient.war :

   ...

   <!-- Inicio de la configuración de JavaMelody en web.xml -->	

   <filter>

      <filter-name>monitoring</filter-name>
      <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>

      <init-param>
         <param-name>storage-directory</param-name>
         <param-value>/var/log/alliance/javamelody</param-value>
      </init-param>

      <init-param>
         <param-name>datasources</param-name>
         <param-value>java:jboss/datasources/transaccional,java:jboss/datasources/odsweb</param-value>
      </init-param>

      <init-param>
         <param-name>allowed-addr-pattern</param-name>
         <param-value>127\.0\.0\.1</param-value>
      </init-param>

   </filter>

   <filter-mapping>
      <filter-name>monitoring</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>

   <listener>
      <listener-class>net.bull.javamelody.SessionListener</listener-class>
   </listener>

   <!-- Fin de la configuración de JavaMelody en web.xml -->	

   ...

Configuración de los datasources de JavaMelody

La aplicación WebClient.war se despliega en JBoss EAP 6.2, servidor que tiene configurado los nombres JNDI de los datasources como java:jboss/datasources/transaccional y java:jboss/datasources/odsweb aunque internamente el código fuente de la aplicación web utiliza  las referencias de nombre jdbc/postgresql/web y jdbc/mysql/stock (ver el mapeo realizado en web.xml entre XXX).

Si los nombres JNDI son del tipo jdbc/XXX, no es necesario configurar el parámetro datasources de las configuraciones de JavaMelody en e l fichero web.xml pero en este caso al ser del tipo java:jboss/datasources/XXX (diferente a lo que habitualmente espera la aplicación de monitoreo), hay que configurarlo expresamente :

   ...

      <init-param>
         <param-name>datasources</param-name>
         <param-value>java:jboss/datasources/transaccional,java:jboss/datasources/odsweb</param-value>
      </init-param>

   ...

Configuración de los logs de JavaMelody

Configuramos el parámetro storage-directory indicando la ruta /var/log/alliance/javamelody/webclient dónde se volcarán los logs de JavaMelody :

   ...

      <init-param>
         <param-name>storage-directory</param-name>
         <param-value>/var/log/alliance/javamelody</param-value>
      </init-param>

   ...

 


Nota: Observamos que se creará el directorio /var/log/alliance/javamelody/webclient/_jboss1 en el servidor JBoss 1 y directorio /var/log/alliance/javamelody/webclient/_jboss2 en el servidor JBoss 2 para almacenar los correspondientes ficheros de log.

Configuración de la seguridad

Por defecto, cualquier usuario puede acceder a la página de monitorización a través de http://xxx.xxx.es/monitoring por lo que procedemos a securizarlo permitiendo únicamente el acceso a través de una IP concreta de la Intranet del cliente (10.0.0.25) configurando el parámetro allowed-addr-pattern.

   ...

      <init-param>
         <param-name>allowed-addr-pattern</param-name>
         <param-value>10\.0\.0\.25</param-value>
      </init-param>

   ...

Otras consideraciones: Errores en el character encoding

En cuanto configuramos JavaMelody en la aplicación web, ésta dejó de servir las páginas correctamente mostrando carácteres anómalos (pérdida de acentos, …).

Al integrar JavaMelody, el character encoding varía y la única solución es indicándolo directamente en algún filtro (en nuestro caso response.setCharacterEncoding(‘iso-8859-1’) o indicándolo desde la consola web de JBoss).

 

Y ya está… Si todo ha ido bien, os saldrá una página similar a la siguiente :

javamelody_monitoring_hidden

Share