Monitoree las aplicaciones Spring Starter con Micrometer, Prometheus y Graphene

M

 

Introducción

Monitorear el estado y las métricas de la aplicación nos ayuda a administrarla mejor, detectar comportamientos desprotegidos y acercarnos a su rendimiento. Esto es especialmente cierto cuando estamos desarrollando un sistema con muchos microservicios, donde puede ser crítico monitorear todos los servicios para el mantenimiento de nuestro sistema.

Basándonos en esta información, podemos sacar conclusiones y decidir sobre el microservicio que debe escalarse si no se pueden lograr más mejoras de rendimiento con el arreglo actual.

En este artículo, cubriremos cómo monitorear las aplicaciones web Spring Boot. Usaremos tres proyectos para lograr esto:

  • Micrómetro: Revela las métricas de nuestra aplicación.
  • Prometeo: Almacena nuestros datos métricos
  • Grafana: Visualiza nuestros datos en gráficos.

Esto puede parecer mucho, especialmente en comparación con el Actuario de arranque de Spring proyecto, pero todos ellos son muy fáciles de implementar con solo unas pocas configuraciones.

Para facilitar aún más las cosas, usaremos Estibador para ejecutar Prometheus y Grafana ya que ambos tienen imágenes oficiales de Docker. Si no está familiarizado con Docker, puede consultar nuestro artículo Docker: Introducción avanzada.

Tenga en cuenta que estas métricas le brindarán información agregada a lo largo del tiempo. Si desea verificar información sobre una aplicación individual en un momento particular y lo que le sucedió, es posible que esa no sea la solución para usted.

En ese caso, probablemente necesite un sistema de seguimiento de distribución que hemos cubierto en detalle en Seguimiento de distribución con Sleuth.

Actuario de arranque de Spring

Comencemos con un servicio REST simple Initializr de Spring que contiene un punto final de /hello y ejecutándose en el puerto predeterminado de 8080.

Además, el spring-boot-starter-actuator dependencia, que proporciona puntos finales listos para la producción que puede utilizar para su aplicación. Estos puntos finales caen bajo un prefijo común /actuator y están protegidos de forma predeterminada.

Exponerlos individualmente, o todos a la vez, introduciendo las siguientes propiedades application.properties:

management.endpoints.web.exposure.include=*

Para comprobarlo, naveguemos por nuestro navegador hasta http://localhost:8080/actuator:

 

Puede ver todos los puntos finales que Actuator revela como /health, /metrics, /mappingsetc. Abramos el /metrics El punto final de Actuary navegando por nuestro navegador a http://localhost:8080/actuator/metrics:

 

Como puede ver, aquí hay un puñado de información sobre nuestra aplicación, como información del hilo, sesiones de Tomcat, clases, el búfer, etc. Profundicemos y descubramos la memoria JVM utilizada:

 

Ahora bien, si usa Spring Boot Actuator de esta manera, le brinda mucha información sobre su aplicación, pero no es muy fácil de usar. Puede integrarse con Administración de Spring Start para la visualización, pero tiene sus limitaciones y no tiene tanta demanda.

Herramientas como Prometheus, Atlas Netflix, y Grafana se utilizan con más frecuencia para el seguimiento y la visualización y son lingüísticamente independientes del marco.

Cada una de estas herramientas tiene su propio conjunto de formatos de datos y hacen el /metrics Los detalles para cada uno de ellos serían un fastidio. Para convertirlos nosotros mismos, necesitamos un proveedor de datos neutral, como Micrometer.

Micrómetro

Para resolver este problema de convertirse en un proveedor de datos neutral, Micrometer se ha convertido. Revela métricas de Actuator para sistemas de monitoreo externos como Prometheus, Netflix Atlas, Cloudwatch AWS, y muchos más.

Se describen correctamente a sí mismos como:

Piense en SLF4J, solo por métricas.

Al igual que una actualización, SLF4J es una interfaz de inicio de sesión para otros marcos de inicio de sesión de Java. SLF4J en sí no tiene implementación de inicio de sesión. La idea es que escriba código utilizando las API de SLF4J y su implementación en realidad provenga del marco que elija. Podría ser cualquiera de los frameworks más populares como log4j, iniciar sesiónetc.

Del mismo modo, Micrometer revela automáticamente /actuator/metrics detalles de lo que entiende su sistema de monitoreo. Todo lo que tiene que hacer es incluir la dependencia del micrómetro específico del proveedor en su aplicación.

Un micrómetro es un proyecto de código abierto separado y no está en el ecosistema de Spring, por lo que tenemos que ponerlo explícitamente como una dependencia. Dado que usaremos Prometheus, agregaremos su dependencia específica en nuestro pom.xml:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

Reconstruya e inicie la aplicación y navegue por nuestro navegador para http://localhost:8080/actuator:

 

Esto creará un nuevo punto final: /actuator/prometheus. Cuando lo abra, verá el formato de datos específico de Prometheus:

 

Prometeo

