SpringBoot de monitoreo del actuador

prefacio

El año pasado hicimos un proyecto de transición micro arquitectura de servicios 1.0, pero este control de servicio no ha avanzado al mismo ritmo. Esto no, hace poco se le asignó la tarea que desea dar servicio a nuestras aplicaciones centrales micro-seguimiento de todos juntos. Nuestras aplicaciones de micro-servicio son de aplicación SpringBoot, y por lo tanto, naturalmente, piensan en el módulo actuador con la primavera de arranque.

Benpian después de completar esta orden de trabajo, un resumen de las aplicaciones de aprendizaje para el módulo de resorte de arranque del actuador. En este artículo, se puede aprender a:

1. Inicio rápido utilizando Spring envuelta de accionador de
2, algunos de los criterios de valoración importantes de la primavera de arranque del actuador introducción de
3, cómo ver la información de volcado de hilo en tiempo real aplicado actualmente por el módulo de actuador
4, la forma de ver la información del montón acerca de la aplicación actual en tiempo real por el actuador del módulo
5, cómo imprimir el nivel de registro de la corriente en tiempo real los cambios aplicados por el módulo actuador
6, ...

A continuación voy a presentar:

TODO: integración de aplicaciones micro-servicios SpringBoot para lograr Prometheus + Grafana Alarmas Monitoreo

En primer lugar, ¿cuál es la primavera de arranque del actuador

Módulo de muelle de envuelta de accionador proporciona características de nivel de producción, tales como controles de salud, auditorías, colección métricas, HTTP seguimiento, ayuda a monitorizar y gestionar aplicación de inicio de primavera, las condiciones de carga de frijoles, variables de entorno, información de registro, información, información de rosca de pila de JVM . Este módulo es una colección de información dentro del módulo de aplicación está expuesto al exterior, las funciones descritas anteriormente se puede acceder a través de HTTP y JMX.

Debido a características de exposición de información en el interior, de actuador también puede ser algún control de la aplicación y la integración del sistema externo (Prometheus, grafito, DataDog, afluencia, de frente de onda, Nueva Relic, etc.). Estos sistemas de monitoreo proporcionan excelentes cuadros de mando, gráficos, análisis y alertas para ayudarle a través de un fácil de usar interfaz unificada, controlar y gestionar sus aplicaciones.

Actuador integración utilización micrómetro con estos sistemas de control de la aplicación externa. Como resultado, con poca configuración puede integrar fácilmente sistema de monitoreo externo.

Micrómetro proporciona una API común a los datos de rendimiento acumularse en la plataforma Java, las aplicaciones sólo necesitan utilizar micrómetro API común para las métricas de rendimiento de cobro puede ser. Micrómetro será responsable de completar el trabajo de adaptación a diferentes sistemas de monitoreo. Esto hace que el interruptor del sistema de monitoreo fácil.

El SLF4J contraste situado en el registrador de Java.

En segundo lugar, el inicio rápido, crear un resorte de arranque del actuador de demostración

Vamos a crear una aplicación de demostración.

Puede crear la primavera de arranque de la CLI:

 
  1. spring init -d=web,actuator -n=actuator-demo actuator-demo

O crear la primavera Initializr:

Correspondiente dependencia maven:

 
  1. <dependencies>

  2. ...

  3. <dependency>

  4. <groupId>org.springframework.boot</groupId>

  5. <artifactId>spring-boot-starter-actuator</artifactId>

  6. </dependency>

  7. ...

  8. </dependencies>

Correspondiente dependencia Gradle:

 
  1. dependencies {

  2. compile("org.springframework.boot:spring-boot-starter-actuator")

  3. }

introducción, tres puntos finales

Primavera de arranque proporciona uno de los llamados puntos finales (traducción punto final a continuación) para acceder e interactuar con la aplicación al exterior.

Analogía, el /healthpunto final proporciona información básica acerca de la salud de la aplicación. metricsPunto de llegada proporciona algún índice aplicaciones útiles (uso JVM memoria, los sistemas de uso de la CPU, etc.).

Estos módulo actuador ya tiene un punto final que llamamos variable principal. De acuerdo con la función del criterio de valoración, que se pueden dividir en tres categorías:

clase de configuración de la aplicación: obtener información de configuración categoría está estrechamente relacionada con la solicitud de aplicación del resorte de arranque de cargar la configuración de la aplicación, las variables de entorno, informes de configuración automatizados.

Métricas categorías: aplicación de adquisición está en marcha para las métricas de seguimiento, tales como: información de la memoria, la información de grupo de subprocesos, HTTP estadísticas de petición.

clase de control de la operación: Proporcionar el cierre de la aplicación y otras operaciones basadas en funciones.

