Las características de los microservicios determinan que se distribuye la implementación de módulos funcionales. La mayoría de los módulos funcionales se ejecutan en diferentes máquinas e interactúan entre sí a través de llamadas de servicio. Los flujos comerciales en la oficina frontal y de back off back serán procesados y aprobados por muchos microservicios. ¿Cómo localizar rápidamente las excepciones? ¿Qué enlace tiene un problema?
En este marco, el monitoreo de microservicios es particularmente importante. Este artículo combina principalmente el actuador de arranque de primavera para compartir con usted el uso común del actuador de arranque de primavera de microservicio, para que podamos monitorear y administrar nuestros microservicios en la vida diaria.
Monitoreo del actuador
Spring Boot utiliza el concepto de "hábitos mejor que la configuración" y utiliza mecanismos de escaneo de paquetes y configuración automatizada para cargar frijoles de resorte que dependen de los frascos. No requiere ninguna configuración XML para implementar todas las configuraciones de Spring. Aunque hacer esto hace que nuestro código sea muy conciso, la información, como la creación de instancias y las dependencias de toda la aplicación, son discretas para las anotaciones de varias clases de configuración, lo que nos dificulta analizar las diversas relaciones entre recursos e instancias en toda la aplicación.
Actuator es una función integrada de la introspección y el monitoreo de los sistemas de aplicación proporcionados por Spring Boot. Puede ver información detallada de la configuración de la aplicación, como información de configuración automatizada, frijoles de resorte creados y algunas propiedades ambientales.
El monitoreo del actuador se puede realizar agregando las siguientes dependencias
<Spendencies> <Spendency> <MoupRid> org.springframework.boot </proupid> <artifactID> spring-boot-starter-web </artifactid> </pendency> <epardency> <proupId> org.springframework.boot </groupid> <fifactid> spring-boot-starter-actuator </artifactid> </artifactid> </</arthactid> </</artinency> </artidency> </artinency> </artidency> </artidency> </artidency> </artidency> </artidency> </artidency> </artidency> </artidency> </artidency> </artidency> </artidency> </artidency> </artidency> Dependency> </Artifency> <MoupRid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-security </artifactid> </dependency> </dependencias>
Para garantizar la seguridad de la interfaz de monitoreo expuesta por el actuador, es necesario agregar dependencias de control de control de seguridad dependencias de seguridad de arranque. Al acceder a los puntos finales de monitoreo de aplicaciones, se requiere información de verificación. Dependencias de seguridad, puede elegir no agregar o administrar la seguridad, pero no se recomienda.
Interfaz de descanso del actuador
El monitoreo del actuador se divide en dos categorías: puntos finales nativos y puntos finales definidos por el usuario; Los puntos finales personalizados se refieren principalmente a la escalabilidad. Los usuarios pueden definir algunos indicadores más preocupados en función de sus aplicaciones reales y monitorearlos durante el tiempo de ejecución.
Los puntos finales nativos proporcionan numerosas interfaces web en aplicaciones para comprender el estado interno del tiempo de ejecución de la aplicación. Los puntos finales nativos se pueden dividir en tres categorías:
El actuador proporciona 13 interfaces, como se muestra en la siguiente tabla.
| Métodos HTTP | camino | describir |
|---|---|---|
| CONSEGUIR | /Autoconfig | Se proporciona un informe de configuración automática para registrar qué condiciones de configuración automática se han aprobado y que no se han aprobado. |
| CONSEGUIR | /configprops | Describa cómo inyectar un bean con propiedades de configuración (incluidos los valores predeterminados) |
| CONSEGUIR | /frijoles | Describa todos los frijoles en el contexto de la aplicación y su relación |
| CONSEGUIR | /vertedero | Obtenga una instantánea de actividad de hilo |
| CONSEGUIR | /envidia | Obtenga todos los atributos del entorno |
| CONSEGUIR | /env/{nombre} | Obtener valores de atributo de entorno específicos basados en el nombre |
| CONSEGUIR | /salud | Informa las métricas de salud para la aplicación, estos valores son proporcionados por la clase de implementación de Healthindicator |
| CONSEGUIR | /Información | Obtenga información personalizada para la aplicación, que proporciona los atributos encabezados por información |
| CONSEGUIR | /mapeos | Describa todas las rutas de URI y su relación de mapeo con el controlador (incluidos los puntos finales del actuador) |
| CONSEGUIR | /métrica | Informe varias métricas de aplicaciones, como el uso de la memoria y el recuento de solicitudes HTTP |
| CONSEGUIR | /Métricos/{nombre} | Informa el valor métrico de la aplicación del nombre especificado |
| CORREO | /cerrar | Cierre la aplicación y requiera endpoints.shutdown.Enabled para establecerse en True |
| CONSEGUIR | /rastro | Proporcione información básica de seguimiento de solicitudes HTTP (marca de tiempo, encabezado HTTP, etc.) |
Empiece a comenzar rápidamente
Configuraciones relacionadas
Dependencia del proyecto
<Spendencies> <Spendency> <MoupRoD> org.springframework.boot </groupId> <artifactID> spring-boot-starter-web </artifactid> </pendency> <ependency> <proupId> org.springframework.boot </groupid> <fiFactId> spring-boot-starter-actuator </artifactid> </artifactid> </artifactid> </artidency> </artidency> </artidency> </artidence> </artidency> </artidency> </ArtIndence> </shents)
Archivo de configuración
servidor: puerto: 8080 ganagement: seguridad: habilitado: falso #switch de seguridad de autenticación de seguridad Puerto: 8088 #Admin El puerto se ajusta a 8088-Path de contexto: /monitor #Actuator Access Rath Puntos finales: Pantalla: Habilitado: TrueInfo: Aplicación: Nombre: Spring-Boot-Actuator Versión: 1.0.0.0.0.0.0.0
Después de completar la configuración, el proyecto se puede iniciar y puede continuar verificando las diversas funciones de monitoreo.
Explicación detallada del comando
autoconfig
La función de configuración automática de Spring Boot es muy conveniente, pero a veces también significa que es difícil averiguar la causa específica cuando hay un problema. Use Autoconfig para ver las condiciones bajo las cuales una determinada configuración entra en vigencia durante el tiempo de ejecución de la aplicación, o por qué una configuración automática no entra en vigencia.
Inicie el proyecto de muestra y visite: http: // localhost: 8088/monitor/autoconfig. La parte de retorno de la información es la siguiente:
{"Positivematches": {"DevToolsDataSourCeautoconfiguration": {"NotMatched": [{{"condición": "DevToolsDataSourCeautoconfiguration.devtoolsdataSourCecondition", "Mensaje": "Mensaje"] }, "RemotedevToolSautoconfiguration": {"NotMatched": [{"condición": "onPropertyCondition", "Mensaje": "@ConditionAlonProperty (Spring.DevTools.Remote.Secret) no encontró propiedad 'Secret'"}, "Matched: [{" Condición ":": "OncLoScond", no encontró la propiedad ":" Secret ":" "@Conditionalonclass encontró clases requeridas 'javax.servlet.filter', 'org.springframework.http.server.serverhttprequest'; @conditionalonmissingclass no encontró clase no sentada"}]}}}configprops
Vea el contenido de las propiedades establecidas en el archivo de configuración, así como los valores predeterminados de algunas propiedades de configuración.
Inicie el proyecto de muestra y visite: http: // localhost: 8088/monitor/configprops. La parte de retorno de la información es la siguiente:
{... "EnvironmentEndpoint": {"Prefix": "EndPoints.env", "Propiedades": {"id": "env", "sensible": true, "habilitado": true}}, "spring.http.multipart-org.springframe.boot.auToconfigure.web.multipartpertorterty "Spring.http.multipart", "Propiedades": {"maxRequestSize": "10mb", "filesizethReshold": "0", "ubicación": null, "maxfilesize": "1mb", "referente," resuelve ": false}}," infoendpoint ": {" prefixs ":" Entent ",", ". "Propiedades": {"id": "info", "sensible": falso, "habilitado": true}} ...}frijoles
Del ejemplo, podemos ver que el alias de Bean, el tipo, ya sea un singleton, la dirección de la clase, la dependencia y otra información.
Inicie el proyecto de muestra y visite: http: // localhost: 8088/monitor/frijoles. La parte de retorno de la información es la siguiente:
[{"contexto": "aplicación: 8080: gestión", "parent": "aplicación: 8080", "frijoles": [{"bean": "increddedservletContainerFactory", "aliases": [], "alcance": "singleton", "tipo": ": "org.springframework.boot.context.embedded.tomcat.tomcatembeddedservletContainerFactory", "recursos": "nulo", "dependencias": []}, {"bean": "endpointWebmvCchildContextConfiguone", "aliases": [], "scope": "scope", "type", "type", "type": "scope": "scope", "typelet", "type", "scope": "scope", "scope": "type", "scope": "scope", "scopi "org.springframework.boot.actuate.autoconfigure.endpointWebmvcchildContextConfiguration $$ mejoradovertedero
La interfaz /volcado generará una instantánea de la actividad de subproceso actual. Esta función es muy buena, lo que hace que sea conveniente verificar la situación del hilo cuando localizamos problemas en la vida diaria. Muestra principalmente información como nombre de subproceso, ID de subprocesamiento, estado de hilo, ya sea esperar recursos de bloqueo.
Inicie el proyecto de muestra y visite: http: // localhost: 8088/monitor/dump. La parte de retorno de la información es la siguiente:
[{"ThreadName": "Http-nio-8088-Exec-6", "ThreadId": 49, "BlockedTime": -1, "BlockedCount": 0, "WaitedTime": -1, "WaitedCount": 2, "LockName": "java.util.concurrent.locks.abstractQueedSynchronizerman$conizer$conizador "LockOwnerID": -1, "LockOwnerName": Null, "Innative": False, "Suspendido": False, "ThreadState": "Waiting", "StackTrace": [{"MethodName": "Park", "FileName": "Unsafe.Java", "Linenumber": -2, "className": "Sun.Misc.unSafeSafe", "NiMethod", "", "", "NiMethod", "", "", "n. }, {"MethodName": "Park", "FileName": "LockSupport.java", "Linenumber": 175, "ClassName": "java.util.concurrent.locks.locksupport", "nativemethod": false}, {"methodeName": "await", "filename": "abstractideychonychonshronshronychronychonsychronsychronsychronsychronsychronsychronsychronsychronsychronsychon "Linenumber": 2039, "ClassName": "java.util.concurrent.locks.abstractqueedSynChronizer $ condicionObject", "nativemethod": false}, ... {"metodName": "getTask", "filen": "treucheCutor.Java", "Linenumber": 1067, "ClassName" "java.util.concurrent.threadpoolexeCutor", "nativemethod": false}, {"metodName": "runworker", "fileName": "threadpoolexecutor.java", "lino": 1127, "classname": "java.util.concurrent.threadpoolexeCutor", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", "n. false }, { "methodName": "run", "fileName": "ThreadPoolExecutor.java", "lineNumber": 617, "className": "java.util.concurrent.ThreadPoolExecutor$Worker", "nativeMethod": false }, { "methodName": "run", "fileName": "TaskThread.java", "Linenumber": 61, "ClassName": "org.apache.tomcat.util.threads.taskthread $ wrappingrunnable", "nativemethod": false}, {"MethodName": "ejecutar", "filename": "horth.Java", "linENEMER": 745, "classname": "java.lang.lang.lang.langa.lang.lang.lang.lang.lang.lang.langa.lang.lang.lang.lang.lang.lang.langa.lang.langa.lang.lang.lan "nativemethod": false}], "LockedMonitors": [], "LockedSynChronizers": [], "LockInfo": {"classname": "java.util.concurrent.locks.abstractQueueDynchronizer $ condicionOntObject", "Identityhashcode: 372286721} ...] ...] ...]envidia
Muestra la información de configuración de las variables de entorno del sistema, incluidas las variables de entorno utilizadas, las propiedades de JVM, los parámetros de línea de comandos, los paquetes JAR utilizados por el proyecto, etc. A diferencia de ConfigProps, ConfigProps se centra en la información de configuración, mientras que ENV se centra en la información del entorno operativo.
Inicie el proyecto de muestra y visite: http: // localhost: 8088/monitor/env. La parte de retorno de la información es la siguiente:
{"Perfiles": [], "Server.ports": {"local.management.port": 8088, "local.server.port": 8080}, "servletContextInitParams": {}, "SystemProperties": {"com.sun.management.jmxremote.authenticate": "false", "Java.rune.rune.rune.rune.run "Java (TM) SE Runtime Entorno", "Spring.output.ansi.enabled": "Always", "Sun.Boot.library.Path": "C: // Archivos de programa // java // jdk1.8.0_101 // jre // bin", "java.vm.version": "25.101-B13", "jave.vend. Corporation "," java.vendor.url ":" http://java.oracle.com/ "," java.rmi.server.randomids ":" true "," path.separator ":"; "," java.vm.nm.nm. ":" java hotspot (tm) 64-bit vm "," file.en "Sun.io", "user.country": "cn", "user.script": "", "sun.java.launcher": "sun_standard", "sun.os.patch.level": "," pid ":" 5268 "," com.sun.management.jmxremote.port ":" 60093 ",", "jave.vm.vm.vm.vm.vm.vm.vm. "Java Virtual Machine SPEPara evitar la información confidencial expuesta a /env, todos los atributos llamados contraseña, secreto, clave (o el último párrafo del nombre es estos) se agregarán a /env con "*". Por ejemplo, si hay una base de datos de nombre de propiedad.password, entonces su efecto de visualización en /env es así:
"Database.password": "******"
Uso de /env /{nombre}
Es decir, la extensión ENV puede obtener la información de configuración especificada, como: http: // localhost: 8088/monitor/env/java.vm.version, return: {"java.vm.version": "25.101-b13"}
salud
Puede ver que HealthEndpoint nos proporciona resultados de monitoreo predeterminados, incluida la detección de disco y la detección de la base de datos
Inicie el proyecto de muestra y visite: http: // localhost: 8088/monitor/salud devuelve parte de la información, la siguiente respuesta JSON está compuesta de estado, espacio en disco y DB. Describe el estado de salud general de la aplicación, UP indica que la aplicación es saludable. El espacio en disco describe el espacio total del disco, el espacio de disco restante y el umbral mínimo. El umbral de Application.Properties es configurable
{"estado": "up", "diskspace": {"status": "up", "total": 209715195904, "gratis": 183253909504, "umbral": 10485760} "db": {"estado": "up", "database": "mysql", "hello": 1}: 1}: 1}: 1}: 1}: 1}: 1}: ": 1}: 1}De hecho, al observar el código fuente del activador de arranque de primavera, encontrará que la información proporcionada por HealthEndpoint no se limita a esto. Bajo el paquete de org.springframework.boot.actuate.health, encontrará ElasticSearchHealthindicator, Redishealthindicator, Rabbithealthindicator, etc.
información
La información es la información de configuración que configuramos en el archivo de configuración que comienza con la información. Por ejemplo, nuestra configuración en el proyecto de ejemplo es:
Información: Aplicación: Nombre: Spring-Boot-Actuator Versión: 1.0.0
Inicie el proyecto de muestra y visite: http: // localhost: 8088/monitor/información La parte de devolución de la información es la siguiente:
{"App": {"Nombre": "Spring-Boot-Actuator", "Versión": "1.0.0"}}mapeos
Describa todas las rutas de URI y su relación de mapeo con el controlador
Inicie el proyecto de muestra y visite: http: // localhost: 8088/monitor/asignaciones. La parte de retorno de la información es la siguiente:
{"/**/favicon.ico": {"bean": "faviconHandlermapping"}, "{[/hello]}": {"bean": "requestMappingHandlermapping", "método": "public java.lang.string com.neo.controller.hellocontroller.index ()"}, {[[[ERRA "Bean": "RequestMappingHandlermapping", "Método": "Public Org.SpringFramework.http.ResponseEntity <java.util.map <java.lang.string, java.lang.object >> org.springframework.boot.autoconfigure.web.basicerrorController.error (javax.servlet.http.httpservletrequest) "}}métrica
Uno de los contenidos de monitoreo más importantes es monitorear principalmente el uso del contenido de JVM, la situación de GC, la información de carga de clase, etc.
Inicie el proyecto de muestra y visite: http: // localhost: 8088/monitor/métricos. La parte de retorno de la información es la siguiente:
{ "mem": 337132, "mem.free": 183380, "processors": 4, "instance.uptime": 254552, "uptime": 259702, "systemload.average": -1.0, "heap.committed": 292864, "heap.init": 129024, "heap.used": 109483, "heap": 1827840, "Nonheap.commeted": 45248, "nonheap.init": 2496, "nonheap.used": 44269, "nonheap": 0, "threads.peak": 63, "hilt.daemon": 43, "hiltalstarted": 83, "hilts": 46, "classes" "classes.unloaded": 6357, "classes.unloaded": 0, "gc.ps_scavenge.count": 8, "gc.ps_scavenge.time": 99, "gc.ps_marksweep.count": 1, "gc.ps_marksweep.time": 43, "httpsess.max": -1, "httpessions.Active: 0}La información proporcionada por la interfaz /Metrics simplemente se clasifica de la siguiente manera:
| Clasificación | Prefijo | Informar contenido |
|---|---|---|
| Colector de basura | GC.* | El número de colecciones de basura que han ocurrido y el tiempo dedicado a la recolección de basura es adecuado para los coleccionistas de basura de limpieza de marcas y los coleccionistas de basura paralelos (datos originados en java.lang. Management. GarbageCollectormxBean) |
| Memoria | Mem.* | La cantidad de memoria asignada a la aplicación y la cantidad de memoria libre (datos originados en java.lang. Runtime) |
| montón | montón.* | Uso de memoria actual (datos originados en java.lang.management.MemoryUsage) |
| Cargador de clases | clases.* | El número de clases cargadas y descargadas por el cargador de clase JVM (datos originados en Java.lang. Management.ClassLoadingMxBean) |
| sistema | Processors, instancia. Aproximo, tiempo de actividad, Systemload.average | Información del sistema, como el número de procesadores (datos originados en java.lang.runtime), tiempo de ejecución (datos originados en java.lang.management.runtimemxbean), carga promedio (datos originados en java.lang.management.operatingsystemmxBean) |
| Piscina | hilo.* | El número de hilos, hilos de demonio y el número máximo de hilos después de la inicio de JVM (datos originados en java.lang.management.threadmxbean) |
| Fuente de datos | DataSource.* | Número de conexiones de fuente de datos (metadatos desde la fuente de datos, solo si el bean de datos de datos existe en el contexto de la aplicación Spring) |
| Sesión de Tomcat | httpsessions.* | El número de sesión activo de Tomcat y el número de sesión máximo (los datos provienen de los frijoles de Tomcat integrados, que solo están disponibles al ejecutar la aplicación usando el servidor Tomcat integrado) |
| Http | Counter.status., Gauge. Respuesta. | Medidas y contadores para solicitudes HTTP para varios servicios de aplicación |
Explicación:
cerrar
Encienda la interfaz y cierre elegantemente la aplicación Spring Boot. Para usar esta función, primero debe habilitarla en el archivo de configuración:
Puntos finales: apagado: habilitado: verdadero
Después de completar la configuración, inicie el proyecto de muestra y visite: http: // localhost: 8088/monitor/apagado La parte de retorno de la información es la siguiente:
{"Mensaje": "Apagando, adiós ..."}En este punto, encontrará que la aplicación ha sido cerrada.
rastro
La interfaz /Trace puede informar la información detallada de todas las solicitudes web, incluidos los métodos de solicitud, rutas, marcas de tiempo e información de encabezado de solicitud y respuesta, y registrar la información detallada de cada solicitud.
Inicie el proyecto de muestra, visítelo primero: http: // localhost: 8080/hola, y luego ejecuta en el navegador: http: // localhost: 8088/monitor/traza Ver la información de retorno:
[{"Timestamp": 1516780334777, "info": {"método": "get", "ruta": "/hello", "encabezados": {"request": {"host": "localhost: 8080", "conexión": "keep-alive", "cache-compilat NT 10.0; "Text/Html, Application/Xhtml+Xml, Application/Xml; Q = 0.9, Image/WebP, Image/Apng,*/*; Q = 0.8", "Aceptar-Engoding": "Gzip, Deflate, BR", "Aceptar-Language": "ZH-CN, ZH; Q = 0.9", "Cookie":: "Um_DistintId = 16053BA344F1CD-0DC220C44CC94-B7A103E-13C680-16053BA3450751; Hm_lvt_0fb30c642c5f6453f17d881f529a1141 = 1513076406,1514961720,15156493777777777715140101491490149149TRIO; HM_LVT_6D8E8BB59814010152D98507A18AD229 = 1515247964,1515296008,1515672972,1516086283 "}," Respuesta ": {" X-application-contexto ":" Aplicación: 8080 "," Content: "Content:": " "Text/html; charset = utf-8", "contenido-longitud": "11", "fecha": "mié, 24 de enero de 2018 07:52:14 gmt", "estado": "200"}}, "horno": "4" "}]]La información anterior muestra los detalles de /Hello Solicitud.
Otras configuraciones
Restricciones al acceso a información confidencial
Según la tabla anterior, si la autenticación es falsa, significa que es insensible y se puede acceder a voluntad. De lo contrario, estará protegido y no se puede acceder a voluntad.
Endpoints.mappings.sensitive = falso
Esto requiere configurar cada uno, lo cual es más problemático. El método confidencial requiere que el usuario tenga el rol del actuador de forma predeterminada, por lo que también puede establecer las restricciones de seguridad en el apagado:
gestión.security.enabled = falso
O cooperar con la seguridad de primavera para el control de grano fino.
Habilitar y deshabilitar interfaces
Aunque las interfaces del actuador son útiles, no necesariamente las necesita todas. Por defecto, todas las interfaces (excepto /apagado) están habilitados. Por ejemplo, para deshabilitar la interfaz /Metrics, puede configurarla de la siguiente manera:
Endpoints.metrics.enabled = falso
Si solo desea abrir una o dos interfaces, primero deshabilite todas las interfaces y luego habilite las pocas que desee, lo cual es más conveniente.
Endpoints.enabled = falseEndpoints.metrics.enabled = true
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.