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:
-
spring init -d=web,actuator -n=actuator-demo actuator-demo
O crear la primavera Initializr:
Correspondiente dependencia maven:
-
<dependencies>
-
...
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-actuator</artifactId>
-
</dependency>
-
...
-
</dependencies>
Correspondiente dependencia Gradle:
-
dependencies {
-
compile("org.springframework.boot:spring-boot-starter-actuator")
-
}
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 /health
punto final proporciona información básica acerca de la salud de la aplicación. metrics
Punto 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 /actuator
prefijo. Dos extremos expuestos por defecto /actuator/health
y/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
-
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
-
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.
-
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:
-
# "*" 代表暴露所有的端点 如果指定多个端点,用","分开
-
management.endpoints.web.exposure.include=*
-
# 赋值规则同上
-
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 /health
Punto de llegada
/health
Los 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:
-
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.roles configurado |
always |
Los detalles de la exposición para todos los usuarios |
De acuerdo con la configuración anterior, configurado always
Después de eso, empezamos el proyecto, el acceso al http://localhost:8080/actuator/health
puerto, 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.
/health
Hay 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 DiskSpaceHealthIndicator
en el trabajo.
captura de pantalla anterior se ha tomado de los documentos oficiales
Este es mi otro proyecto de /health
informació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.
-
management.health.mongo.enabled: false
O desactivar todos los indicadores de salud automáticas de configuración:
-
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 HealthIndicator
las interfaces o extender AbstractHealthIndicator
las clases.
-
/**
-
* @author Richard_yyf
-
* @version 1.0 2020/1/16
-
*/
-
@Component
-
publicclassCustomHealthIndicatorextendsAbstractHealthIndicator{
-
-
@Override
-
protectedvoid doHealthCheck(Health.Builder builder) throwsException{
-
// 使用 builder 来创建健康状态信息
-
// 如果你throw 了一个 exception,那么status 就会被置为DOWN,异常信息会被记录下来
-
builder.up()
-
.withDetail("app", "这个项目很健康")
-
.withDetail("error", "Nothing, I'm very good");
-
}
-
}
El efecto neto:
5.2 /metrics
Punto de llegada
/metrics
Punto 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.
-
{
-
"names": [
-
"tomcat.threads.busy",
-
"jvm.threads.states",
-
"jdbc.connections.active",
-
"jvm.gc.memory.promoted",
-
"http.server.requests",
-
"hikaricp.connections.max",
-
"hikaricp.connections.min",
-
"jvm.memory.used",
-
"jvm.gc.max.data.size",
-
"jdbc.connections.max",
-
....
-
]
-
}
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:
-
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 /loggers
Punto de llegada
/loggers
Punto final expone información sobre toda nuestra configuración del registrador procedimientos internos. Se visita /actuator/loggers
se puede ver,
También puede acceder a un único registrador de la siguiente manera,
-
http://localhost:8080/actuator/loggers/{name}
Por ejemplo, ahora visito root
registrador,http://localhost:8080/actuator/loggers/root
-
{
-
"configuredLevel": "INFO",
-
"effectiveLevel": "INFO"
-
}
⭐ cambiar el nivel de registro en tiempo de ejecución
/loggers
Me 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 root
nivel de registro del registrador. Sólo tenemos que iniciar una dirección URL de http://localhost:8080/actuator/loggers/root
la POST
petición, mensaje POST es la siguiente:
-
{
-
"configuredLevel": "DEBUG"
-
}
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 /info
Punto de llegada
/info
Los 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.properties
en la configuración personalizada (por defecto, el punto final devolverá un contenido JSON vacía.):
-
info.app.name=actuator-test-demo
-
info.app.encoding=UTF-8
-
info.app.java.source=1.8
-
info.app.java.target=1.8
-
# 在 maven 项目中你可以直接用下列方式引用 maven properties的值
Iniciar el proyecto, visita http://localhost:8080/actuator/info
:
-
{
-
"app": {
-
"encoding": "UTF-8",
-
"java": {
-
"source": "1.8.0_131",
-
"target": "1.8.0_131"
-
},
-
"name": "actuator-test-demo"
-
}
-
}
5.5 /beans
Punto de llegada
/beans
El 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/heapdump
genera 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/threaddump
devuelve el siguiente:
5.8 /shutdown
Punto 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:
-
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/shutdown
iniciar POST
la solicitud. información de la declaración:
-
{
-
"message": "Shutting down, bye..."
-
}
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:
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-security</artifactId>
-
</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:
-
import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;
-
import org.springframework.boot.actuate.context.ShutdownEndpoint;
-
import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
-
import org.springframework.context.annotation.Configuration;
-
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
-
-
/**
-
* @author Richard_yyf
-
*/
-
@Configuration
-
publicclassActuatorSecurityConfigextendsWebSecurityConfigurerAdapter{
-
-
/*
-
* version1:
-
* 1. 限制 '/shutdown'端点的访问,只允许ACTUATOR_ADMIN访问
-
* 2. 允许外部访问其他的端点
-
* 3. 允许外部访问静态资源
-
* 4. 允许外部访问 '/'
-
* 5. 其他的访问需要被校验
-
* version2:
-
* 1. 限制所有端点的访问,只允许ACTUATOR_ADMIN访问
-
* 2. 允许外部访问静态资源
-
* 3. 允许外部访问 '/'
-
* 4. 其他的访问需要被校验
-
*/
-
-
@Override
-
protectedvoid configure(HttpSecurity http) throwsException{
-
// version1
-
// http
-
// .authorizeRequests()
-
// .requestMatchers(EndpointRequest.to(ShutdownEndpoint.class))
-
// .hasRole("ACTUATOR_ADMIN")
-
// .requestMatchers(EndpointRequest.toAnyEndpoint())
-
// .permitAll()
-
// .requestMatchers(PathRequest.toStaticResources().atCommonLocations())
-
// .permitAll()
-
// .antMatchers("/")
-
// .permitAll()
-
// .antMatchers("/**")
-
// .authenticated()
-
// .and()
-
// .httpBasic();
-
-
// version2
-
http
-
.authorizeRequests()
-
.requestMatchers(EndpointRequest.toAnyEndpoint())
-
.hasRole("ACTUATOR_ADMIN")
-
.requestMatchers(PathRequest.toStaticResources().atCommonLocations())
-
.permitAll()
-
.antMatchers("/")
-
.permitAll()
-
.antMatchers("/**")
-
.authenticated()
-
.and()
-
.httpBasic();
-
}
-
}
application.properties
La configuración es la siguiente:
-
# Spring Security Default user name and password
-
spring.security.user.name=actuator
-
spring.security.user.password=actuator
-
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