• Spring Boot Actuator:介绍和使用


    Spring Boot Actuator提供一系列HTTP端点来暴露项目信息,用来监控和管理项目。在Maven中,可以添加以下依赖:

    <!-- Spring boot starter: actuator -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    [注] 在某些包中已经自动绑定了Spring Boot Actuator包,比如一些Cloud包spring-cloud-starter-security,spring-cloud-starter-netflix-eureka-server等,这时候不用再重复添加该依赖。

    Actuator提供了以下端点,默认除了/shutdown都是Enabled。使用时需要加/actuator前缀,如http://localhost:8080/my-app/actuator/health。

    IDDescriptionEnabled by default
    auditevents 显示当前应用程序的审计事件信息 Yes
    beans 显示应用上下文中创建的所有Bean Yes
    caches 获取缓存信息 Yes
    conditions 显示配置类和自动配置类(configuration and auto-configuration classes) 的状态及它们被应用或未被应用的原因 Yes
    configprops 该端点用来获取应用中配置的属性信息报告 所有@ConfigurationProperties的集合列表 Yes
    env 获取应用所有可用的环境属性报告。包括: 环境变量、JVM属性、应用的配置配置、命令行中的参数 Yes
    flyway 显示数据库迁移路径(如果有) Yes
    health 显示应用的健康信息 Yes
    httptrace 返回基本的HTTP跟踪信息。 (默认最多100 HTTP request-response exchanges). Yes
    info 返回一些应用自定义的信息,我们可以在application.properties 配置文件中通过info前缀来设置这些属性:info.app.name=spring-boot-hello Yes
    integrationgraph Shows the Spring Integration graph. Yes
    loggers Shows and modifies the configuration of loggers in the application. Yes
    liquibase Shows any Liquibase database migrations that have been applied. Yes
    metrics 返回当前应用的各类重要度量指标,比如:内存信息、线程信息、垃圾回收信息等 Yes
    mappings 返回所有Spring MVC的控制器映射关系报告 所有@RequestMapping路径的集合列表 Yes
    scheduledtasks 显示应用程序中的计划任务 Yes
    sessions 允许从Spring会话支持的会话存储中检索和删除(retrieval and deletion) 用户会话。使用Spring Session对反应性Web应用程序的支持时不可用   Yes
    shutdown 允许应用以优雅的方式关闭(默认情况下不启用) No
    threaddump 执行一个线程dump Yes

    如果使用web应用(Spring MVC, Spring WebFlux, 或者 Jersey),还可以使用以下端点:

    IDDescriptionEnabled by default
    heapdump 返回一个GZip压缩的hprof堆dump文件 Yes
    jolokia 通过HTTP暴露JMX beans(当Jolokia在类路径上时,WebFlux不可用) Yes
    logfile 返回日志文件内容(如果设置了logging.file或logging.path属性的话), 支持使用HTTP Range头接收日志文件内容的部分信息                          Yes
    prometheus       以可以被Prometheus服务器抓取的格式显示metrics信息 Yes

    如果要启用/禁用某个端点,可以使用management.endpoint.<id>.enabled属性:

    management:
      endpoint:
        shutdown:
          enabled: true

    另外可以通过management.endpoints.enabled-by-default来修改全局端口默认配置,比如下面禁用所有端点只启用info端点:

    management:
      endpoints:
        enabled-by-default: false
      endpoint:
        info:
          enabled: true

    上面是启用/禁用(enable)某个端点,如果使某个端点暴露(exposure)出来,还需要再配置,默认情况下所有端点在JMX下是全部公开的,在Web下只公开/health和/info两个端点。下面是默认配置:

    PropertyDefault
    management.endpoints.jmx.exposure.exclude          - 
    management.endpoints.jmx.exposure.include  '*'
    management.endpoints.web.exposure.exclude  -                  
    management.endpoints.web.exposure.include    info, health                                                             

    下面的例子是Web下公开所有端点:

    management:
      endpoints:
        web:
          exposure:
            include: '*'

    保护Actuator HTTP端点:

    最简单的方式,就是在pom.xml中添加spring-boot-starter-security。由SpringBoot Security的特性可知,系统会自动给我们创建login/logout page,还有一个user和password,此外系统还会自动给我配置一个ManagementWebSecurityConfigurerAdapter(extends WebSecurityConfigurerAdapter),配置Actuator各个Endpoint的权限。

    当然我们也可以自定义一个WebSecurityConfigurerAdapter配置自己的user和authority。

    package com.mytools;
    
    import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;
    import org.springframework.boot.actuate.health.HealthEndpoint;
    import org.springframework.boot.actuate.info.InfoEndpoint;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    import org.springframework.security.crypto.factory.PasswordEncoderFactories;
    import org.springframework.security.crypto.password.PasswordEncoder;
    
    @Configuration
    public class MyWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
    
        @Bean
        public PasswordEncoder passwordEncoder() {
            return PasswordEncoderFactories.createDelegatingPasswordEncoder();
        }
    
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            //@formatter:off
            PasswordEncoder encoder = new BCryptPasswordEncoder();
            auth.inMemoryAuthentication()
                .withUser("user1").password("{bcrypt}" + encoder.encode("password1")).roles("ADMIN","EUREKA")
                .and()
                .withUser("user2").password("{bcrypt}" + encoder.encode("password2")).roles("EUREKA");
            //@formatter:on
        }
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            // comes from ManagementWebSecurityAutoConfiguration and ManagementWebSecurityConfigurerAdapter
            //@formatter:off
            http.authorizeRequests()
                    .requestMatchers(EndpointRequest.to(HealthEndpoint.class, InfoEndpoint.class)).permitAll()
                    .anyRequest().authenticated()
                    .and()
                .formLogin().and()
                .httpBasic();
            //@formatter:on
        }
    }
  • 相关阅读:
    前端的推荐资源
    Python 学习日志(一)
    遇到的一些elasticsearch报错信息整理
    记hyper-v导致的privoxy error(fatal error: can't bind to 127.0.0.1:1081(error number:0)),附解决方法
    Java动态代理学习笔记
    spring依赖注入中p命名空间和c命名空间区别
    python "二维" 字典(字典嵌套)
    [剑指offer] 数组中的逆序对
    [剑指offer] 复杂链表的复制
    [剑指offer] 8-10做题笔记
  • 原文地址:https://www.cnblogs.com/storml/p/10913142.html
Copyright © 2020-2023  润新知