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/
Hola Toni:
Gracias por mencionarnos.
Es una excelente herramienta que hemos incorporado recientemente para completar nuestro inventario. Además la usamos en nuestro ecosistema para monitorizar los entornos de despliegue. Así de cara a producción tenemos una estimación de partida.
PD: Sigo a la espera de encontrar solución a http://issues.alfresco.com/jira/browse/ALF-1535
Un saludo
Hola Manuel,
No, gracias a vosotros por darme la idea. Sobre el error que comentas creo que para la 3.4 Communiy estará resuelto, he visto que el ticket está cerrado (http://issues.alfresco.com/jira/browse/ALF-1535?focusedCommentId=72245&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_72245) habéis probado con las recomendaciones que dice David?
Saludos.
Probado en la 3,3 sp2 Enterprise, mola!
Hola he configurado JavaMelody para Alfresco comunity 3.4e, con exito, lo que no logro hacer funkar es el envio de reporte al correo, por lo que vi en las instrucciones de configuracion, no se asemeja a la estructura de mi alfresco. Por favor, si alguien pudiera darme alguna solución o indicacion.
Gracias.
Follow-up : a discussion about sql/jdbc monitoring in Alfresco and about monitoring Alfresco’s beans/classes
http://groups.google.com/group/javamelody/browse_thread/thread/176652b3d0f069d1