• SpringBoot之旅 -- SpringBoot 项目健康检查与监控


    相关文章

    Spring Boot 相关文章目录

    前言

    You build it,You run it, 当我们编写的项目上线后,为了能第一时间知晓该项目是否出现问题,常常对项目进行健康检查及一些指标进行监控。
    Spring Boot-Actuator 就是帮助我们监控我们的Spring Boot 项目的。

    使用

    Spring Boot 最主要的特性就是AutoConfig(自动配置),而对于我们这些使用者来说也就是各种starter,
    Spring Boot-Actuator 也提供了starter,为我们自动配置,在使用上我们只需要添加starter到我们的依赖中,然后启动项目即可。

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

    常用Endpoint

    Spring Boot-actuator,提供了许多有用的EndPoint,对Spring Boot应用提供各种监控,下面说一下我常用的EndPoint:

    /health 应用的健康状态
    /configprops 获取应用的配置信息,因为Spring Boot 可能发布时是单独的Jar包,配置文件可能包含其中, 当我们需要检查配置文件时可以使用 ConfigpropsEndPoint 进行查看一些配置是否正确。
    /trace 最近几次的http请求信息

    HealthEndPoint

    当我们访问 http://localhost:8088/health 时,可以看到 HealthEndPoint 给我们提供默认的监控结果,包含 磁盘检测和数据库检测。

    {
        "status": "UP",
        "diskSpace": {
            "status": "UP",
            "total": 398458875904,
            "free": 315106918400,
            "threshold": 10485760
        },
        "db": {
            "status": "UP",
            "database": "MySQL",
            "hello": 1
        }
    }
    

    其实看 Spring Boot-actuator 源码,你会发现 HealthEndPoint 提供的信息不仅限于此,org.springframework.boot.actuate.health 包下 你会发现 ElasticsearchHealthIndicator、RedisHealthIndicator、RabbitHealthIndicator 等
    也就是 HealthEndPoint 也提供 ES, Redis 等组件的健康信息。

    自定义Indicator 扩展 HealthEndPoint

    看源码 其实 磁盘和数据库健康信息就是 DiskSpaceHealthIndicator、DataSourceHealthIndicator 来实现的,当我们对一些我们自定义的组件进行监控时, 我们也可以实现个Indicator :

    @Component
    public class User implements HealthIndicator {
        /**
         * user监控 访问: http://localhost:8088/health
         *
         * @return 自定义Health监控
         */
        @Override
        public Health health() {
    
            return new Health.Builder().withDetail("usercount", 10) //自定义监控内容
                    .withDetail("userstatus", "up").up().build();
        }
    }
    
    

    这时我们再次访问: http://localhost:8088/health 这时返回的结果如下,包含了我们自定义的 User 健康信息。

    {
        "status": "UP",
        "user": {
            "status": "UP",
            "usercount": 10,
            "userstatus": "up"
        },
        "diskSpace": {
            "status": "UP",
            "total": 398458875904,
            "free": 315097989120,
            "threshold": 10485760
        },
        "db": {
            "status": "UP",
            "database": "MySQL",
            "hello": 1
        }
    }
    

    自定义EndPoint

    其实除了扩展 HealthEndPoint 来添加一些健康检查, 我们也可以自定定义一些EndPoint 来提供程序运行时一些信息的展示:

    @Configuration
    public class EndPointAutoConfig {
        @Bean
        public Endpoint<Map<String, Object>> customEndPoint() {
            return new SystemEndPoint();
        }
    }
    
    
    @ConfigurationProperties(prefix="endpoints.customsystem")
    public class SystemEndPoint extends AbstractEndpoint<Map<String, Object>> {
    
        public SystemEndPoint(){
            super("customsystem");
        }
        @Override
        public Map<String, Object> invoke() {
            Map<String,Object> result= new HashMap<>();
            Map<String, String> map = System.getenv();
            result.put("username",map.get("USERNAME"));
            result.put("computername",map.get("COMPUTERNAME"));
            result.put("userdomain",map.get("USERDOMAIN"));
            return result;
        }
    }
    
    

    访问 http://localhost:8088/customsystem 来查看我们自定义的EndPoint ,返回结果如下:

    
    {
        "username": "xxx",
        "userdomain": "DESKTOP-6EAN1H4",
        "computername": "DESKTOP-6EAN1H4"
    }
    
    
  • 相关阅读:
    linux常用命令
    PHP 魔术方法浅谈
    PHP常用的设计模式
    浅谈Restful
    进程,线程与协程的区别
    http与https的
    get与post的区别
    php连接数据库的两种方式
    DRF框架基本组件之过滤,搜索,排序
    DRF-JWT用户认证
  • 原文地址:https://www.cnblogs.com/javanoob/p/springboot_healthcheck.html
Copyright © 2020-2023  润新知