Monitoree las aplicaciones Spring Starter con Micrometer, Prometheus y Graphene

     

    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.

    .

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *