Java Melody
-
Upload
sergio-garate -
Category
Documents
-
view
256 -
download
0
description
Transcript of Java Melody
Javamelody Guía Completa Monitoreo de aplicaciones web
julio 31, 2012 por Emmanuel SioSin Comentarios Imprimir
Javamelody es una herramienta destinada a monitorear servidores de
aplicación Java o Java EE en ambientes de QA y producción. Es importante tener en
cuenta que no es una herramienta para simular pedidos de usuarios, sino que se debe utilizar
para medir y calcular estadísticas que surgen de la operatoria de la aplicación por todos los
usuarios.
Requisitos de Javamelody
Se requiere tener instaladas las siguientes versiones de Java:
o 1.5 como mínimo
o 1.6 o 1.7 para las siguientes funciones: heap dump, memory histogram, stack traces and
system load average
o JDK o JRE de Sun o JRockit de Oracle/BEA o J9 de IBM
Versiones de Servidor:
o JavaEE 1.4
o Tomcat 5.5, 6 o 7
o GlassFish v2 o v3
o JBoss 4, 5, 6 o 7
o Jonas 4 o 5
o Jetty 6 o 7
o WebLogic 9, 10, 11
Instalación de Javamelody
La instalación es realmente sencilla. Solamente basta copiar dos archivos en la carpeta WEB-
INF/lib de la aplicación que deseamos monitorear. Luego debemos editar el
archivo web.xml agregando algunas pocas líneas de código.
Instalación Paso a Paso
Los siguientes pasos son los básicos, donde elegimos a Tomcat como servidor de ejemplo.
Pasos:
a) Descargar el archivo javamelody-x.x.x.zip de la web del proyecto.
b) Descomprimir el archivo zip.
c) Copiar los archivos javamelody-x.x.x.jar y jrobin.x.x.x.jar al directorio WEB-INF/lib que está
dentro del directorio webapps/nuestra-aplicación.
d) Agregamos las siguientes líneas en el archivo WEB-INF/web.xml de la aplicación.
1. <filter>
2. <filter-name>monitoring</filter-name>
3. <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
4. </filter>
5. <filter-mapping>
6. <filter-name>monitoring</filter-name>
7. <url-pattern>/*</url-pattern>
8. </filter-mapping>
9. <listener>
10. <listener-class>net.bull.javamelody.SessionListener</listener-class>
11. </listener>
e) Si queremos tener informes en PDF debemos copiar a WEB-INF/lib el archivo itext-2.1.7.jar.
Este paso es opcional.
Si necesitan más customizaciones pueden obtenerlos del sitio de google code donde se
encuentra alojado todo el proyecto de Javamelody. Pueden visitarlo aquí.
Primeros resultados
Podemos acceder a nuestra herramienta a través de:
http://<host>/<my-context>/monitoring
o <host> : nombre del servidor donde la aplicación web está instalada, seguido
posiblemente por el puerto (por ejemplo localhost:8080).
o <my-context>: Es el nombre del contexto de la aplicación web.
Seguridad
La página de monitoreo no tiene datos como usuario y password para ser usados como login.
Por ello, antes de usar Javamelody en producción puede ser necesario que deseemos
restringir el acceso a esta página. Esta tarea recae en nosotros mismos, donde una de las
posibilidades es realizar un login customizado.Javamelody nos ayuda dándonos la
posibilidad de restringir su acceso a través de una expresión regular tomando como
parámetro la dirección IP del cliente. Esto podemos lograrlo a través de allowed-addr-
pattern. Por ejemplo: “192\.168\..*|123\.123\.123\.123” para permitir las IP que se encuentren
en el rango “192.168.*.*” mas cualquier pc que se encuentre detrás de una puerta de enlace
123.123.123.123.
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:
1. <location /webapp>
2. ProxyPass ajp://localhost:8080/webapp
3. </location>
Otra opción que tenemos es la utilización de roles. Si en nuestro archivo web.xml ya hemos
definido roles, entonces podemos habilitarlos para que solo ellos puedan acceder a la página
de monitoring.
Ejemplo utilizando roles:
1. <login-config>
2. <auth-method>BASIC</auth-method>
3. <realm-name>Monitoring</realm-name>
4. </login-config>
5. <security-role>
6. <role-name>monitoring</role-name>
7. </security-role>
8. <security-constraint>
9. <web-resource-collection>
10. <web-resource-name>Monitoring</web-resource-name>
11. <url-pattern>/monitoring</url-pattern>
12. </web-resource-collection>
13. <auth-constraint>
14. <role-name>monitoring</role-name>
15. </auth-constraint>
16. <!-- if SSL enabled (SSL and certificate must then be configured in the
server)
17. <user-data-constraint>
18.
19. <transport-guarantee>CONFIDENTIAL</transport-guarantee>
20. </user-data-constraint>
21. -->
22. </security-constraint>
Los usuarios deben estar definidos en el servidor de aplicación y deben tener asignado el rol
de monitoring para tener acceso a los reportes. Un ejemplo de cómo configurarlo sería del
siguiente modo:
1. <?xml version='1.0' encoding='utf-8'?>
2. <tomcat-users>
3. <role rolename="monitoring"/>
4. <user username="monitoring" password="monitoring" roles="monitoring"/>
5. </tomcat-users>
Activación consultas SQL
Si dentro de nuestra aplicación utilizamos Hibernate, entonces la siguiente línea de
configuración puede ser utilizada para poder activar el rastreo de las consultas SQL
realizadas.
Para ello buscamos el archivo hibernate.cfg.xml y agregamos la siguiente línea:
1. <property
nam
e="hibernate.jdbc.factory_class">net.bull.javamelody.HibernateBatcherFactor
y</property>
Esto habilita que Javamelody detecte cada consulta realizada y nos muestre el tiempo total de
ejecución, la cantidad de veces que se ejecutó dicha consulta, el máximo tiempo de ejecución,
desviación standard y el % de error del sistema.
Generación de reportes PDF
Para generar reportes en PDF como también en HTML, debemos agregar la librería iText
v2.1.x. Para ello buscamos el archivo iText-2.x.x.jar, ubicado en src/test/test-webapp/WEB-
INF/ lib dentro de javamelody.zip y copiarlo dentro del directorio WEB-INF/lib .
Suplementos en web.xml
Para evitar monitorear algunas url determinadas podemos usar url-pattern dentro del archivo
web.xml.
Por ejemplo, usamos filter-mappings y url-patterns para monitorear solamente urls como
/servlet1/* y /servlet2/* pero no otras como /static/*
1. <filter>
2. <filter-name>monitoring</filter-name>
3. <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
4. </filter>
5. <filter-mapping>
6. <filter-name>monitoring</filter-name>
7. <url-pattern>/servlet1/*</url-pattern>
8. </filter-mapping>
9. <filter-mapping>
10. <filter-name>monitoring</filter-name>
11. <url-pattern>/servlet2/*</url-pattern>
12. </filter-mapping>
13. <filter-mapping>
14. <filter-name>monitoring</filter-name>
15. <url-pattern>/monitoring</url-pattern>
16. </filter-mapping>
17. <listener>
18. <listener-class>net.bull.javamelody.SessionListener</listener-class>
19. </listener>
Es importante tener en cuenta que url-pattern debe contener la url /monitoring para tener
reportes.
Como alternativa, se puede usar un único /* url-pattern y un parámetro de filtro con una
expresión regular antes del tag .
Por ejemplo:
1. <filter>
2. <filter-name>monitoring</filter-name>
3. <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
4. <init-param>
5. <param-name>url-exclude-pattern</param-name>
6. <param-value>/static/.*</param-value>
7. </init-param>
8. </filter>
9.
10. <filter-mapping>
11. <filter-name>monitoring</filter-name>
12. <url-pattern>/*</url-pattern>
13. </filter-mapping>
14.
15. <listener>
16. <listener-class>net.bull.javamelody.SessionListener</listener-class>
17. </listener>
Esto ha sido todo sobre la instalación de JavaMelody. Esperamos que les sea útil a la hora de
tener una guía completa para su instalación.
tags: Java EE
Artículos relacionados:
o Crear un mapping a un servlet
o Redirigir todas las JSP a un Servlet
o Mi primer servlet
o Acceder a un directorio de un FTP con Java
o Crear un directorio con Java IO
Java Melody es uno de los frameworks que he estado utilizando desde hace un tiempo. Lo descubrí sin querer en code.google.com (uno de los tantos proyectos) y me pareció fabuloso, es por eso que quiero compartirlo con ustedes.
La utilidad que ofrece esta herramienta es la de poder monitorear y ver estadísticas de nuestro sitio web: HTTP, SQL, System Errors, Current Request, Threads, etc. También podremos exportar estos reportes en PDF.
Aquí explicaremos usando la versión 1.21 ya que es la que uso y en verdad, no tiene grandes diferencias con la última versión que es la 1.26. El uso es muy simple.
CONFIGURACIÓN BÁSICATendremos que agregar los archivos javamelody-x.x.x.jar y jrobin-x.x.x.jar al classpath del proyecto.En el web.xml de nuestro proyecto deberemos agregar los siguientes Filter y Listener:
<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>
Con esto ya estamos en condiciones de probar el monitoreo en nuestra aplicación. Para hacerlo basta con agregar al contextpath la url /monitoring. Por ejemplo: http://localhost:8080/appname/monitoringSi deseamos tener habilitada la opción de exportar el reporte a PDF deberemos incluir en el classpath el archivo iText-x.x.x.jar, lo podemos descargar desde aquí.Esta es la configuración básica de Java Melody, a continuación veremos algunas características más avanzadas.
MANEJO DE DEPENDENCIAS CON MAVENSi realizamos el manejo de dependencias con Maven, basta con agregar estas líneas al pom.xml: <dependency> <groupId>net.bull.javamelody</groupId> <artifactId>javamelody-core</artifactId> <version>1.20.0</version> </dependency> <dependency> <groupId>org.jrobin</groupId> <artifactId>jrobin</artifactId> <version>1.5.9</version> </dependency> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.4</version> <exclusions> <exclusion> <artifactId>bcmail-jdk14</artifactId> <groupId>bouncycastle</groupId> </exclusion> <exclusion> <artifactId>bcprov-jdk14</artifactId> <groupId>bouncycastle</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.3.1</version> </dependency>
<repositories> <repository> <id>m.g.o-public</id> <url>http://maven.glassfish.org/content/groups/public/</url>
<releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>opennms-repo</id> <name>OpenNMS Repository</name> <url>http://repo.opennms.org/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
CONFIGURACIÓN DE SPRING
Si manejamos las transacciones y acceso a base de datos son Spring, deberemos agregar
las siguientes líneas en el web.xml. Deben reemplazar el nombre de los archivos de
configuración por el de los suyos. En este caso se configura Spring en el
archivo applicationContext.xml que a la vez hace un import del
archivo hibernate.spring.xml.
<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:net/bull/javamelody/monitoring-spring.xml classpath:/hibernate-spring.xml /WEB-INF/classes/applicationContext.xml </param-value> </context-param> <listener> <listener-class>org.springframework.web.context. ContextLoaderListener</listener-class> </listener>Para más información visitar el sitio oficial: http://code.google.com/p/javamelody/