Hace un tiempo leí este post sobre Monitorización de aplicaciones web con Javamelody escrito por Antonio Muñiz de Klicap y pensé que podría probarlo como no, con Alfresco. Así que me he puesto manos a la obra y aquí están los resultados.
En otros artículos (1, 2 y 3) he tratado de explicar las diferentes formas que existen para monitorizar Alfresco y tener una visión objetiva en cuanto al rendimiento de la aplicación, cuellos de botella, etc.
Hay métodos que son más intrusivos en cuanto a rendimiento que otros, por ejemplo, como indica Antonio en los comentarios de su artículo, el uso de VisualVM no sería viable para usos en producción ya que introduce retardos por cada línea de código ejecutada, JConsole (que viene con la JDK) no es tan intrusiva ya que sólo hace lecturas vía JMX de la información que ofrece la JVM (así es como funciona el plugin de Nagios para Alfresco). En el caso que nos ocupa, Javamelody, el impacto en la aplicación monitorizada es mucho menor que las anteriores ya que no se ataca directamente a la aplicación a monitorizar sino que se usan unos jars dedicados a la tarea de extraer la información.
La instalación de Javamelody es sencilla y aunque puedes ver más opciones aquí, estos son los pasos básicos para instalar la aplicación:
- Paramos Alfresco (en mi caso la versión 3.3), no es obligatorio.
- Descargamos el fichero javamelody-1.19.0.zip de la web del proyecto.
- Descomprimimos el archivo zip.
- Copiamos los ficheros javamelody-1.19.0.jar y jrobin-1.5.9.1.jar al directorio WEB-INF/lib que está dentro del directorio webapps/alfresco (puede variar dependiendo del servidor de aplicaciones), es el directorio que se crea automáticamente cuando desplegamos alfresco.war.
- Por último añadimos las siguientes líneas en el fichero WEB-INF/web.xml de la aplicación, dentro de las etiquetas web-app:
[xml]
<filter>
<filter-name>monitoring</filter-name>
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>monitoring</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>net.bull.javamelody.SessionListener</listener-class>
</listener>
[/xml]
- Opcionalmente, para poder generar informes en PDF debemos copiar a WEB-INF/lib el fichero itext-2.1.7.jar que podemos encontrar dentro del zip descargado en src/test/test-webapp/WEB-INF/lib/
- Accedemos via web http://localhost:8080/alfresco/monitoring
Añadir a todo lo anterior unas notas:
- Todos los ficheros generados por RRD se encuentran en tomcat/temp/javamelody.
- Podemos configurar Javamelody para que nos envíe los informes en PDF por correo electrónico con una periodicidad diaria, semanal o mensual.
- Recuerda que al estar los ficheros de Javamelody dentro del directorio alfresco (alfresco.war desplegado), cuando actualices Alfresco deberás volver a hacer el procedimiento de instalación de Javamelody.
- La web que nos muestra las estadísticas no tiene ningún tipo de protección por usuario y contraseña ya que es una web de consulta, no obstante, se podría establecer, mira aquí.
Dicho todo lo anterior ¿qué obtenemos? Aquí podemos ver algunas capturas de pantalla y otras muchas en este enlace:
Como comentaba anteriormente, lo he probado en Alfresco 3.3 Enterprise pero dadas las características de Javamelody debe funcionar en la versión Community. Espero vuestro feedback.
ACTUALIZACIÓN 16/Sept/2010:
Cuando arrancamos Alfresco tras haber copiado los ficheros jar, posiblemente veamos en el log de Tomcat, unas trazas como las siguientes (este error no afecta al rendimiento de la aplicación):
ERROR [log4j.jmx.LoggerDynamicMBean] Could not add appenderMBean for [null]. java.lang.NullPointerException: Invalid value (null) at net.bull.javamelody.Log4JAppender.register(Log4JAppender.java:50) at net.bull.javamelody.MonitoringFilter.initLogs(MonitoringFilter.java:272) at net.bull.javamelody.MonitoringFilter.init(MonitoringFilter.java:98)
Contacté con el desarrollador de Javamelody, Emeric Vernat y muy amablemente me envió una nueva versión de uno de los jars que soluciona ese problema, se trata de este: http://javamelody.googlecode.com/files/javamelody-20100915.jar. Para actualizar el jar debemos parar Alfresco, borrar el fichero <tomcat>/webapps/alfresco/WEB-INF/lib/javamelody-1.19.0.jar y copiar javamelody-20100915.jar en el directorio donde se encontraba el anterior. Arrancamos Alfresco y listo. Muchas gracias por el feedback Emeric!!
MAS INFO ACTUALIZADA A 12/12/12 AQUI: https://tpeelen.wordpress.com/2012/12/12/alfresco-monitoring-with-javamelody/