javamelody monitoring java web applications

JavaMelody: Monitorización de aplicaciones web en Java

Qué es JavaMelody

JavaMelody es una práctica herramienta de monitorización para aplicaciones web Java o JavaEE. Permite almacenar automáticamente estadísticas y errores resultantes del funcionamiento real de una aplicación web para su posterior evaluación. JavaMelody se integra fácilmente en la propia aplicación, por lo que no es necesario ningún tipo de instalación o modificación de la configuración del servidor web.

Cabe destacar que la herramienta JavaMelody no está destinada a producir datos, su función es medir y calcular estadísticas sobre el funcionamiento real de la aplicación. Se basa principalmente en gestionar estadísticas de solicitudes y en gráficos de evolución debido a la utilización de la aplicación por parte de los propios usuarios. Como se puede ver, principalmente está destinada a entornos de calidad o de producción.

JavaMelody se distribuye bajo licencia OpenSource y es seguro su uso en aplicaciones en entornos de producción. JavaMelody es fácil de integrar en la mayoría de las aplicaciones (no necesita perfiles ni base de datos) y es bastante ligera. Se puede activar JavaMelody con total seguridad ya que crea una capa prácticamente transparente entre la herramienta y nuestra aplicación. No produce ningún tipo de merma en cuanto al rendimiento.

En este artículo vamos a analizar de forma resumida la instalación, configuración y uso de JavaMelody.

Qué información nos aporta JavaMelody

Tal como comentamos en la introducción, JavaMelody es una herramienta para medir y calcular estadísticas sobre el funcionamiento real de una aplicación en función del uso por parte de los usuarios. 

Permite la optimización de las aplicaciones ayudando a:

  • Obtener datos sobre los tiempo de respuestas promedio y el número de ejecuciones.
  • Tomar decisiones cuando las tendencias son malas, evitando problemas mayores.
  • Localizar las causas de los tiempo de respuestas más limitados.
  • Verificar las mejoras reales producidas por las optimizaciones.

Gráficas de estadísticas

Se incluyen gráficas que muestran la evolución temporal de los siguientes indicadores:

  • Números de ejecuciones, tiempo medio de ejecución y porcentajes de errores producidos por las consultas http, sql, acciones jsf o strut, páginas jsf o métodos de fachada de negocio.
  • Memoria Java.
  • CPU Java.
  • Número de sesiones de usuario y de conexiones jdbc.
javamelody statistics charts

Estadística de indicadores

Se incluyen estadísticas de los contadores predefinidos (consultas http, sql, acciones jsf o strut, páginas jsf o métodos de fachada de negocio) con la siguiente información:

  • Resumen con el número de ejecuciones, tiempo de ejecución promedio, tiempo de CPU y porcentaje de errores.
  • Porcentaje de tiempo de aquellas peticiones que superen un cierto umbral.
  • Para cada solicitud http indica el tamaño de la respuesta de flujo, el número medio de ejecuciones de sql y el tiempo medio de sql.
JavaMelody: tablas de estadísticas temporales
JavaMelody: tablas de estadísticas temporales

Información del sistema

Además de todo lo anterior, se incluye información detallada sobre el sistema así como estadísticas sobre errores de http, sobre advertencias y errores en logs, en cachés de datos, si se utiliza EHCache, y en trabajos por lotes, si estamos utilizando Quartz.

JavaMelody: información del sistema
JavaMelody: información del sistema

De esta forma podemos conocer el nombre del host de la máquina, el sistema operativo que está utilizando, versiones de JDK, el número de versión del servidor utilizado, etc. Incluso, visualizando los detalles, podemos acceder al POM y una tabla resumen con las dependencias Maven utilizadas en la aplicación.

Se puede ver una demo online en la página oficial del proyecto.

Instalación y configuración de JavaMelody

Uno de los puntos fuertes de JavaMelody es que su instalación resulta realmente sencilla. Para una instalación y configuración básica simplemente debemos seguir los siguientes pasos:

Añadiendo JavaMelody a nuestro proyecto

Recomendamos la descarga de JavaMelody definiendo la dependencia Maven en nuestro proyecto. En caso de que nuestro proyecto no esté Mavenizado entonces será necesario descargar el archivo desde la web del proyecto, descomprimir el fichero y copiar los archivos javamelody-x.x.x.jar y jrobin.x.x.x.jar al directorio WEB-INF/lib.

		<dependency>
		    <groupId>net.bull.javamelody</groupId>
		    <artifactId>javamelody-core</artifactId>
		    <version>1.77.0</version>
		</dependency>
		<dependency>
			<groupId>com.lowagie</groupId>
			<artifactId>itext</artifactId>
			<version>2.1.7</version>
		</dependency>

