springboot actuator

作者: 二月_春风 | 来源:发表于2017-08-07 11:51 被阅读62次

    了解Springboot Actuator,它提供了很多生产级的特性,比如说监控和度量spring boot应用程序。Actuator的这些特性可以通过众多的REST断点,远程shell和JMX获得。

    加入依赖:

    <dependencies>
        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
    </dependencies>
    

    配置文件:

    security.basic.enabled=false
    management.security.enabled=false
    

    之前的boot版本1.4.*不需要加入spring-boot-starter-security依赖,自己本demo使用的是1.5.4的版本,发现无法访问监控度量的web端点,在控制台上提示加入spring-boot-starter-security依赖及配置management.security.enabled=false

    监控

    1. 描述应用程序上下文的全部beans,以及它们的关系
    http://localhost:8080/beans
    
    1. 获取全部的环境变量
    http://localhost:8080/env
    

    包括系统属性,系统配置,配置文件application.properties配置文件中的属性。

    增加配置文件db.properties

    @SpringBootApplication
    @PropertySource(value = "classpath:db.properties")
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class,args);
        }
    }
    
    1. 描述全部的URL路径,以及它们和控制器(包含Actuator断点)的映射关系。
    http://localhost:8080/mappings
    
    1. 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没有通过
      比如我人为的排除WebSocketAutoConfiguration,在监控上也可以反应出来。
    @SpringBootApplication(exclude = {WebSocketAutoConfiguration.class})
    @PropertySource(value = "classpath:db.properties")
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class,args);
        }
    }
    
    http://localhost:8080/autoconfig
    
    1. 健康检查
      报告应用程序的健康指标,这些值由org.springframework.boot.actuate.health.HealthIndicator的实现类提供。

    比如我在项目中加入mysql服务,如下监控

    http://localhost:8080/health
    

    当然不仅仅是mysql服务,springboot默认实现的监控还包括redis服务,mongodbsolrrabbitmqElasticsearch等等服务。

    这些实现在spring-boot-actuator-1.5.4.RELEASE.jarorg.springframework.boot.actuate.health包下,

    自定义健康检查
    实现HealthIndicator接口,并纳入到spring容器的管理之中。

    @Component
    public class MyHealthIndicator implements HealthIndicator{
    
        @Override
        public Health health() {
            return Health.down().withDetail("error","spring boot error").build();
        }
    }
    

    这边举了简单的列子,并没有任何有意义的实现,实际开发中我们可以使用心跳检测监测一些外部调用服务的健康状态。

    1. 获取应用程序的定制信息,这些信息由info打头的属性提供
      在配置文件中配置:
    info.hello.name=miaozhihao
    info.hello.password=2312312ewr
    

    配置的信息必须以info开头,只有在配置文件中配置了/info才能监控得到。

    也可以配置一些git信息,配置哪些配置呢?可以看GitInfoContributor中的GitProperties这个类。

    新建git.properties文件,在git.properties中配置:

    git.branch=master
    git.commit.id=23r234wfsadfasfsdfdsf2qerqwrwt
    git.commit.time=20170801
    

    查看url地址,发现可疑监控到git的版本信息。


    源码分析
    spring-boot-actuator-1.5.4.RELEASE.jar这个jar下的org.springframework.boot.actuate.endpoint包下
    org.springframework.boot.actuate.endpoint.BeansEndpoint
    org.springframework.boot.actuate.endpoint.HealthEndpoint
    org.springframework.boot.actuate.endpoint.MetricsEndpoint等等。

    比如说根据源码分析可以设置
    endpoints.beans.enabled=false那么http://localhost:8080/beans就不显示了。

    度量

    对运行时度量情况做一个快照,这对评估应用程序的健康情况很有帮助。actuator提供了一系列的端点,让你能在运行时快速检查应用程序。

    http://localhost:8080/metrics
    

    查看某一项的度量值


    springboot还提供了CounterService类和GaugeService类便于我们去度量。
    CounterService :用来计数的服务,可以直接使用。
    GaugeService :用来统计某个值,可以直接使用。

    @RestController
    public class UserController {
    
        @Autowired
        private CounterService counterService;
    
        @Autowired
        private GaugeService gaugeService;
    
        @GetMapping("/user/index/{id}")
        public String index(@PathVariable int id){
            counterService.increment("user home");
            if(2 == id){
                throw new NullPointerException();
            }
            return "user home";
        }
    
        @GetMapping("/user/price")
        public String getPrice(@RequestParam double price){
            gaugeService.submit("price",price);
            return "user price";
        }
    
    }
    
    http://localhost:8080/user/index/1
    http://localhost:8080/user/index/2
    http://localhost:8080/user/price?price=3423
    

    Metric不仅可以输出到页面,还可以输出到jmx,redis等地方
    通过向spring容器中装配一个MetricWriter来实现定向输出。
    下面的demo就是向jmx实现定向输出,然后进行相关的操作之后就能在jconsole(jvisualvm,jmc)上面看到具体的度量,

    @Configuration
    public class ExportConfiguration {
    
        @Bean
        @ExportMetricWriter
        public MetricWriter metricWriter(MBeanExporter exporter){
            return new JmxMetricWriter(exporter);
        }
    }
    

    然后我们java的安装目录去查看相关工具的监控,

    关于MetricWriter实现类,


    相关文章

      网友评论

        本文标题:springboot actuator

        本文链接:https://www.haomeiwen.com/subject/aigdlxtx.html