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