Prometheus es una base de datos de series de tiempo que almacena nuestros datos métricos arrastrándolos hacia abajo (usando un raspador de datos incorporado) periódicamente a través de HTTP. Los intervalos entre sorteos se pueden configurar, por supuesto, y debemos proporcionar la URL desde la que extraer. También tiene una interfaz de usuario simple donde podemos ver / consultar todas las métricas de la colección.

Configuremos Prometheus y, más precisamente, el intervalo de raspado, los objetivos, etc. Para hacer eso, usaremos el prometheus.yml archivo:

global:
  scrape_interval: 10s

scrape_configs:
  - job_name: 'spring_micrometer'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['192.168.2.8:8080']

Como puede ver, un scrape_configs clave raíz en la que podemos definir una lista de correo y especificar la URL, la ruta de las métricas y el intervalo. Si desea leer más sobre las configuraciones de Prometheus, no dude en visitar el documentación oficial.

Nota: Dado que usamos Docker para ejecutar Prometheus, se ejecutará en una red de Docker que no comprende localhost/120.0.01, como era de esperar. Dado que nuestra aplicación se ejecuta en localhosty para el contenedor Docker, localhost su propia red significa que necesitamos especificar la IP de nuestro sistema en su lugar.

Entonces en lugar de usar locahost:8080, 192.168.2.8:8080 lugar usado 192.168.2.8 La IP de mi computadora es en este momento.

Para comprobar la IP de su sistema puede ejecutar ipconfig o ifconfig en su terminal, dependiendo de su sistema operativo.

Ahora podemos ejecutar Prometheus usando el comando Docker:

$ docker run -d -p 9090:9090 -v <path-to-prometheus.yml>:/etc/prometheus/prometheus.yml prom/prometheus

<path-to-prometheus.yml> es tu propio lugar prometheus.yml comenzando desde la raíz. Por ejemplo, esto funciona en mi PC con Windows local:

$ docker run -d -p 9090:9090 -v $PWD/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

Para ver el panel de Prometheus, navegue hasta su navegador http: // localhost: 9090:

 

Para comprobar si Prometheus está escuchando la aplicación Spring, puede ir a la /targets punto final:

 

Regrese a la página de inicio y seleccione métricas de la lista y haga clic en Ejecutar:

 

Lenguaje de consulta Prometheus – PromQL

Otra cosa a tener en cuenta: Prometheus tiene su propio lenguaje de consulta llamado PromQL. Permite al usuario seleccionar y agregar datos de series de tiempo en tiempo real y almacenarlos en formato de gráfico o tabla. O puede alimentarlo a una API externa a través de HTTP.

Si desea leer más sobre PromQL, el documentación oficial lo cubre muy bien.

Grafana

Mientras que Prometheus proporciona algunas visualizaciones sin procesar, Grafana ofrece una interfaz de usuario enriquecida en la que puede crear rápidamente gráficos personalizados y crear un tablero a partir de muchos gráficos en muy poco tiempo. Puede importar muchos paneles creados por la comunidad de forma gratuita y comenzar a tener citas.

Grafana puede extraer datos de varias fuentes de datos como Prometheus, Elasticsearch, InfluxDBetc. También le permite configurar alertas basadas en reglas, que luego pueden notificarle sobre Slack, Email, Hipchat y similares.

Comenzamos ejecutando Grafana usando Docker:

$ docker run -d -p 3000:3000 grafana/grafana

Si tú visitas http://localhost:3000, será redirigido a una página de inicio de sesión:

 

El nombre de usuario predeterminado admin y es la contraseña predeterminada admin. Puede cambiarlos en el siguiente paso, que es muy recomendable:

 

Debido a que Grafana trabaja con muchas fuentes de datos, necesitamos definir en cuál confiamos. Seleccione Prometheus como su fuente de datos:

 

Ahora, ingrese la URL que está ejecutando Prometheus, en nuestro caso http://localhost:9090 y seleccione Acceso para hacerlo a través de un navegador.

En este punto, podemos guardar y probar para ver si la fuente de datos funciona correctamente:

 

Como ya se mencionó, Grafana tiene toneladas prefabricadas cuadros de mando. Para proyectos Spring Boot, el panel JVM Es muy popular:

 

Ingrese la URL del panel, seleccione “Conjunto de datos de Prometheus ya creado” y luego haga clic en Importar:

 

Conclusión

El monitoreo y las métricas del estado de la aplicación nos ayudan a administrarlo mejor, observar el comportamiento sin restricciones y comprender mejor su rendimiento. Esto es especialmente cierto cuando estamos desarrollando un sistema con muchos microservicios, donde puede ser crítico monitorear todos los servicios para el mantenimiento de nuestro sistema.

Basándonos en esta información, podemos sacar conclusiones y decidir sobre el microservicio que debe escalarse si no se pueden lograr más mejoras de rendimiento con el arreglo actual.

En este artículo, usamos Micrometer para reformular los datos métricos proporcionados por Spring Boot Actuator y revelarlos en un nuevo punto final. Prometheus luego extrajo estos datos y los almacenó regularmente, que es una base de datos de series de tiempo. Finalmente, usamos Grafana para simular esta información con un panel fácil de usar.

Como de costumbre, el código de los ejemplos utilizados en este artículo se puede encontrar en GitHub.

.

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad