Hoy vamos a ver una herramienta open source para realizar diferentes tipos de tareas, desde tracing, monitorización o instrumentación: inspectIT. Esta herramienta es un Java Agent, los cuales ya conocemos algo mejor por el último post que hicimos, y que puedes ver aquí.
Este software intenta minimizar dos cosas. Por un lado, el tiempo de configuración necesario para utilizar otras herramientas de Application Performance Management, APM. Tal y como pueden ser Jaeger, Prometheus, Zipkin o Micrometer. Y por otro reducir las modificaciones a realizar en nuestras aplicaciones si queremos realizar tareas de instrumentación.
InspectIT esta basado en OpenCensus, que es un conjunto de librerías open software realizada en distintos lenguajes que permiten obtener métricas y trazas distribuidas. Dicho software tiene ya una amplia gama de exporters que permiten enviar la información a otras herramientas de monitorización. Y inspectIT soporta la mayoría de estos exporters.
Por todo ello, inspectIT es una herramienta genial. Al ser un Java Agent no necesitaremos modificar nuestras aplicaciones para obtener información de su rendimiento. Y además permite obtener métricas y trazas de forma automática y enviarlas a distintos destinos.
A través de los ejemplos, podremos ver como obtener las trazas y métricas de nuestra aplicación. El funcionamiento será similar en los distintos ejemplos. Para poder hacerlo funcionar deberemos seguir los dos siguientes pasos:
- Asociar el java agent almacenado en la librería a través del argumento de la JVM '-javaagent:/full/path/to/library'.
- Asociar a través de un argumento de la JVM la propiedad del exporter a utilizar.
- Por un lado, tenemos que hacer es descargarnos la librería que contiene el java agent, lo podemos hacer desde aquí. Y la ubicamos en una ruta que indicaremos más adelante al arrancar la aplicación.
- Arrancar Jaeger, por ejemplo con un docker-compose como el siguiente.
version: '2.4' networks: sandbox-apache-net: ipam: driver: default config: - subnet: 172.24.0.0/16 services: mysql: image: mysql:5.7.26 mem_limit: 2G container_name: sandbox-apache-mysql hostname: sandbox-apache-mysql networks: sandbox-apache-net: ipv4_address: 172.24.1.1 environment: MYSQL_HOST: sandbox-apache-mysql MYSQL_ROOT_PASSWORD: root ports: - 3306:3306 volumes: - ./configs/mysql/conf.d/custom.cnf:/etc/mysql/conf.d/custom.cnf - ./configs/mysql/scripts:/docker-entrypoint-initdb.d jaeger: image: jaegertracing/all-in-one:latest ports: - 16686:16686 - 14268:14268
- Por último arrancar la JVM pasandole los argumentos que nos permitan configurar el exporter deseado. Para el caso de Jaeger usaremos los siguientes:
-javaagent:/home/deesebc/Downloads/inspectit-ocelot-agent-1.8.1.jar \
-Dinspectit.exporters.tracing.jaeger.url=http://127.0.0.1:14268/api/traces \
-Dinspectit.exporters.tracing.jaeger.service-name=inspectitJaegerExample
version: '2.4'
networks:
sandbox-apache-net:
ipam:
driver: default
config:
- subnet: 172.24.0.0/16
services:
mysql:
image: mysql:5.7.26
mem_limit: 2G
container_name: sandbox-apache-mysql
hostname: sandbox-apache-mysql
networks:
sandbox-apache-net:
ipv4_address: 172.24.1.1
environment:
MYSQL_HOST: sandbox-apache-mysql
MYSQL_ROOT_PASSWORD: root
ports:
- 3306:3306
volumes:
- ./configs/mysql/conf.d/custom.cnf:/etc/mysql/conf.d/custom.cnf
- ./configs/mysql/scripts:/docker-entrypoint-initdb.d
prometheus:
image: prom/prometheus:v2.6.1
ports:
- 9091:9090
volumes:
- ./configs/prometheus.yml:/etc/prometheus/prometheus.yml
networks:
sandbox-apache-net:
ipv4_address: 172.24.1.2
extra_hosts:
docker.host: 172.28.0.1
172.28.0.1 es la IP de la interfaz bridge de docker.
El siguiente punto será arrancar nuestra aplicación con los argumentos que nos permitan exportar la información a Prometheus.
-javaagent:/home/deesebc/Downloads/inspectit-ocelot-agent-1.8.1.jar \
-Dinspectit.exporters.metrics.prometheus.host=172.28.0.1 \
-Dinspectit.exporters.metrics.prometheus.port=8888
scrape_configs: - job_name: 'prometheus' scrape_interval: 1m static_configs: - targets: ['localhost:9090'] - job_name: 'apache_example' scrape_interval: 1m metrics_path: '/metrics' static_configs: - targets: ['172.28.0.1:8888']
No hay comentarios:
Publicar un comentario