Java Melody

12
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.

description

mld

Transcript of Java Melody

Page 1: 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

Page 2: Java Melody

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

Page 3: Java Melody

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>

Page 4: Java Melody

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>

Page 5: Java Melody

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>

Page 6: Java Melody

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

Page 7: Java Melody

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.

Page 8: Java Melody

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>

Page 9: Java Melody

<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>

Page 10: Java Melody

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/