>Java >java지도 시간 >SpringBoot에서 액추에이터를 닫는 방법

SpringBoot에서 액추에이터를 닫는 방법

PHPz
PHPz앞으로
2023-05-12 19:46:1010409검색

    SpringBoot는 액추에이터를 닫습니다

    SpringBoot에서 액추에이터를 닫는 방법

    management:
      endpoint:
        health:
          show-details: ALWAYS
      endpoints:
        enabled-by-default: false #关闭监控
        web:
          exposure:
            include: '*'

    SpringBoot 액추에이터 지식 정리

    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 엔드포인트에 액세스합니다. 기본적으로 다음과 같이 활성화됩니다. 엔드포인트

    SpringBoot에서 액추에이터를 닫는 방법

    는 다음과 같은 방법으로 다른 엔드포인트를 열 수 있습니다. 일부 엔드포인트를 닫아야 하는 경우 제외로 설정할 수 있습니다.

    management:
      endpoints:
        web:
          exposure:
            include: "*"
            exclude: ""

    프로젝트를 다시 시작하면 표시된 엔드포인트가 많이 늘어난 것을 확인할 수 있습니다.

    SpringBoot에서 액추에이터를 닫는 방법

    액추에이터 엔드포인트 구성

    /autoconfig 및 /conditions를 사용하여 자동 구성 조건 획득

    자동 구성 보고서 제공 자동 구성 조건이 통과되었으며 어떤 조건이 실패했는지입니다. 새 버전은 조건에 맞게 조정되었습니다. Spring Boot 자동 구성은 Spring의 조건부 구성을 기반으로 구축되었습니다. @Conditional 주석이 포함된 다양한 구성 클래스를 제공하고 조건에 따라 이러한 Bean을 자동으로 구성할지 여부를 결정합니다. /autoconfig 엔드포인트는 평가된 모든 조건을 조건의 통과 또는 실패 여부에 따라 그룹화하여 나열하는 보고서를 제공합니다.

    Endpoint: http://localhost:9999/actuator/conditions

    SpringBoot에서 액추에이터를 닫는 방법

    [예]

    SpringBoot에서 액추에이터를 닫는 방법

    위는 그림에 표시된 것처럼 실패한 조건의 예입니다. JdbcTemplate입니다. 이 클래스가 도움이 될 수 있습니다. 우리는 데이터베이스를 운영합니다. 관련 종속 클래스가 도입되지 않았기 때문에 다음 프롬프트 메시지와 같습니다.

    "message": "@ConditionalOnClass가 필수 클래스 ‘org.springframework.jdbc.core.JdbcTemplate’를 찾지 못했습니다.

    클래스 경로를 확인하고 요구 사항이 없습니다. JdbcTemplate 조건이 충족되지 않으면 자동 구성이 수행되지 않습니다.

    /beans Bean 어셈블리 보고서 가져오기

    애플리케이션에서 Spring 컨텍스트를 이해하려면 가장 중요한 엔드포인트는 /beans입니다. Java 유형 및 기타 주입된 Bean을 포함하여 컨텍스트의 각 Bean을 설명하는 JSON 문서를 반환합니다.

    요청 엔드포인트: /actuator/beans

    SpringBoot에서 액추에이터를 닫는 방법

    /env 엔드포인트 구성 속성 보기

    /env 엔드포인트는 사용 여부에 관계없이 애플리케이션에 사용할 수 있는 모든 환경 속성 목록을 생성합니다. 여기에는 환경 변수, JVM 속성, 명령줄 매개 변수 및 application.properties 또는 application.yml 파일에서 제공되는 속성이 포함됩니다.

    Endpoint:/actuator/env

    SpringBoot에서 액추에이터를 닫는 방법

    /env는 구성의 개인정보를 보호하기 위한 몇 가지 보안 정책을 제공합니다. 이러한 정보가 /env에 노출되는 것을 방지하기 위해 비밀번호, 비밀, 키(또는 이름의 마지막 단락)라는 모든 속성은 /env에 "*"로 추가됩니다. 참고 사항은 다음과 같습니다.

    SpringBoot에서 액추에이터를 닫는 방법

    /mapping 요청 URL 매핑

    /mapping 엔드포인트는 모든 @RequestMapping 요청 경로를 표시합니다.

    요청 엔드포인트: /actuator/mappings

    SpringBoot에서 액추에이터를 닫는 방법

    [테스트 인터페이스]

        @GetMapping(value = "/hello", produces = "application/json;charset=utf-8")
        public String hello(@RequestParam("name") String name) {
            return "hello world";
        }

    SpringBoot에서 액추에이터를 닫는 방법

    값 각 매핑에는 bean과 메소드라는 두 가지 속성이 있습니다. bean 속성은 매핑이 시작된 Spring

    Bean의 이름을 식별합니다. 메소드 속성은 해당 메소드 매핑의 정규화된 메소드 서명입니다.

    /metrics런타임 표시기 모니터링

    /metrics는 런타임 시 애플리케이션을 빠르게 확인할 수 있는 런타임 메트릭 모니터링을 제공합니다.

    엔드포인트: /actuator/metrics

    SpringBoot에서 액추에이터를 닫는 방법

    주요 모니터링 항목은 다음과 같습니다.

    SpringBoot에서 액추에이터를 닫는 방법

    /metrics端点会返回所有的可用度量值,但你也可能只对某个值感兴趣。要获取单个值,请求时可以在URL后加上对应的键名。

    SpringBoot에서 액추에이터를 닫는 방법

    如上图所示,查询jvm最大内存,结果值大约为6G。

    /httptrace 追踪Web请求

    /httptrace端点能报告所有Web请求的详细信息,包括请求方法、路径、时间戳以及请求和响应的头信息。

    【请求端点】/actuator/httptrace

    默认情况下httptrace没有启用,它要求一个HttpTraceRepository 的对象Bean.

    SpringBoot에서 액추에이터를 닫는 방법

    在系统中创建如下配置,提供一个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

    SpringBoot에서 액추에이터를 닫는 방법

    【测试】

         Thread thread = new Thread(() -> {
                try {
                    Thread.sleep(1000000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }, "测试线程");
            thread.start();

    SpringBoot에서 액추에이터를 닫는 방법

    /shutdown 优雅的关闭应用程序

    /shutdown可以让应用服务优雅的关闭,默认是关闭的。假设你要关闭运行中的应用程序。比方说,在微服务架构中,你有多个微服务应用的实例运行在云上,其中某个实例有问题了,你决定关闭该实例并重启这个有问题的应用程序。在这个场景中,Actuator的/shutdown端点就很有用了。

    SpringBoot에서 액추에이터를 닫는 방법

    优雅的关闭和kill -9的方式是相对的,它不会粗暴的立马关闭应用,而是会释放相关链接以及执行SpringBoot容器停止后的一些操作,然后再关闭应用。

    【端点】/actuator/shutdown 要求POST请求方式

    【示例】

    在应用中添加一个关闭前处理的钩子方法

            Runtime.getRuntime().addShutdownHook(new Thread(() -> {
                System.out.println("关闭应用,释放资源");
            }));

    SpringBoot에서 액추에이터를 닫는 방법

    SpringBoot에서 액추에이터를 닫는 방법

    可以看到通过/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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제