descripciones de punto final nativos detallada, consulte el sitio web oficial prevalecer, no repetirlos aquí invitando espacio.

Debe tenerse en cuenta que:

1, cada punto final se puede configurar de forma individual o discapacitados iniciado por

2, diferente del actuador 1.x, la mayor parte del actuador punto final default swap 2.x prohibidos . El punto final predeterminado actuador 2.x aumenta el /actuatorprefijo. Dos extremos expuestos por defecto /actuator/healthy/actuator/info

En cuarto lugar, la configuración de extremo expuesto

Podemos a través del siguiente configuración para la configuración de HTTP expuestos a través de JMX y los puntos finales.

Propiedad Defecto
management.endpoints.jmx.exposure.exclude  
management.endpoints.jmx.exposure.include *
management.endpoints.web.exposure.exclude  
management.endpoints.web.exposure.include info,healt

Se puede abrir todos los puntos de monitoreo

 
  1. management.endpoints.web.exposure.include=*

Sección también puede optar por abrir, "*" denota todos los extremos expuestos, si varios puntos finales especificados con "" separado

 
  1. management.endpoints.web.exposure.exclude=beans,trace

Actuador ruta predeterminada todos los puntos de monitoreo son /actuator/*, por supuesto, si hay necesidad de este camino también es compatible con la costumbre.

 
  1. management.endpoints.web.base-path=/minitor

Después de ajustar la reanudación, de nuevo se convierte en direcciones accesible /minitor/*.

Ahora hemos configurado de la siguiente manera:

 
  1. # "*" 代表暴露所有的端点 如果指定多个端点,用","分开

  2. management.endpoints.web.exposure.include=*

  3. # 赋值规则同上

  4. management.endpoints.web.exposure.exclude=

Demo Programa de Inicio, visita http://localhost:8080/actuator, expuesta a la vista de punto final:


Tal mostrada arriba es porque plug-in instalado JSON-mango navegador Chrome, de hecho, una gran parte de la JSON retorno

A continuación, voy a destacar algunos de los puntos finales más importantes.

Cinco importante resolución de extremos

5.1  /healthPunto de llegada

/healthLos indicadores de salud de punto final de polimerización su programa para comprobar el estado del programa. aplicación de información de salud pública punto final depende de:

 
  1. management.endpoint.health.show-details=always

Este atributo puede ser configurado para utilizar uno de los siguientes valores:

Nombre Descripción
never No muestra información detallada, hacia arriba o hacia abajo el estado, la configuración por defecto
when-authorized Los detalles serán presentados al usuario a través de la autenticación. autorización de papel puede ser  management.endpoint.health.rolesconfigurado
always Los detalles de la exposición para todos los usuarios

De acuerdo con la configuración anterior, configurado alwaysDespués de eso, empezamos el proyecto, el acceso al http://localhost:8080/actuator/healthpuerto, se puede ver la siguiente información:

La información de salud no se siente como un poco menos? No se preocupe, es porque estamos creando una base para la mayor parte del proyecto de demostración no depende de muchos componentes.

/healthHay muchos auto-configuración del indicador de salud punto final: como Redis, RabbitMQ, DB y otros componentes. Cuando se tiene el elemento de dependencia componentes correspondientes cuando el indicador de salud se monta automáticamente, y luego la información correspondiente a la adquisición. Como arriba diskSpace información del nodo es DiskSpaceHealthIndicatoren el trabajo.

captura de pantalla anterior se ha tomado de los documentos oficiales

Este es mi otro proyecto de /healthinformación de punto final.

Cuando lo anterior Asamblea tiene un estado anormal, es decir, todo el estado de la aplicación y los servicios hacia abajo. También podemos desactivar la vigilancia de la salud de un componente a través de la configuración.

 
  1. management.health.mongo.enabled: false

O desactivar todos los indicadores de salud automáticas de configuración:

 
  1. management.health.defaults.enabled: false

Indicador de salud personalizada ⭐

Por supuesto, también puede personalizar un indicador de salud, sólo es necesario poner en práctica HealthIndicatorlas interfaces o extender AbstractHealthIndicatorlas clases.

 
  1. /**

  2. * @author Richard_yyf

  3. * @version 1.0 2020/1/16

  4. */

  5. @Component

  6. publicclassCustomHealthIndicatorextendsAbstractHealthIndicator{

  7.  

  8. @Override

  9. protectedvoid doHealthCheck(Health.Builder builder) throwsException{

  10. // 使用 builder 来创建健康状态信息

  11. // 如果你throw 了一个 exception,那么status 就会被置为DOWN,异常信息会被记录下来

  12. builder.up()

  13. .withDetail("app", "这个项目很健康")

  14. .withDetail("error", "Nothing, I'm very good");

  15. }

  16. }

