Monitorización de aplicaciones web
Una de nuestras líneas de trabajo se basa en la realización de auditorías de calidad software, en las cuales incluimos, entre otras secciones, un análisis detallado de rendimiento de la aplicación. Desde hace tiempo veníamos echando en falta una herramienta poco intrusiva que nos permitiera monitorizar ciertos parámetros o indicadores del lado del servidor (hablamos de aplicaciones web). Tiempo atrás hemos usado JConsole o VisualVM, que son magníficas herramientas, pero en ciertos entornos con "acceso limitado" no están permitidas ciertas acciones, por ejemplo, abrir un puerto (JMX) para la monitorización (y mucho menos el puerto de vuelta, distinto en cada sesión).
Este conjunto de precondiciones nos ha llevado a Javamelody. Es cierto que no es totalmente comparable con JConsole o VisualVM, ya que Javamelody no es una herramienta de profiling, sólo de monitorización, pero en la mayoría de los casos es suficiente. Además Javamelody proporciona datos que JConsole y VisualVM no, como el mapeo de petición HTTP a SQL ejecutado.
Javamelody sólo requiere:
- Copiar dos ficheros (jar) al WEB-INF/lib de la aplicación a monitorizar
- Incluir 10 líneas en el web.xml
- Opcionalmente, incluir un sniffer JDBC si se quiere monitorizar también el acceso a base de datos (recomendado)
¿Cómo se accede a los datos de monitorización?. A través de la propia interfaz web de la aplicación monitorizada (http://<host>:<port>/<my-context>/monitor), lo que hace que los requisitos para la monitorización se reduzcan al acceso web a la propia aplicación, algo de lo que, evidentemente, se dispone.
Los resultados (gráficos) son algo así:
Pero más que lo gráficos es sí (muy interesantes para monitorizar una aplicación en producción durante un periodo largo de tiempo), nos llama la atención (por su gran utilidad) cómo se relaciona cada petición HTTP con las consultas SQL asociadas a ellas. Esta funcionalidad nos permite distinguir el tiempo empleado en ejecutar el código Java y el tiempo empleado en las consultas a base de datos.
Aunque la herramienta está diseñada para monitorizar aplicaciones en producción, nosotros también queremos usarla para monitorizar una aplicación web bajo una determinada carga de trabajo. En este contexto nos preocupaba el overhead que la herramienta pudiera introducir al realizar las labores de monitorización. Hemos consultado a los desarrolladores de Javamelody y nos han proporcionado datos objetivos sobre ello, ahora podemos decir que no supondrá un problema.




May 15th, 2010 - 14:59
Gran artículo. Gracias por publicarlo.
Habia oido hablar de esta herramienta, pero desconocia esa funcionalidad de relacionar peticiones http con consultas SQL. Me parece una maravilla.
¿Puedes comentar un poco más sobre la sobrecarga que mencionas en Javamelody o en las otras herramientas que mencionas? Yo tenía entendido que usar VisualVM en Producción era tremendamente costoso, pero claro como tu mismo dices es un profiler…
May 16th, 2010 - 17:02
Hola Julio,
Efectivamente, usar VisualVM en producción en inviable dada su condición de profiler (se está introduciendo un pequeño retardo por cada línea de código ejecutada).
El impacto de JConsole no es tan grande, se limita a la exportación a través de JMX de cierta información relativa a la JVM (uso de los distintos tipos de memoria, uso de CPU, Garbage Collector, y algunos datos más). Puedes leer algo más profundo en el blog de Eamonn McManus [1].
El retardo introducido por Javamelody es aún menor, ya que funciona a nivel interno en la JVM (estamos poniendo dos JARs en el propio classpath de la aplicación), entre otros aspectos [2].
Un saludo.
[1] http://weblogs.java.net/blog/emcmanus/archive/2006/07/how_much_does_i.html
[2] http://groups.google.com/group/javamelody/browse_thread/thread/dfdb7101217ffcbc
May 19th, 2010 - 15:13
Para nuestros desarrollos, nosotros estamos utilizando RPM de Newrelic (comercial).
Es una herramienta cliente-servidor, por lo que en entornos limitados posiblemente no sea una opción (necesita conexión con la plataforma de newrelic). Otra diferencia es que el despliegue se hace a nivel de servidor web (no se modifica la aplicación).
La información disponible con la licencia gratuita es bastante escasa, la verdad… pero también es capaz de calcular los consumos de tiempos en código vs sql.
May 19th, 2010 - 19:51
Hola Abel,
No la conocía. Lo cierto que nosotros aún no hemos tenido la necesidad de usar una herramienta comercial, con las funcionalidades que ofrecen las que hay disponibles de forma Open Source nos basta.
Un saludo.
July 13th, 2010 - 17:05
Hola Antonio,
Una pequeña duda que tengo me he empezado ha mirar este tema hoy y he visto que al reiniciar el tomcat se pierden todos los datos almacenados. He intentado encontrar alguna información sobre los ficheros que utiliza JavaMelofy para almacenar la información temporal pero no lo he encontrado.
Tu me podrias guiar un poco sobre donde buscarlos o con algún link en el que pueda encontrar mas información.
Muchas gracias
July 13th, 2010 - 19:00
Hola Ruben,
Los reportes generados no deberían borrarse, se almacenan en
De todas formas el lugar donde se almacenan los reportes es configurable mediante la propiedad
. En la guía de usuario hay información sobre esta propiedad.
Un saludo.
July 19th, 2010 - 13:25
Gracias por la información.
El otro día cuando lo estaba mirando tenía que estar muy cansado/empanado para no verlo. Ahora me lo miro.
Un saludo
September 28th, 2010 - 11:01
Me podrías decir cuando ocupan más o menos los ficheros generados?
September 28th, 2010 - 13:02
Hola Carlos,
Javamelody genera ficheros “rrd”. Cada uno de ellos tiene un tamaño de 34272 Bytes. Desconozco la politica que sigue la generación de estos ficheros, pero te puedo decir que con la configuración por defecto se generan entre 250 y 350 ficheros de este tipo.
Un saludo.
July 19th, 2011 - 22:10
Mi duda es como se puede y si se puede integrar con zabbix o envia alarmas via correo electronico.
Es muy poca la información para javamelody, lo he instalado pero no logro dar con algun modulo que genere alertas o las envie por email.
July 19th, 2011 - 23:47
Hola Oscar,
Hasta donde conozco no hay ningún tipo de integración con Zabbix ni ningún sistema externo de este tipo. El proyecto es Open Source, puedes desarrollar un pequeño módulo de envío de correos con cierta periodicidad, seguro que no cuesta mucho.
Un saludo.