Die Eigenschaften von Mikrodiensten bestimmen, dass die Bereitstellung von Funktionsmodulen verteilt ist. Die meisten funktionalen Module werden auf verschiedenen Maschinen ausgeführt und interagieren miteinander über Serviceaufrufe. Die Geschäftsströme vorne und im Backoffice werden von vielen Microservices verarbeitet und bestanden. Wie findet man schnell Ausnahmen? Welcher Link hat ein Problem?
Im Rahmen dieses Rahmens ist die Überwachung von Mikrodiensten besonders wichtig. Dieser Artikel kombiniert hauptsächlich Spring -Boot -Aktuator, um Ihnen die übliche Verwendung des Microservice Spring Boot Actuators mitzuteilen, damit wir unsere Microservices im täglichen Leben überwachen und verwalten können.
Aktuatorüberwachung
Spring Boot verwendet das Konzept der "Gewohnheiten besser als Konfiguration" und verwendet Paketscan- und automatisierte Konfigurationsmechanismen, um Federbohnen zu laden, die von Gläser abhängen. Es ist keine XML -Konfiguration erforderlich, um alle Federkonfigurationen zu implementieren. Obwohl dies unseren Code sehr präzise ist, sind die Informationen wie die Erstellung von Instanz und Abhängigkeiten der gesamten Anwendung diskret gegenüber den Anmerkungen verschiedener Konfigurationsklassen, was es uns sehr schwierig macht, die verschiedenen Beziehungen zwischen Ressourcen und Instanzen in der gesamten Anwendung zu analysieren.
Aktuator ist eine integrierte Funktion der Selbstbeobachtung und Überwachung von Anwendungssystemen, die mit Spring Boot bereitgestellt werden. Sie können detaillierte Informationen zur Anwendungskonfiguration anzeigen, z. B. automatisierte Konfigurationsinformationen, erstellte Federbohnen und einige Umgebungseigenschaften.
Die Überwachung der Aktuator kann durch Hinzufügen der folgenden Abhängigkeiten durchgeführt werden
<Depelencies> <De vorangestellt> <gruppe> org.springFramework <Cruupid> org.springframework.boot </GroupId> <artifactid> Spring-Boot-Starter-Security </artifactID> </abhängig> </abhängig>
Um die Sicherheit der vom Aktuator freigelegten Überwachungsschnittstelle zu gewährleisten, müssen die Abhängigkeiten der Sicherheitskontrolle abhängig von den Abhängigkeiten des Start-Start-Start-Starts hinzufügen. Beim Zugriff auf Endpunkte der Anwendungsüberwachung sind Überprüfungsinformationen erforderlich. Sicherheitsabhängigkeiten können Sie nicht mehr Sicherheit hinzufügen oder verwalten, sondern wird nicht empfohlen.
REST -Schnittstelle des Aktuators
Die Überwachung der Aktuator ist in zwei Kategorien unterteilt: native Endpunkte und benutzerdefinierte Endpunkte; Benutzerdefinierte Endpunkte beziehen sich hauptsächlich auf Skalierbarkeit. Benutzer können einige weitere betroffene Indikatoren basierend auf ihren tatsächlichen Anwendungen definieren und diese während der Laufzeit überwachen.
Native Endpunkte bieten zahlreiche Web -Schnittstellen in Anwendungen, um den internen Status der Anwendungslaufzeit zu verstehen. Native Endpunkte können in drei Kategorien unterteilt werden:
Aktuator liefert 13 Schnittstellen, wie in der folgenden Tabelle gezeigt.
| HTTP -Methoden | Weg | beschreiben |
|---|---|---|
| ERHALTEN | /Autoconfig | Es wird ein automatischer Konfigurationsbericht bereitgestellt, um aufzuzeichnen, welche automatischen Konfigurationsbedingungen übergeben wurden und welche nicht übergeben wurden. |
| ERHALTEN | /configProps | Beschreiben Sie, wie Sie eine Bean mit Konfigurationseigenschaften injizieren können (einschließlich Standardwerte) |
| ERHALTEN | /Bohnen | Beschreiben Sie alle Bohnen im Anwendungskontext und ihrer Beziehung |
| ERHALTEN | /entsorgen | Holen Sie sich einen Schnappschuss von Thread -Aktivitäten |
| ERHALTEN | /env | Holen Sie sich alle Umgebungsattribute |
| ERHALTEN | /env/{name} | Erhalten Sie spezifische Umgebungsattributwerte basierend auf dem Namen |
| ERHALTEN | /Gesundheit | Berichtet von Gesundheitsmetriken für die Anwendung, diese Werte werden von der Implementierungsklasse des Healthindicators bereitgestellt |
| ERHALTEN | /Info | Erhalten Sie benutzerdefinierte Informationen für die Anwendung, die durch die von Info geleiteten Attributen bereitgestellt wird |
| ERHALTEN | /Mappings | Beschreiben Sie alle URI -Pfade und ihre Zuordnungsbeziehung mit dem Controller (einschließlich Aktuatorendpunkten) |
| ERHALTEN | /Metriken | Melden Sie verschiedene Anwendungsmetriken, wie z. B. Speicherverbrauch und HTTP -Anforderungsanzahl |
| ERHALTEN | /metrics/{name} | Meldet den Anwendungsmetrikwert des angegebenen Namens |
| POST | /abschalten | Schließen Sie die Anwendung und erfordern Endpoints.shutdown.enabled, um auf true festgelegt zu werden |
| ERHALTEN | /verfolgen | Geben Sie grundlegende HTTP -Anforderungsverfolgungsinformationen an (Zeitstempel, HTTP -Header usw.) |
Fangen Sie schnell an
Verwandte Konfigurationen
Projektabhängigkeit
<Depelencies> <Deponcy> <gruppe> org.springFramework
Konfigurationsdatei
Server: Port: 8080Management: Sicherheit: Aktiviert: Falsch #Switch Off Security Authentication Port: 8088 #admin Port wird an 8088 CONTEXT-PATH: /Monitor #actuator Access Path Endpunkte: Abschaltdown: aktiviert: trueInfo: App: Name: Spring-Boot-Actuator-Version: 1.0.0 Version: 1.0.0 Version: 1.0.0
Nach Abschluss der Konfiguration kann das Projekt gestartet werden und Sie können weiterhin die verschiedenen Überwachungsfunktionen überprüfen.
Detaillierte Erklärung des Befehls
Autoconfig
Die automatische Konfigurationsfunktion von Spring Boot ist sehr bequem, aber manchmal bedeutet es auch, dass es schwierig ist, die spezifische Ursache bei einem Problem herauszufinden. Verwenden Sie AutoConfig, um die Bedingungen anzuzeigen, unter denen eine bestimmte Konfiguration während der Anwendungslaufzeit wirksam wird, oder warum eine automatische Konfiguration nicht wirksam wird.
Starten Sie das Beispielprojekt und besuchen Sie: http: // localhost: 8088/monitor/autoconfig. Der Rückgabeteil der Informationen lautet wie folgt:
{"positivematches": {"devtoolsdatasourceAutoconfiguration": {"Notmatched": [{"Bedingung": "devtoolsDataSourceAtoconfiguration.DevtoolsDataSourceCondition", "Message", "Meldung:" ]}, "Remotedevtoolsautokonfiguration": {"Notmatched": [{"Zustand": "OnpropertyCondition", "Nachricht": "@ConditionalonProperty (Spring.DevTools "@ConditionalOnClass found required classes 'javax.servlet.Filter', 'org.springframework.http.server.ServerHttpRequest'; @ConditionalOnMissingClass did not find unwanted class" } ] } }}configProps
Zeigen Sie den Inhalt der in der Konfigurationsdatei festgelegten Eigenschaften sowie die Standardwerte einiger Konfigurationseigenschaften an.
Starten Sie das Beispielprojekt und besuchen Sie: http: // localhost: 8088/monitor/configProps. Der Rückgabeteil der Informationen lautet wie folgt:
{ ... "environmentEndpoint": { "prefix": "endpoints.env", "properties": { "id": "env", "sensitive": true, "enabled": true } }, "spring.http.multipart-org.springframework.boot.autoconfigure.web.MultipartProperties": { "prefix": "spring.http.multipart", "properties": { "maxRequestSize": "10MB", "fileSizeThreshold": "0", "location": null, "maxFileSize": "1MB", "enabled": true, "resolveLazily": false } }, "infoEndpoint": { "prefix": "endpoints.info", "Eigenschaften": {"ID": "info", "sensitiv": false, "aktiviert": true}} ...}Bohnen
Aus dem Beispiel können wir sehen, dass der Alias der Bean, Typ, ob ein Singleton, die Adresse der Klasse, die Abhängigkeit und andere Informationen angezeigt werden.
Starten Sie das Beispielprojekt und besuchen Sie: http: // localhost: 8088/monitor/beans. Der Rückgabeteil der Informationen lautet wie folgt:
[{"Kontext": "Anwendung: 8080: Management", "Parent": "Anwendung: 8080", "Beans": [{"Bean": "EmbeddedServletContainerFactory", "Aliases": [], "SCOPE": "Singleton", "Typ", "Typ": "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory", "resource": "null", "dependencies": [ ] }, { "bean": "endpointWebMvcChildContextConfiguration", "aliases": [ ], "scope": "singleton", "type": "org.springframework.boot.actuate.autoconfigure.endpointwebmvcChildContextConfiguration $$ EnhancerByspringCglib $$ a4a10f9d", "Ressource": "Null", "Abhängigkeiten": []}}]entsorgen
Die /Dump -Schnittstelle erzeugt einen Schnappschuss der aktuellen Thread -Aktivität. Diese Funktion ist sehr gut, was es für uns bequem macht, die Fadensituation zu überprüfen, wenn wir Probleme im täglichen Leben finden. Es wird hauptsächlich Informationen wie Threadname, Thread -ID, Thread -Status angezeigt, ob auf Sperrressourcen warten soll.
Starten Sie das Beispielprojekt und besuchen Sie: http: // localhost: 8088/monitor/Dump. Der Rückgabeteil der Informationen lautet wie folgt:
[{"ThreadName": "http-nio-8088-exec-6", "ThreadId": 49, "BlockedTime": -1, "BlockedCount": 0, "WaitedTime": -1, "WaitedCount": 2, "Lockkname": "java.util.concurrent "Unafe.java", "linenumber": -2, "classname": "sun.misc.unsafe", "nativemethod": true}, {"methodname": "park", "filename": "locksupport.java", "linEnumnumber": 175, "classname": ":": ":" java.util.lopprent "," classname ":": ":" java.util.loppel "," classname ":": ":" java.util. "Nativemethod": false}, {"methodName": "Await", "FileName": "Abstractqueedsynchronizer.java", "Linenumber": 2039, "ClassName": "Java.util.Concurrent "Gettask", "Dateiname": "threadpoolexecutor.java", "Leinenumber": 1067, "className": "java.util.concurrent 1127, "ClassName": "java.util.concurrent.threadpoolexecutor", "nativemethod": false}, {"methodName": "run", "Dateiname": "Threadpoolexecutor.java," Leinenumnumme ": 617, Classname": "Java.Util.Util. "Nativemethod": false}, {"methodName": "run", "fileName": "taskthread.java", "linenumber": 61, "className": "org.apache.tomcat.util.threads.taskthread $ $runnable", "NATIVETHODE": "Thread.java", "Leinenumber": 745, "ClassName": "java.lang.thread", "nativemethod": false}], "lockedMonitors": [], "Sperrynchronizer": [], "LockInfo": {"Classname": ":": "java.util.concurrentenv
Zeigt die Konfigurationsinformationen der Systemumgebungsvariablen an, einschließlich der verwendeten Umgebungsvariablen, JVM -Eigenschaften, Befehlszeilenparameter, vom Projekt verwendeten JAR -Pakete usw. Im Gegensatz zu ConfigProps konzentriert sich ConfigProps auf Konfigurationsinformationen, während sich Env auf Betriebsumgebungsinformationen konzentriert.
Starten Sie das Beispielprojekt und besuchen Sie: http: // localhost: 8088/monitor/env. Der Rückgabeteil der Informationen lautet wie folgt:
{"Profiles": [], "Server.Ports": {"local.Management.port": 8088, "Local.Server.port": 8080}, "ServletContextinitParams": {{}, "SystemProperties": {"com.sun.management.jmxRemote. "Java (TM) SE Runtime Environment", "Spring.output.Ansi.Enabled": "Immer", "sun.boot.library.path": "C: // Programmdateien // Java // jdk1.8.0_101 // jre/bin", "Java.vm. "java.vendor.url": "http://java.oracle.com/", "java.rmi.server.randomids": "true", "path.separator:"; "user.country": "CN", "user.script": "", "sun.java.launcher": "SUN_STANDARD", "sun.os.patch.level": "", "PID": "5268", "com.sun.management.jmxremote.port": "60093", "java.vm.specification.name": "Java Virtual Maschine SpeUm zu vermeiden, dass sensible Informationen /Env ausgesetzt sind, werden alle Attribute mit dem Namen Passwort, geheim, Schlüssel (oder der letzte Absatz des Namens diese) zu /env mit "*" hinzugefügt. Wenn beispielsweise eine Eigenschaftsname -Datenbank vorliegt.
"Datenbank.Password": "******"
Verwendung von /env /{Name}
Das heißt, die Env-Erweiterung kann die angegebenen Konfigurationsinformationen erhalten, wie z.
Gesundheit
Sie können sehen, dass HealthendPoint uns Standardüberwachungsergebnisse liefert, einschließlich der Festplattenerkennung und Datenbankerkennung
Starten Sie das Beispielprojekt und besuchen Sie: http: // localhost: 8088/monitor/Health gibt einen Teil der Informationen zurück. Die folgende JSON -Antwort besteht aus Staat, Speicherplatz und DB. Beschreibt der allgemeine Gesundheitszustand der Anwendung, dass die Anwendung gesund ist. Der Scheibenraum beschreibt den gesamten Speicherplatz, den verbleibenden Scheibenraum und die minimale Schwelle. Die Anwendung.Properties -Schwelle ist konfigurierbar
{ "status": "UP", "diskSpace": { "status": "UP", "total": 209715195904, "free": 183253909504, "threshold": 10485760 } "db": { "status": "UP", "database": "MySQL", "hello": 1 }}In der Tat werden Sie feststellen, dass die von Healthendpoint bereitgestellten Informationen nicht darauf beschränkt sind. Unter dem org.springframework.boot.actuate.Health -Paket finden Sie Elasticsearchhealthindicator, Redishalthindicator, Rabbithealthindicator usw.
Info
Info sind die Konfigurationsinformationen, die wir in der Konfigurationsdatei mit Informationen konfigurieren. Zum Beispiel ist unsere Konfiguration im Beispielprojekt:
Info: App: Name: Spring-Boot-Aktuator-Version: 1.0.0
Starten Sie das Beispielprojekt und besuchen Sie: http: // localhost: 8088/monitor/info Der Rückgabeteil der Informationen lautet wie folgt:
{"App": {"Name": "Spring-Boot-Actuator", "Version": "1.0.0"}}Zuordnungen
Beschreiben Sie alle URI -Pfade und ihre Zuordnungsbeziehung zum Controller
Starten Sie das Beispielprojekt und besuchen Sie: http: // localhost: 8088/monitor/mappings. Der Rückgabeteil der Informationen lautet wie folgt:
{"/**/favicon.ico": {"Bean": "FaviconHandlermaping"}, "{[/Hallo]}": {"Bean": "RequestMappingHandlermaping", "Methode": "public java.lang.string com.neo.controller {"Bean": "RequestMappingHandlermaping", "Methode": "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) "}}Metriken
Einer der wichtigsten Überwachungsinhalte ist die Überwachung der JVM -Inhaltsnutzung, GC -Situation, Klassenbeladungsinformationen usw.
Starten Sie das Beispielprojekt und besuchen Sie: http: // localhost: 8088/monitor/metrics. Der Rückgabeteil der Informationen lautet wie folgt:
{"mem": 337132, "mem.free": 183380, "Processors": 4, "Instanz.Uptime": 254552, "Uptime": 259702, "Systemload. "heap": 1827840, "nonheap.committed": 45248, "nonheap.init": 2496, "nonheap.used": 44269, "nonheap": 0, "threads.peak": 63, "threads.daemon": 43, "threads.totalStarted": 83, "threads": 46, "classes": 6357, "classes.unloaded": 6357, "classes.unload": 0, "gc.ps_scavenge.count": 8, "gc.ps_scavenge.time": 99, "gc.ps_marksweep.count": 1, "gc.ps_marksweep.time": 43, "https". 0}Die von der Schnittstelle /Metriken bereitgestellten Informationen werden einfach wie folgt klassifiziert:
| Einstufung | Präfix | Inhalt melden |
|---|---|---|
| Müllsammler | gc.* | Die Anzahl der Müllsammlungen, die stattgefunden haben, und die Zeit, die für die Müllsammlung aufgewendet wurde, eignet sich für die Markierung von Müllsammlern und parallelen Müllsammlern (Daten stammen aus Java.lang.Management. |
| Erinnerung | mem.* | Die für die Anwendung zugewiesene Speichermenge und die Menge an freiem Speicher (Daten stammen aus Java.lang. Laufzeit) |
| Haufen | Haufen.* | Aktuelle Speicherverwendung (Daten stammen aus java.lang.management.MemoryUSage) |
| Klassenlader | Klassen.* | Die Anzahl der vom JVM -Klassenlader geladenen und entladenen Klassen (Daten stammen von java.lang. Management.ClassloadingMxBean) |
| System | Prozessoren, Instanz.Uptime, Uptime, Systemload. Durchschnitt | Systeminformationen wie die Anzahl der Prozessoren (Daten stammen von java.lang.runtime), Laufzeit (Daten stammen aus Java.lang.Management.Runtimemxbean), Lastdurchschnitt (Daten stammen aus Java.lang.Management.operatingsStemmmxBean)) |
| Fadenpool | Faden.* | Die Anzahl der Threads, Daemon -Threads und die Spitzenzahl der Threads nach JVM -Start (Daten stammen aus java.lang.management.threadmxbean) |
| Datenquelle | DataSource.* | Anzahl der Datenquellenverbindungen (Metadaten aus der Datenquelle, nur wenn die Datenquelle im Feder -Anwendungskontext vorhanden ist) |
| Tomcat -Sitzung | httpsessions.* | Die aktive Sitzungsnummer und die maximale Sitzungsnummer von Tomcat (die Daten stammen aus den Bohnen der eingebetteten Tomcat, die nur beim Ausführen der Anwendung mit einem eingebetteten Tomcat -Server verfügbar sind) |
| Http | counter.status., messresponse. | Maßnahmen und Zähler für HTTP -Anfragen für verschiedene Anwendungsdienste |
Erläuterung:
abschalten
Schalten Sie die Schnittstelle ein und schließen Sie die Spring -Boot -Anwendung elegant. Um diese Funktion zu verwenden, müssen Sie sie zunächst in der Konfigurationsdatei aktivieren:
Endpunkte: Herunterfahren: aktiviert: True
Starten Sie nach Abschluss der Konfiguration das Beispielprojekt und besuchen Sie: http: // localhost: 8088/monitor/stilldown -Rückgabeteil der Informationen lautet wie folgt:
{"Nachricht": "Herunterfahren, Tschüss ..."}Zu diesem Zeitpunkt werden Sie feststellen, dass die Anwendung geschlossen wurde.
verfolgen
Die /Trace -Schnittstelle kann die detaillierten Informationen aller Webanforderungen, einschließlich Anforderungsmethoden, Pfaden, Zeitstempel sowie Anforderungs- und Antwortheaderinformationen, melden und die detaillierten Informationen jeder Anfrage aufzeichnen.
Starten Sie das Beispielprojekt, besuchen Sie es zuerst: http: // localhost: 8080/hello und führen Sie es dann im Browser aus: http: // localhost: 8088/monitor/verfolgt die Rückgabeinformationen anzeigen:
[ { "timestamp": 1516780334777, "info": { "method": "GET", "path": "/hello", "headers": { "request": { "host": "localhost:8080", "connection": "keep-alive", "cache-control": "max-age=0", "user-agent": "Mozilla/5.0 (Windows NT 10.0; "text/html, application/xhtml+xml, application/xml; q = 0,9, Bild/webp, Bild/apng,*/*; q = 0,8", "Akzeptierenerkodierung": "Gzip, Deflate, Br", "Akzeptieren Sie Sprache": "Zh-CN, Zh; "Um_distinctid = 16053ba344F1CD-0DC220C44CC94-B7A103E-13C680-16053BA3450751; HM_LVT_0FB30C642C5F6453F17D881F529A1141 = 1513076406,1514961720,1515649377; Hm_lvt_6d8e8bb59814010152d98507a18ad229=1515247964,1515296008,1515672972,1516086283" }, "response": { "X-Application-Context": "application:8080", "Content-Type": "text/html; charset = utf-8", "Inhaltslänge": "11", "Datum": "Mi, 24. Januar 2018 07:52:14 GMT", "Status": "200"}, "Timetaken": "4"}}]Die obigen Informationen zeigen die Details zur /Hallo -Anfrage.
Andere Konfigurationen
Einschränkungen für den Zugriff auf vertrauliche Informationen
Gemäß der obigen Tabelle bedeutet dies, dass die Authentifizierung falsch ist, dass sie unempfindlich ist und nach Belieben zugegriffen werden kann. Andernfalls wird es geschützt und kann nicht nach Belieben zugegriffen werden.
Endpoints.Mappings.sensitive = false
Dies erfordert das Einrichten jedes einzelnen, was problematischer ist. Die sensible Methode erfordert, dass der Benutzer standardmäßig über die Rolle der Aktuator verfügt, sodass Sie auch die Sicherheitsbeschränkungen auf den Off einstellen können:
Management.Security.Enabled = false
Oder mit der feinkörnigen Kontrolle mit Frühlingssicherheit zusammenarbeiten.
Schnittstellen aktivieren und deaktivieren
Obwohl die Schnittstellen des Aktuators nützlich sind, brauchen Sie nicht unbedingt alle. Standardmäßig sind alle Schnittstellen (außer /stilldown) aktiviert. Um die Schnittstelle /Metrics zu deaktivieren, können Sie sie wie folgt festlegen:
Endpunkte.Metrics.enabled = false
Wenn Sie nur ein oder zwei Schnittstellen öffnen möchten, deaktivieren Sie zuerst alle Schnittstellen und aktivieren Sie dann die wenigen, die Sie möchten, was bequemer ist.
Endpoints.enabled = falseendpoints.metrics.enabled = true
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.