Después de analizar muchas herramientas comerciales de APM nos encontramos con PinPoint, un proyecto open source para crear una herramienta de APM.
Índice de contenidos.
1. Introducción
Tenemos muchas referencias de herramientas de monitorización de tipo APM y en este mismo site podéis consultar revisiones de muchas de ellas:
New Relic
AppDynamics y
Dynatrace.
En esta ocasión vamos a realizar una revisión de una herramienta open source bautizada como PinPoint, cuya traducción es «determinar con precisión».
Creemos que es una herramienta que vale la pena tener en consideración puesto que, aunque no tiene todas las características de sus competidores comerciales, todas se basan en la misma arquitectura,
y aunque quizás requiere un poco más de esfuerzo en su instalación, los resultados de la monitorización son igual de interesantes.
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
- PinPoint APM 1.6.0-SNAPSHOT
3. Instalación.
Podemos llevar a cabo una instalación muy simple puesto que, a día de hoy, disponemos de la versión 1.5.2 dockerizada
y disponible en docker hub.
Con seguir los pasos documentados podemos, en un par de minutos, comprobar como con una aplicación de ejemplo, se puede comenzar
a ver los resultados de la monitorización de la misma.
Si bien, en este tutorial, vamos montarnos el entorno de desarrollo del producto lo cuál nos permitirá examinar las últimas características del mismo.
Lo primero que necesitaremos es bajarnos el código fuente del proyecto PinPoint de github.
A continuación debemos configurar una serie de variables de entorno apuntando a las siguientes versiones de la JDK:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home export JAVA_6_HOME=/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home export JAVA_7_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home export JAVA_8_HOME=$JAVA_HOME
Y ejecutar, con el soporte de maven, un clean install
mvn clean install -Dmaven.test.skip=true
Maven invoca internamente tanto a tareas de ant como de npm, con lo que igualmente debemos tenerlos instalados y con permisos de ejecución.
Si, como yo, no tenéis instalada ya una versión 6 de la jdk en Mac podéis obtenerla aquí.
Una vez compilado y generados los correspondientes artefactos volveríamos a tener dos posibilidades:
- arrancarlo dockerizado con el soporte de una configuración para docker-compose que se distribuye en el propio repositorio, o
- arrancarlo manualmente, que es la opción que vamos a seguir, puesto que la idea es seguir «trasteando» con la herramienta.
Para continuar deberíamos descargarnos la última versión de hbase, una base de datos distribuida, no relacional, que forma parte del proyecto Hadoop.
Si bien en el propio arranque si no la encuentra se la descarga automáticamente.
Para finalizar tenemos que ejecutar los siguientes scripts:
-
Para levantar la base de datos:
quickstart/bin/start-hbase.sh
-
Para crear e inicializar las tablas de la base de datos:
quickstart/bin/init-hbase.sh
-
Para arrancar el servidor:
quickstart/bin/start-collector.sh
-
Para arrancar el cliente:
quickstart/bin/start-web.sh
-
Podemos arrancar una aplicación de ejemplo que nos permitirá generar transacciones de monitorización más o menos costosas y comprobar su captura desde el cliente:
quickstart/bin/start-testapp.sh
Una vez arrancado todo podemos acceder a:
http://localhost:28080/
se debería mostrar una interfaz como la siguiente:
Y para ejecutar la aplicación de ejemplo a:
http://localhost:28081/
se debería mostrar una aplicación en la que podemos acceder a distintas ejecuciones para generar trazas:
4. Un vistazo rápido.
Una vez hayamos generado tráfico se generará un dashboard como el siguiente en el que lo primero que debemos hacer es seleccionar la aplicación:
Una vez seleccionado, podemos ver el gráfico de componentes desde el cual se ha monitorizado el tráfico,
se puede observar el número de transacciones correctas y no y una criticidad de las mismas por tiempo de ejecución.
En esta versión, la usabilidad de la interfaz es mejorable puesto que, para acceder al detalle de las transacciones, la única opción es seleccionar en el
gráfico superior derecho un área de puntos. Se podría haber planteado el acceso a las mismas igualmente desde el gráfico de acumulados.
Pero una vez lo conocemos, podemos acceder al detalle de cada una de las transacciones para hacer un drill down sobre una en concreto para ver toda la pila de ejecución de la misma.
Con ello podemos ver el origen de un error, como en el siguiente caso
Podemos arrancar una aplicación nuestra, configurando el tomcat con los siguientes parámetros, para comprobar cómo monitoriza el acceso a base de datos:
-javaagent:/Applications/development/pinpoint/pinpoint-master/quickstart/agent/target/pinpoint-agent/pinpoint-bootstrap-1.6.0-SNAPSHOT.jar -Dpinpoint.applicationName=TMS -Dpinpoint.agentId=ECLIPSE_TOMCAT8
Nada más arrancar podremos comprobar que se muestra la aplicación en el listado de las mismas y, en cuanto comencemos a navegar por la misma comprobaremos que el gráfico de componentes se va generando y podemos acceder a las estadísticas.
Si seleccionamos un área del gráfico que contenga una transacción algo costosa, podemos comprobar el detalle de la misma:
Si en la pila hay consultas a base de datos, se puede acceder a la consulta realizada pulsando sobre el icono de «SQL»:
5. Referencias.
6. Conclusiones.
Tanto la interfaz de usuario como su usabilidad se puede mejorar bastante. De hecho hay momentos en los que el solape de capas o acciones de «volver atrás» hacen que se pierda la visibilidad de ciertos componentes.
Si bien, siendo un proyecto open source, lo más interesante es disponer de funcionalidades que las licencias comerciales no soportan, como disponer de alta disponibilidad monitorizando los diferentes nodos de tu aplicación en un solo controlador. La interfaz permite filtrar la información por agente:
Y, del mismo, modo acceder al detalle de la información enviada por cada uno de ellos:
Una herramienta a tener en cuenta y sobre la cuál iremos haciendo un seguimiento.
Un saludo.
Jose
Interesting!
Hola, no me queda claro como lo integro con mi aplicacion, tengo que correr en el contenedor mi .jar para analizar?
Muchas gracias
Hola
Y para configurar un servidor remoto? No veo entre los parámetros del agente como se le puede indicar la IP:puerto del servidor al que enviar las trazas.
Muchas gracias