El efecto neto:

5.2  /metricsPunto de llegada

/metricsPunto de llegada se utiliza para devolver el rango de aplicación actual de métricas importantes, tales como: información de la memoria, la información de hilo, la información recogida de basura, tomcat, agrupaciones de conexiones de base de datos.

 
  1. {

  2. "names": [

  3. "tomcat.threads.busy",

  4. "jvm.threads.states",

  5. "jdbc.connections.active",

  6. "jvm.gc.memory.promoted",

  7. "http.server.requests",

  8. "hikaricp.connections.max",

  9. "hikaricp.connections.min",

  10. "jvm.memory.used",

  11. "jvm.gc.max.data.size",

  12. "jdbc.connections.max",

  13. ....

  14. ]

  15. }

Diferente de 1.x, actuador no puede ver la información de objetivos específicos en esta interfaz, simplemente muestra una lista de indicadores. Para obtener información detallada sobre un determinado índice, podemos solicitar información sobre objetivos específicos, como este:

 
  1. http://localhost:8080/actuator/metrics/{MetricName}

Por ejemplo, me visita /actuator/metrics/jvm.memory.max, información de la declaración es el siguiente:

También puede utilizar las formas de consulta param para ver un área separada. Por ejemplo, puede tener acceso /actuator/metrics/jvm.memory.max?tag=id:Metaspace. El resultado es:

5.3  /loggersPunto de llegada

/loggersPunto final expone información sobre toda nuestra configuración del registrador procedimientos internos. Se visita /actuator/loggersse puede ver,

También puede acceder a un único registrador de la siguiente manera,

 
  1. http://localhost:8080/actuator/loggers/{name}

Por ejemplo, ahora visito rootregistrador,http://localhost:8080/actuator/loggers/root

 
  1. {

  2. "configuredLevel": "INFO",

  3. "effectiveLevel": "INFO"

  4. }

⭐ cambiar el nivel de registro en tiempo de ejecución

/loggersMe gustaría mencionar más extremo es esta función, puede modificar dinámicamente el nivel de registro.

Por ejemplo, podemos modificar la forma siguiente rootnivel de registro del registrador. Sólo tenemos que iniciar una dirección URL de http://localhost:8080/actuator/loggers/rootla POSTpetición, mensaje POST es la siguiente:

 
  1. {

  2. "configuredLevel": "DEBUG"

  3. }

Piense en ello, esta característica no es muy útil. Si en un entorno de producción, desea que su salida de la aplicación de depuración de información con el fin de diagnosticar algunas anomalías en usted, usted, usted sólo tiene que ser modificado como se describió anteriormente, sin la necesidad de reiniciar la aplicación.

Si desea restablecer a los valores predeterminados, el cambio de valor null

5.4  /infoPunto de llegada

/infoLos puntos finales pueden ser usados para mostrar información acerca de su programa. Yo entiendo que parte de la información básica del programa terminado. Y usted puede seguir sus propias necesidades en el archivo de configuración application.propertiesen la configuración personalizada (por defecto, el punto final devolverá un contenido JSON vacía.):

 
  1. info.app.name=actuator-test-demo

  2. info.app.encoding=UTF-8

  3. info.app.java.source=1.8

  4. info.app.java.target=1.8

  5. # 在 maven 项目中你可以直接用下列方式引用 maven properties的值

  6. # [email protected]@

  7. # [email protected]@

  8. # [email protected]@

Iniciar el proyecto, visita http://localhost:8080/actuator/info:

 
  1. {

  2. "app": {

  3. "encoding": "UTF-8",

  4. "java": {

  5. "source": "1.8.0_131",

  6. "target": "1.8.0_131"

  7. },

  8. "name": "actuator-test-demo"

  9. }

  10. }

5.5  /beansPunto de llegada

/beansEl resorte terminal vuelve todo alias recipiente de granos, tipo, si una única forma de realización, la información de dependencia.

Visita http://localhost:8080/actuator/beans, devuelve el siguiente:

5.6  /heapdump Punto de llegada

Acceso: http://localhost:8080/actuator/heapdumpgenera automáticamente un archivo de pila de JVM de Heapdump. Podemos utilizar el JDK que viene con Jvm herramienta de monitorización VisualVM abrir este archivo para ver las instantáneas de memoria.

5.7  /threaddump Punto de llegada

Personalmente, creo que este criterio de valoración es particularmente útil, conveniente y vemos el hilo cuando el problema posicionamiento diaria. El nombre del show hilo principal, estado de la ID del hilo, hilo, si se debe esperar a que los recursos de bloqueo, tales como información de pila de hilo. Es posible ver menos intuitivo. El acceso http://localhost:8080/actuator/threaddumpdevuelve el siguiente:

