zoukankan      html  css  js  c++  java
  • SpringBoot 项目健康检查与监控(转)

    前言

    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"
    }

    转自:https://www.cnblogs.com/javanoob/p/springboot_healthcheck.html

  • 相关阅读:
    Visual Studio 2015 密钥
    Vue-next源码新鲜出炉一
    vue2.0基础整理
    Nest
    Nest
    Nest
    Nest
    Nest快速上手
    element-plus源码分析第一节
    获取视频第一帧,作为封面图
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/8426242.html
Copyright © 2011-2022 走看看