management: endpoint: health: show-details: ALWAYS endpoints: enabled-by-default: false #关闭监控 web: exposure: include: '*'
Spring Boot のアクチュエータ 。 Spring Boot アプリケーションの監視や測定など、多くの実稼働グレードの機能を提供します。 Actuator のこれらの機能は、多数の REST エンドポイント、リモート シェル、および JMX を通じて利用できます。
【利用環境】
【1】SpringBootバージョン2.5.0、JDK11
【2】サービスポート9999
依存関係の追加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
プロジェクトを開始し、SpringBoot2 の /actuator エンドポイントにアクセスします。一部のエンドポイントは除外に設定できます。
management: endpoints: web: exposure: include: "*" exclude: ""
プロジェクトを再起動すると、表示されるエンドポイントが大幅に増加していることがわかります
アクチュエータ エンドポイントの配置
/ autoconfig and/conditions 自動構成条件の取得
どの自動構成条件が成功したか、どの自動構成条件が失敗したかを記録する自動構成レポートを提供します。新しいバージョンでは条件が調整されました。 Spring Boot の自動構成は、Spring の条件付き構成に基づいて構築されています。 @Conditional アノテーションを備えた多数の構成クラスを提供し、条件に基づいてこれらの Bean を自動的に構成するかどうかを決定します。 /autoconfig エンドポイントは、評価されたすべての条件を、条件が成功したか失敗したかに従ってグループ化してリストしたレポートを提供します。エンドポイント: http://localhost:9999/actuator/conditions
##[例] # #上記は失敗した条件の例です。図に示されているように、JdbcTemplate、このクラスはデータベースの操作に役立ちます。プロンプト メッセージのとおり、関連する依存クラスが導入されていないため: "message": "@ConditionalOnClass は必要なクラス ‘org.springframework.jdbc.core.JdbcTemplate’"を示しています。 Classpath に JdbcTemplate が必要でないことを確認し、条件を満たさない場合は自動設定を行いません
/beans Bean アセンブリレポートの取得Toアプリケーションの Spring コンテキストを理解する この場合、最も重要なエンドポイントは /beans です。 Java タイプや他の挿入された Bean など、コンテキスト内の各 Bean を説明する JSON ドキュメントを返します。
リクエストエンドポイント:/actuator/beans
/env エンドポイント 構成プロパティの表示
/env エンドポイントは、使用されているかどうかに関係なく、アプリケーションで使用できるすべての環境プロパティのリストを生成します。これには、環境変数、JVM プロパティ、コマンド ライン パラメータ、application.properties または application.yml ファイルによって提供されるプロパティが含まれます。
Endpoint:/actuator/env
/env は、構成のプライバシーを保護するためのいくつかのセキュリティ ポリシーを提供します。このような情報が /env に公開されるのを防ぐために、パスワード、シークレット、キー (または名前の最後の段落) という名前のすべての属性が "*" とともに /env に追加されます。参照は次のとおりです。 ##/mappingRequest URL マッピング/mapping endpoint には、すべての @RequestMapping リクエスト パスが表示されます
Request endpoint:/actuator /mappings[テスト インターフェイス]
@GetMapping(value = "/hello", produces = "application/json;charset=utf-8") public String hello(@RequestParam("name") String name) { return "hello world"; }
マップされた各値には、Bean とメソッドという 2 つの属性があります。 Bean 属性は、マッピングの元となる Spring
Bean の名前を識別します。メソッド属性は、マッピングに対応するメソッドの完全修飾メソッド シグネチャです。
/metricsランタイム インジケーターのモニタリング
/metrics は、実行時にアプリケーションを迅速にチェックできるランタイム メトリックのモニタリングを提供します。 Endpoint:/actuator/metrics主な監視項目は次のとおりです。
/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] 先ほどは Actuator が提供する組み込みエンドポイントの一部を使用しましたが、独自のニーズに応じて Actuator を拡張およびカスタマイズすることもできます。
実は、Actuator には次の 5 つを含め、さまざまなカスタマイズ方法があります。
#1: エンドポイントの名前を変更します。デフォルトのエンドポイントをカスタム エンドポイント アドレスに変更します。
2: エンドポイントを有効または無効にします。
以上がSpringBootでアクチュエータを閉じる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。