5.8  /shutdownPunto de llegada

Los criterios de valoración corresponden al último punto de control basado en la operación, con gracia cerca la aplicación de Primavera de arranque. Para utilizar esta función, primero tiene que abrir el fichero de configuración:

 
  1. management.endpoint.shutdown.enabled=true

Dado que los valores por defecto de la interfaz de apagado a sólo admiten solicitudes POST , comenzamos el proyecto de demostración, para http://localhost:8080/actuator/shutdowniniciar POSTla solicitud. información de la declaración:

 
  1. {

  2. "message": "Shutting down, bye..."

  3. }

A continuación, se cierra la aplicación.

Debido a la operación de cierre abierto de la aplicación en sí es una muy peligrosa cosa, por lo que el uso real en línea, hay que unirse a ellos algunos mecanismos de protección, tales como: criterios de valoración personalizada ruta del actuador, la integración de la primavera de Seguridad para el control de seguridad y así sucesivamente. (No es especialmente necesaria, no abra este punto final)

En sexto lugar, la integración de control de seguridad de punto final primavera de Seguridad

Dado que la información generada por los puntos finales de interacción y son muy sensibles a la necesidad de impedir el acceso externo no autorizado. Si existe la aplicación en la primavera de Seguridad dependencia, cuando se utiliza el valor predeterminado formas de autenticación basados en HTTP a los puntos finales protegen.

Si no es así, sólo tiene que añadir las dependencias correspondientes a:

 
  1. <dependency>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-security</artifactId>

  4. </dependency>

Después de la adición, se necesita definir reglas de validación de seguridad para anular la configuración predeterminada de la primavera de Seguridad.

Aquí Doy dos versiones de la configuración de la plantilla:

 
  1. import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;

  2. import org.springframework.boot.actuate.context.ShutdownEndpoint;

  3. import org.springframework.boot.autoconfigure.security.servlet.PathRequest;

  4. import org.springframework.context.annotation.Configuration;

  5. import org.springframework.security.config.annotation.web.builders.HttpSecurity;

  6. import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

  7.  

  8. /**

  9. * @author Richard_yyf

  10. */

  11. @Configuration

  12. publicclassActuatorSecurityConfigextendsWebSecurityConfigurerAdapter{

  13.  

  14. /*

  15. * version1:

  16. * 1. 限制 '/shutdown'端点的访问,只允许ACTUATOR_ADMIN访问

  17. * 2. 允许外部访问其他的端点

  18. * 3. 允许外部访问静态资源

  19. * 4. 允许外部访问 '/'

  20. * 5. 其他的访问需要被校验

  21. * version2:

  22. * 1. 限制所有端点的访问,只允许ACTUATOR_ADMIN访问

  23. * 2. 允许外部访问静态资源

  24. * 3. 允许外部访问 '/'

  25. * 4. 其他的访问需要被校验

  26. */

  27.  

  28. @Override

  29. protectedvoid configure(HttpSecurity http) throwsException{

  30. // version1

  31. // http

  32. // .authorizeRequests()

  33. // .requestMatchers(EndpointRequest.to(ShutdownEndpoint.class))

  34. // .hasRole("ACTUATOR_ADMIN")

  35. // .requestMatchers(EndpointRequest.toAnyEndpoint())

  36. // .permitAll()

  37. // .requestMatchers(PathRequest.toStaticResources().atCommonLocations())

  38. // .permitAll()

  39. // .antMatchers("/")

  40. // .permitAll()

  41. // .antMatchers("/**")

  42. // .authenticated()

  43. // .and()

  44. // .httpBasic();

  45.  

  46. // version2

  47. http

  48. .authorizeRequests()

  49. .requestMatchers(EndpointRequest.toAnyEndpoint())

  50. .hasRole("ACTUATOR_ADMIN")

  51. .requestMatchers(PathRequest.toStaticResources().atCommonLocations())

  52. .permitAll()

  53. .antMatchers("/")

  54. .permitAll()

  55. .antMatchers("/**")

  56. .authenticated()

  57. .and()

  58. .httpBasic();

  59. }

  60. }

application.propertiesLa configuración es la siguiente:

 
  1. # Spring Security Default user name and password

  2. spring.security.user.name=actuator

  3. spring.security.user.password=actuator

  4. spring.security.user.roles=ACTUATOR_ADMIN

epílogo

Este contenido del artículo aquí.

Se puede ver el código fuente correspondiente en Github.

https://github.com/Richard-yyf/springboot-actuator-prometheus-test

Artículo de: Huperzine notas Arquitectura

发布了306 篇原创文章 · 获赞 67 · 访问量 38万+

Supongo que te gusta

Origin blog.csdn.net/ailiandeziwei/article/details/105265015
Recomendado
Clasificación