SpringBoot

SpringBoot 开发实用篇

文章目录

  • SpringBoot
  • SpringBoot 开发实用篇
  • 6 监控
  • 6.5 health 端点指标控制
  • 6.5.1 问题引入
  • 6.5.2 health 端点指标控制
  • 6.5.3 小结


6 监控

6.5 health 端点指标控制
6.5.1 问题引入

之前我们通过配置文件以及配置类完成了info 端点的信息自定义设置

spring boot 健康检查漏洞 springboot health_spring boot 健康检查漏洞

问题来了,那旁边的健康指标可以自定义吗?

spring boot 健康检查漏洞 springboot health_后端_02

6.5.2 health 端点指标控制

试试看能不能控制health 端点

spring boot 健康检查漏洞 springboot health_spring boot_03

直接重新启动服务器

查看面板

spring boot 健康检查漏洞 springboot health_后端_04

可以看到,其实没有任何变化

health 代表的是一个应用中的状态信息

类似上面的图中,db:数据库信息、diskSpace:磁盘信息、ping:能不能ping 通

给它加一个小技术

spring boot 健康检查漏洞 springboot health_spring_05

再次重启服务器,重新查看面板

spring boot 健康检查漏洞 springboot health_spring boot 健康检查漏洞_06

上来了【如果我把redis 服务直接停掉】

spring boot 健康检查漏洞 springboot health_spring boot 健康检查漏洞_07

重启应用

spring boot 健康检查漏洞 springboot health_spring_08

可以看到,效果很明显,服务直接down 掉了

而且这些错误信息和控制台输出的信息是一致的

spring boot 健康检查漏洞 springboot health_spring_09

spring boot 健康检查漏洞 springboot health_spring boot 健康检查漏洞_10

一个down,直接导致我们的整个应用都down 掉了

再把redis 开启

spring boot 健康检查漏洞 springboot health_后端_11

刷新面板

spring boot 健康检查漏洞 springboot health_java_12

不用重启,应用自动连接上去了

【自定义健康指标】

package com.dingjiaxiong.actuator;

import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * ClassName: HealthConfig
 * date: 2022/10/24 9:26
 *
 * @author DingJiaxiong
 */

@Component
public class HealthConfig extends AbstractHealthIndicator {

    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        builder.withDetail("runTime",System.currentTimeMillis());

        Map infoMap = new HashMap();
        infoMap.put("buildTime","2022");
        builder.withDetails(infoMap);
    }
}

重启应用,查看面板

spring boot 健康检查漏洞 springboot health_后端_13

可以看到信息,确实上去了,这个状态自己能设定吗【答案是当然的】

spring boot 健康检查漏洞 springboot health_后端_14

再次重启服务,查看面板

spring boot 健康检查漏洞 springboot health_后端_15

这样就up 了

这样的话我们就可以很容易加上一个条件判断

package com.dingjiaxiong.actuator;

import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * ClassName: HealthConfig
 * date: 2022/10/24 9:26
 *
 * @author DingJiaxiong
 */

@Component
public class HealthConfig extends AbstractHealthIndicator {

    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        
        boolean condition = false;
        if (condition){
            builder.withDetail("runTime",System.currentTimeMillis());
            Map infoMap = new HashMap();
            infoMap.put("buildTime","2022");
            builder.withDetails(infoMap);
            builder.up();
        }
        else{
            builder.withDetail("上线了吗?","没有");
            builder.down();
        }
        
    }
}

重启应用,查看面板

spring boot 健康检查漏洞 springboot health_java_16

当然直接调用up() 和down 方法不太规范,标准的写法应该是下面这样

spring boot 健康检查漏洞 springboot health_后端_17

关键健康指标的简单介绍差不多就是这样 了

回顾一下

为Health端点添加自定义指标

spring boot 健康检查漏洞 springboot health_spring boot_18

6.5.3 小结
  1. 自定义Health端点信息