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>
프로젝트를 시작하고 /actuator 엔드포인트에 액세스합니다. 기본적으로 다음과 같이 활성화됩니다. 엔드포인트
는 다음과 같은 방법으로 다른 엔드포인트를 열 수 있습니다. 일부 엔드포인트를 닫아야 하는 경우 제외로 설정할 수 있습니다.
management: endpoints: web: exposure: include: "*" exclude: ""
프로젝트를 다시 시작하면 표시된 엔드포인트가 많이 늘어난 것을 확인할 수 있습니다.
/autoconfig 및 /conditions를 사용하여 자동 구성 조건 획득
자동 구성 보고서 제공 자동 구성 조건이 통과되었으며 어떤 조건이 실패했는지입니다. 새 버전은 조건에 맞게 조정되었습니다. Spring Boot 자동 구성은 Spring의 조건부 구성을 기반으로 구축되었습니다. @Conditional 주석이 포함된 다양한 구성 클래스를 제공하고 조건에 따라 이러한 Bean을 자동으로 구성할지 여부를 결정합니다. /autoconfig 엔드포인트는 평가된 모든 조건을 조건의 통과 또는 실패 여부에 따라 그룹화하여 나열하는 보고서를 제공합니다.
Endpoint: http://localhost:9999/actuator/conditions
[예]
위는 그림에 표시된 것처럼 실패한 조건의 예입니다. JdbcTemplate입니다. 이 클래스가 도움이 될 수 있습니다. 우리는 데이터베이스를 운영합니다. 관련 종속 클래스가 도입되지 않았기 때문에 다음 프롬프트 메시지와 같습니다.
"message": "@ConditionalOnClass가 필수 클래스 ‘org.springframework.jdbc.core.JdbcTemplate’를 찾지 못했습니다.
클래스 경로를 확인하고 요구 사항이 없습니다. JdbcTemplate 조건이 충족되지 않으면 자동 구성이 수행되지 않습니다.
/beans Bean 어셈블리 보고서 가져오기
애플리케이션에서 Spring 컨텍스트를 이해하려면 가장 중요한 엔드포인트는 /beans입니다. Java 유형 및 기타 주입된 Bean을 포함하여 컨텍스트의 각 Bean을 설명하는 JSON 문서를 반환합니다.
요청 엔드포인트: /actuator/beans
/env 엔드포인트 구성 속성 보기
/env 엔드포인트는 사용 여부에 관계없이 애플리케이션에 사용할 수 있는 모든 환경 속성 목록을 생성합니다. 여기에는 환경 변수, JVM 속성, 명령줄 매개 변수 및 application.properties 또는 application.yml 파일에서 제공되는 속성이 포함됩니다.
Endpoint:/actuator/env
/env는 구성의 개인정보를 보호하기 위한 몇 가지 보안 정책을 제공합니다. 이러한 정보가 /env에 노출되는 것을 방지하기 위해 비밀번호, 비밀, 키(또는 이름의 마지막 단락)라는 모든 속성은 /env에 "*"로 추가됩니다. 참고 사항은 다음과 같습니다.
/mapping 요청 URL 매핑
/mapping 엔드포인트는 모든 @RequestMapping 요청 경로를 표시합니다.
요청 엔드포인트: /actuator/mappings
[테스트 인터페이스]
@GetMapping(value = "/hello", produces = "application/json;charset=utf-8") public String hello(@RequestParam("name") String name) { return "hello world"; }
값 각 매핑에는 bean과 메소드라는 두 가지 속성이 있습니다. bean 속성은 매핑이 시작된 Spring
Bean의 이름을 식별합니다. 메소드 속성은 해당 메소드 매핑의 정규화된 메소드 서명입니다.
/metrics런타임 표시기 모니터링
/metrics는 런타임 시 애플리케이션을 빠르게 확인할 수 있는 런타임 메트릭 모니터링을 제공합니다.
엔드포인트: /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: 엔드포인트를 활성화 및 비활성화합니다.
3: 맞춤형 측정 정보.
4: 추적 데이터를 저장할 사용자 정의 창고를 만듭니다.
5: 사용자 정의 건강 표시기를 삽입합니다.
【7】이 시점에서 Actuator를 통해 시스템에 대한 많은 정보를 볼 수 있다는 것을 알 수 있습니다. 이는 개발자에게는 좋지만 보안 관점에서는 제한되지 않으면 시스템의 보안이 저하됩니다. 숨겨진 큰 위험이 있을 것입니다. Actuator의 엔드포인트 보호는 Spring Security를 사용하여 다른 URL 경로와 동일한 방식으로 사용할 수 있습니다. Spring Boot 애플리케이션에서 이는 보안 스타터 종속성을 빌드 종속성으로 추가한 다음 보안 관련 자동 구성이 Actuator 엔드포인트를 포함하여 애플리케이션을 보호하도록 하는 것을 의미합니다. 예를 들어 /shutdown 엔드포인트를 보호하고 ADMIN 권한이 있는 사용자에게만 액세스를 허용하려고 합니다.
위 내용은 SpringBoot에서 액추에이터를 닫는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!