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.



