Después de investigar sobre herramientas open source de APM nos encontramos con inspectIt, un proyecto con licencia Apache 2.
Monitorización y análisis de rendimiento de aplicaciones con InspectIT APM.
0. Índice de contenidos.
1. Introducción
Después de trabajar con
New Relic,
AppDynamics o
Dynatrace y
haber trasteado también con
PinPoint,
en este tutorial vamos a probar otra herramienta open source llamada inspectIt.
Se basa en los mismos principios que el resto, tiene un agente, un server (CMR) y un cliente basado, esta vez, en la
plataforma Eclipse.
2. Entorno.
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil MacBook Pro 15′ (2.5 GHz Intel Core i7, 16GB DDR3).
- Sistema Operativo: Mac OS El Capitan 10.11
- InspectIt 1.7.3
3. Instalación.
Como casi todas, podemos realizar una descarga del producto dockerizado o realizar una instalación, accediendo a la página de descarga
http://www.inspectit.rocks; para el objetivo de este tutorial vamos a realizar una instalación,
seleccionando primero el sistema operativo.
y después la versión
una vez descargado, podemos acceder al paquete de instalación ejecutando el siguiente comando:
macbook-jmsanchez:Downloads jmsanchez$ java -jar inspectit.installer-all.macosx.x64-1.6.9.83.jar
Que lanzará un wizard de instalación
Aceptamos la licencia
Seleccionamos los componentes a instalar
Y el directorio de instalación
Que, como no existe, se creará
Una vez instalados los paquetes
La instalación ha finalizado
Sólo nos queda arrancar el servidor (CMR):
macbook-jmsanchez:CMR jmsanchez$ ./startup.sh 2016-09-16 16:07:25,216: 214 [ main] INFO rocks.inspectit.server.CMR - Central Measurement Repository is starting up! 2016-09-16 16:07:25,218: 216 [ main] INFO rocks.inspectit.server.CMR - ============================================== ... 2016-09-16 16:07:32,251: 7249 [ main] INFO rocks.inspectit.server.CMR - Spring successfully initialized 2016-09-16 16:07:32,252: 7250 [ main] INFO rocks.inspectit.server.CMR - Starting CMR in version 1.6.9.83. Please note that inspectIT does not provide any guarantee on backwards compatibility. Only if the version match exactly we ensure that the components are compatible. 2016-09-16 16:07:32,252: 7250 [ main] INFO rocks.inspectit.server.CMR - CMR started in 7036.505 ms
Y configurar el agente en un servidor para que comience a enviar información añadiendo en los parámetros de arranque los siguientes argumentos:
-javaagent:/Applications/development/inspectIT/agent/inspectit-agent.jar -Dinspectit.repository=localhost:9070 -Dinspectit.agent.name=TOMCAT_9
Debería quedar como sigue:
Tras navegar por la aplicación comenzará a enviar información al servidor. Podemos comprobar en los logs de arranque del propio servidor información sobre la conectividad.
sep 16, 2016 11:27:31 PM rocks.inspectit.agent.java.javaagent.JavaAgent premain INFO: inspectIT Agent: Starting initialization... 23:27:33.149 [main] INFO rocks.inspectit.agent.java.SpringAgent - Location of inspectit-agent.jar set to: /Applications/development/inspectIT.1.7/agent/inspectit-agent.jar 2016-09-16 16:27:33,569: [inspectIT] 446 [ main] INFO spectit.agent.java.SpringAgent - Initializing Spring on inspectIT Agent... 2016-09-16 16:27:34,296: [inspectIT] 1173 [ main] INFO nfig.impl.ConfigurationStorage - Repository information found in the JVM parameters: IP=localhost Port=9070 2016-09-16 16:27:34,296: [inspectIT] 1173 [ main] INFO nfig.impl.ConfigurationStorage - Repository definition added. Host: localhost Port: 9070 2016-09-16 16:27:34,296: [inspectIT] 1173 [ main] INFO nfig.impl.ConfigurationStorage - Agent name found in the JVM parameters: AgentName=TOMCAT_8 2016-09-16 16:27:34,319: [inspectIT] 1196 [ main] INFO nfig.impl.ConfigurationStorage - Agent name set to: TOMCAT_8 2016-09-16 16:27:34,409: [inspectIT] 1286 [ main] INFO izer.schema.ClassSchemaManager - ||-Class Schema Manager started.. 2016-09-16 16:27:34,751: [inspectIT] 1628 [ main] INFO nection.impl.KryoNetConnection - KryoNet: Connecting to localhost:9070 2016-09-16 16:27:36,598: [inspectIT] 3475 [ main] INFO nection.impl.KryoNetConnection - KryoNet: Connection established! 2016-09-16 16:27:36,863: [inspectIT] 3740 [ main] INFO nfig.impl.ConfigurationStorage - Agent configuration added with following configuration interface properties: 2016-09-16 16:27:36,863: [inspectIT] 3740 [ main] INFO nfig.impl.ConfigurationStorage - Assigned environment: Default Environment 2016-09-16 16:27:36,863: [inspectIT] 3740 [ main] INFO nfig.impl.ConfigurationStorage - Active profiles: 2016-09-16 16:27:36,864: [inspectIT] 3741 [ main] INFO nfig.impl.ConfigurationStorage - |-[Common] SQL 2016-09-16 16:27:36,864: [inspectIT] 3741 [ main] INFO nfig.impl.ConfigurationStorage - |-[Common] HTTP 2016-09-16 16:27:36,864: [inspectIT] 3741 [ main] INFO nfig.impl.ConfigurationStorage - |-[Common] Exclude Classes 2016-09-16 16:27:36,864: [inspectIT] 3741 [ main] INFO nfig.impl.ConfigurationStorage - Options: 2016-09-16 16:27:36,864: [inspectIT] 3741 [ main] INFO nfig.impl.ConfigurationStorage - |-class loading delegation: true 2016-09-16 16:27:36,864: [inspectIT] 3741 [ main] INFO nfig.impl.ConfigurationStorage - |-enhanced exception sensor: false 2016-09-16 16:27:36,864: [inspectIT] 3741 [ main] INFO nfig.impl.ConfigurationStorage - Class-cache exists on the server: true 2016-09-16 16:27:36,865: [inspectIT] 3742 [ main] INFO nfig.impl.ConfigurationStorage - Number of initially instrumented classes: 26 2016-09-16 16:27:37,354: [inspectIT] 4231 [ main] INFO spectit.agent.java.SpringAgent - Spring successfully initialized 2016-09-16 16:27:37,355: [inspectIT] 4232 [ main] INFO spectit.agent.java.SpringAgent - Using agent version 1.7.3.86.
4. Un vistazo rápido.
Dentro de la carpeta inspectit del directorio de instalación encontraremos un ejecutable para arrancar el cliente de monitorización
que debería mostrar una interfaz como la siguiente.
Accediendo a local CMR podremos comprobar como se muestra la información remitida por el agente.
Pulsando sobre una transacción podemos acceder a su drill down
La información se puede almacenar
Creando un almacén
Seleccionado un agente para almacenar esa información
La información a almacenar
E indicando o no un límite para la monitorización
Podemos filtrar la información sobre las transacciones de entre un rango horario
Pulsando sobre botón derecho > detalles podemos acceder a la siguiente información
La información a monitorizar se puede configurar añadiendo más perfiles y modificándolos
Si pulsamos sobre Http timer data, podemos acceder a la infomación agregada por URLs
En una aplicación con más tráfico se mostraría una información como la siguiente
Desde esa vista podemos acceder a la información individual sobre cada una de las transacciones realizadas desde esa misma URL
En una transacción con acceso a base de datos el drill down se mostrará como sigue:
Y pulsando sobre la pestaña inferior de SQL podremos acceder a la siguiente información:
Si accedemos al detalle de la SQL ejecutada podemos ver una información como la siguiente:
Por último podemos visualizar la información en forma de gráfico si seleccionamos las transacciones botón derecho > «Navigate to» > «Display in Chart»
Que mostraría un gráfico como el siguiente:
5. Referencias.
6. Conclusiones.
Le falta un componente muy interesante que sí tiene el resto de APMs con los que hemos trabajado hasta ahora:
el dashboard de componentes, aquél que muestra todos los servidores y motores de bases de datos monitorizados.
Del mismo modo que con PinPoint, le haremos un seguimiento.
Un saludo.
Jose
hola amigos,
en alternativa https://lorenzoongithub.github.io/nudge4j/