【Nutzungsumgebung】
【1】SpringBoot-Version 2.5.0, JDK11【2】Service-Port 9999Abhängigkeiten hinzufügenmanagement: endpoint: health: show-details: ALWAYS endpoints: enabled-by-default: false #关闭监控 web: exposure: include: '*'
können andere Endpunkte auf folgende Weise öffnen. Wenn Sie einige Endpunkte schließen müssen, können Sie sie ausschließen.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
Starten Sie das Projekt neu und Sie können sehen, dass die angezeigten Endpunkte stark zugenommen haben
Aktuator-Endpunktorganisation
/autoconfig und /conditions, um automatische Konfigurationsbedingungen zu erhalten bietet einen automatischen Konfigurationsbericht, um welche aufzuzeichnen Die automatischen Konfigurationsbedingungen wurden erfüllt und welche fehlgeschlagen. Die neue Version wurde den Gegebenheiten angepasst. Die automatische Konfiguration von Spring Boot basiert auf der bedingten Konfiguration von Spring. Es stellt zahlreiche Konfigurationsklassen mit @Conditional-Annotationen bereit und bestimmt, ob diese Beans automatisch auf der Grundlage von Bedingungen konfiguriert werden sollen. Der /autoconfig-Endpunkt stellt einen Bericht bereit, der alle ausgewerteten Bedingungen auflistet, gruppiert danach, ob die Bedingung erfüllt oder fehlgeschlagen ist. Endpunkt: http://localhost:9999/actuator/conditions[Beispiel]
Das Obige ist ein Beispiel für eine fehlgeschlagene Bedingung, wie im Bild gezeigt, ist JdbcTemplate, diese Klasse kann helfen Wir betreiben die Datenbank. Da die relevanten abhängigen Klassen nicht eingeführt wurden, lautet die Meldung:
„message“: „@ConditionalOnClass hat die erforderliche Klasse ‘org.springframework.jdbc.core.JdbcTemplate“ nicht gefunden
Überprüfen Sie den Klassenpfad und Es besteht keine Anforderung. Wenn die JdbcTemplate-Bedingung nicht erfüllt ist, wird keine automatische Konfiguration durchgeführt. Es gibt ein JSON-Dokument zurück, das jede Bean im Kontext beschreibt, einschließlich ihres Java-Typs und anderer injizierter Beans.
Endpunkt anfordern: /actuator/beans/env endpoint Konfigurationseigenschaften anzeigen/env endpoint generiert eine Liste aller für die Anwendung verfügbaren Umgebungseigenschaften, unabhängig davon, ob sie verwendet werden oder nicht. Dazu gehören Umgebungsvariablen, JVM-Eigenschaften, Befehlszeilenparameter und Eigenschaften, die von application.properties- oder application.yml-Dateien bereitgestellt werden.
Endpoint:/actuator/env
/env bietet einige Sicherheitsrichtlinien zum Schutz der Vertraulichkeit der Konfiguration. Um zu verhindern, dass solche Informationen in /env offengelegt werden, werden alle Attribute mit den Namen „Passwort“, „Geheimnis“ und „Schlüssel“ (oder der letzte Absatz des Namens) in /env mit „*“ hinzugefügt. Die Referenz lautet wie folgt:
Die URL-Zuordnung der /mapping-Anfrage
/mapping-Endpunkt zeigt alle @RequestMapping-Anfragepfade anDer Wert von Jede Zuordnung hat zwei Attribute: Bean und Methode. Das Bean-Attribut identifiziert den Namen der Spring
Bean, von der die Zuordnung stammt. Das Methodenattribut ist die vollständig qualifizierte Methodensignatur der der Zuordnung entsprechenden Methode./metrics Laufzeitindikatorüberwachung
/metrics bietet uns eine Überwachung von Laufzeitmetriken, mit denen wir die Anwendung zur Laufzeit schnell überprüfen können. Endpunkt: /actuator/metrics
Die wichtigsten Überwachungselemente sind wie folgt:/metrics端点会返回所有的可用度量值,但你也可能只对某个值感兴趣。要获取单个值,请求时可以在URL后加上对应的键名。
如上图所示,查询jvm最大内存,结果值大约为6G。
/httptrace 追踪Web请求
/httptrace端点能报告所有Web请求的详细信息,包括请求方法、路径、时间戳以及请求和响应的头信息。
【请求端点】/actuator/httptrace
默认情况下httptrace没有启用,它要求一个HttpTraceRepository 的对象Bean.
在系统中创建如下配置,提供一个HttpTraceRepository 类型的Bean,这里选择的是InMemoryHttpTraceRepository内存存储的方式。该方式默认提供最新的100条请求记录。
import org.springframework.boot.actuate.trace.http.HttpTraceRepository; import org.springframework.boot.actuate.trace.http.InMemoryHttpTraceRepository; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class HttpTraceActuatorConfiguration { @Bean public HttpTraceRepository httpTraceRepository() { return new InMemoryHttpTraceRepository(); } }
/dump 导出线程快照
/dump端点会生成当前线程活动的快照。完整的线程导出报告里会包含应用程序的每个线程。其中包含很多线程的特定信息,还有线程相关的阻塞和锁状态。
【请求端点】/threaddump
【测试】
Thread thread = new Thread(() -> { try { Thread.sleep(1000000); } catch (InterruptedException e) { e.printStackTrace(); } }, "测试线程"); thread.start();
/shutdown 优雅的关闭应用程序
/shutdown可以让应用服务优雅的关闭,默认是关闭的。假设你要关闭运行中的应用程序。比方说,在微服务架构中,你有多个微服务应用的实例运行在云上,其中某个实例有问题了,你决定关闭该实例并重启这个有问题的应用程序。在这个场景中,Actuator的/shutdown端点就很有用了。
优雅的关闭和kill -9的方式是相对的,它不会粗暴的立马关闭应用,而是会释放相关链接以及执行SpringBoot容器停止后的一些操作,然后再关闭应用。
【端点】/actuator/shutdown 要求POST请求方式
【示例】
在应用中添加一个关闭前处理的钩子方法
Runtime.getRuntime().addShutdownHook(new Thread(() -> { System.out.println("关闭应用,释放资源"); }));
可以看到通过/actuator/shutdown关闭应用可以触发这些关闭处理的钩子函数,方便我们在应用停止时关闭一些连接以及做一些其他的处理。
整理
【1】上面实践了一些Actuator端点示例,虽然Actuator提供的功能很强大,但是在如今的集群化,K8S容器化应用部署下,这些直接访问某些应用的情况就变得很少了,比如监控Zipkin 、Spring Cloud Sleuth等等,内存监控这一块K8S容器化平台也有很多。但是,去学习实践这样的一个工具也是很值得的,如果后面有类似监控、关闭应用、获取请求URL映射、获取配置等等,那么我们就可以去看看Actuator是如何做的,学习和扩展。
【2】本次的学习时看的《SpringBoot实战》书籍的学习笔记,该书Actuator章节后在后面也提及了很多进阶的知识,因为具体应用场景不多,下面就简单的整理下,把一些知识点记录下来,如果后面需要在重点实践学习下。
【3】《SpringBoot实战》书籍关于Actuator介绍的一些使用可能在当下的版本中有些出入,这里贴上官方文档地址,参考对比下https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.enabling
【4】Actuator通过REST端点提供了不少非常有用的信息。另一个深入运行中应用程序内部的方式是使用远程shell。Spring Boot集成了CRaSH,一种能嵌入任意Java应用程序的shell。Spring Boot还扩展了CRaSH,添加了不少Spring Boot特有的命令,提供了与Actuator端点类似的功能。该工具附上应用上,会在启动时提供一个访问秘钥,我们通过ssh user@localhost -p 2000 的方式就可以去访问,并且执行一些命令去查看应用数据。
【5】除了REST端点和远程shell,Actuator还把它的端点以MBean的方式发布了出来,可以通过JMX来查看和管理。使用JMX是管理Spring Boot应用程序的一个好方法,如果你已在用JMX管理应用程序中的其他MBean,则尤其如此。
[6] Zuvor haben wir einige der integrierten Endpunkte von Actuator verwendet. Wir können Actuator auch entsprechend unseren eigenen Anforderungen erweitern und anpassen.
Tatsächlich bietet Actuator viele Möglichkeiten, es anzupassen, einschließlich der folgenden fünf.
1: Benennen Sie den Endpunkt um. Ändern Sie den Standardendpunkt in unsere benutzerdefinierte Endpunktadresse.
2: Endpunkte aktivieren und deaktivieren.
3: Benutzerdefinierte metrische Informationen.
4: Erstellen Sie ein benutzerdefiniertes Lager zum Speichern von Tracking-Daten.
5: Fügen Sie einen benutzerdefinierten Gesundheitsindikator ein.
【7】Hier können wir sehen, dass wir durch Actuator viele Informationen über das System sehen können, was für Entwickler großartig ist, aber im Hinblick auf die Sicherheit Wenn es nicht eingeschränkt wird, wird die Sicherheit des Systems stark beeinträchtigt. Der Endpunktschutz von Actuator kann auf die gleiche Weise wie andere URL-Pfade verwendet werden – mit Spring Security. In einer Spring Boot-Anwendung bedeutet dies, dass die Security-Starter-Abhängigkeit als Build-Abhängigkeit hinzugefügt wird und dann die Anwendung, einschließlich des Actuator-Endpunkts, durch eine sicherheitsbezogene automatische Konfiguration geschützt wird. Sie möchten beispielsweise den Endpunkt /shutdown schützen und den Zugriff nur Benutzern mit ADMIN-Berechtigungen ermöglichen.
Das obige ist der detaillierte Inhalt vonSo schließen Sie den Aktuator in SpringBoot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!