Nota: A pesar de seguir las indicaciones de instalación, donde se dice que la librería es opcional, al ejecutar la herramientas se produjeron errores en la carga de las gráficas ya que era necesario la utilización de la herramienta iText.

Configurando JavaMelody

Una vez descargado JavaMelody es necesario modificar el fichero WEB-INF/web.xml para establecer el siguiente filtro con la configuración y los recursos a monitorizar.

<filter>
		<filter-name>monitoring</filter-name>
		<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
		<async-supported>true</async-supported>
	</filter>
	<filter-mapping>
		<filter-name>monitoring</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>ASYNC</dispatcher>
	</filter-mapping>
	<listener>
		<listener-class>net.bull.javamelody.SessionListener</listener-class>
	</listener>

En este caso monitorizamos toda la aplicación y establecemos una configuración por defecto.

También hemos activado la monitoriazación de las consultas SQL modificando de la siguiente forma nuestro fichero META-INF/persistence.xml de Hibernate.

<property name="hibernate.connection.driver_class">net.bull.javamelody.JdbcDriver</property>
<property name="hibernate.connection.driver">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/myschema</property>
<property name="hibernate.connection.username">myuser</property>
<property name="hibernate.connection.password">mypassword</property>

Si se desea conocer como monitorizar diversos recursos, como añadir seguridad o como añadir otros plugins de monitorización pueden consultar la guía oficial de JavaMelody.

Cómo acceder a JavaMelody

Podremos acceder a la herramienta a través de:

http:://host:puerto/contexto/monitoring

  • host:puerto – nombre o IP donde se encuentra la aplicación, por ejemplo localhost:8080.
  • contexto – Es el nombre del contexto de nuestra aplicación web.

Al acceder a JavaMelody, por defecto, no se nos solicita ningún usuario y contraseña. Antes de utilizarse en entornos de producción es muy recomendable restringir el acceso a la herramienta.

Cómo restringir el acceso a JavaMelody

La seguridad se puede establecer definiendo un rango de direcciones IP permitidas o mediante el uso de los roles de usuario.

Autentificación por rango de IPs

Javamelody nos permite restringir el acceso a través de una expresión regular tomando como parámetro la dirección IP del usuario. Esto se consigue mediante el parámetro de configuración allowed-addr-pattern. Por ejemplo: «192\.168\..*|10\.0\.0\.1» para permitir las IP que se encuentren en el rango «192.168.*.*» o cualquier máquina que se encuentre detrás de la puerta de enlace 10.0.0.1.
Hay que tener en cuenta que si usamos un servidor proxy http como Apache, la dirección IP del cliente será la de Apache. Por ello, no debes usar allowed-addr-pattern en este caso o, si es ese el caso, no usar Apache para acceder a esta página, o  habilitar mod_proxy_ajp para que el servidor monitoreado sepa las direcciones IP de los clientes.

Ejemplo de httpd.conf con AJP:

<location /webapp>
ProxyPass ajp://localhost:8080/webapp
</location>

Autentificación por usuario y contraseña

Ejemplo de configuración de la autenticación por usuario y contraseña en el fichero web.xml:

<login-config>
	<auth-method>BASIC</auth-method>
	<realm-name>Monitoring</realm-name>
</login-config>
<security-role>
	<role-name>monitoring</role-name>
</security-role>
<security-constraint>
	<web-resource-collection>
		<web-resource-name>Monitoring</web-resource-name>
		<url-pattern>/monitoring</url-pattern>
	</web-resource-collection>
	<auth-constraint>
		<role-name>monitoring</role-name>
	</auth-constraint>
	<!-- if SSL enabled (SSL and certificate must then be configured in the server)
	<user-data-constraint>
		<transport-guarantee>CONFIDENTIAL</transport-guarantee>
	</user-data-constraint> 
	-->
</security-constraint>

En este caso es necesario definir el realm y los usuarios con el rol de tipo «monitoring». Por ejemplo, si utilizamos Tomcat con el realm por defecto, bastaría con modificar el fichero tomcat-users.xml tal como se indica:

<tomcat-users>
	<role rolename="monitoring"/>
	<user username="monitoring" password="monitoring" roles="monitoring"/>
</tomcat-users>

O, si se opta por la seguridad básica (BASIC authentication), mediante usuario y contraseña, pero sin un realm y sin un «security-constraint» en el fichero web.xml, basta añadir el parámetro «authorized-users» en el filtro anterior definido para JavaMelody:

<filter>
	<filter-name>javamelody</filter-name>
	<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
	<init-param>
		<param-name>authorized-users</param-name>
		<param-value>user1:pwd1, user2:pwd2</param-value>
	</init-param>
</filter>
Valoración: 1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (2 votos, promedio: 5,00 de 5)
Cargando...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *