SpringCloud架构:2-Springboot的Actuator监控自定义健康信息的两种方式

769 阅读1分钟

2.Springboot的Actuator监控自定义健康信息的两种方式

SpringCloud架构系列:github地址:github.com/hellozhaoxu…

/health 端点

该端点用于展示应用的健康信息,里面展示了很多健康信息,例如数据库连接、磁盘信息等等。
这些信息从ApplicationContext中的各种HealthIndicator Beans中收集到的,Spring boot框架中包含了大量的HealthIndicators的实现类。
我们要自定义健康信息,一种方式是实现HealthIndicators,第二种方式是继承 AbstractHealthIndicator 抽象类。

(1) 实现HealthIndicator接口

实现HealthIndicator接口
package com.springcloud.merge.healthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;

@Component
public class AppHealth1 implements HealthIndicator {

    @Override
    public Health health() {
        return null;
    }
}
实现健康信息返回逻辑
package com.springcloud.merge.healthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;

import java.util.Random;

@Component
public class AppHealth1implements HealthIndicator {

    @Override
    public Health health() {
        int result = checkHealth();

        if(result < 5){
            // 返回自定义健康信息
            return Health.up().withDetail("healthCount", result).withDetail("app-actuator", "up")
                                .withDetail("message", "服务正常").build();
        }

        return Health.down().withDetail("healthCount", result).withDetail("app-actuator", "down")
                .withDetail("message", "服务故障").build();
    }


    /**
     * checkHealth : 返回0-9任意
     *
     * @author hellozhaoxudong@163.com
     * @date 2019/8/11 11:11
     * @param
     * @return int
     */
    private int checkHealth(){
        Random rand = new Random ();
        return rand.nextInt(10);
    }
}
启动,去/health 端点查看自定义的健康信息

在这里插入图片描述

(2) 继承 AbstractHealthIndicator 类

继承 AbstractHealthIndicator 类,创建一个检测器类
package com.springcloud.merge.healthIndicator;
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;

public class AppHealth2 extends AbstractHealthIndicator{

    // 重写检查健康信息逻辑
    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {

    }
}
重写检查健康信息逻辑
package com.springcloud.merge.healthIndicator;
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Component;
import java.util.Random;

@Component
public class AppHealth2 extends AbstractHealthIndicator{

    // 重写检查健康信息逻辑
    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        int result = checkHealth();

        // 自定义健康信息
        if(result < 5){
            builder.up();
            builder.withDetail("app-actuator", "up").withDetail("message", "服务正常");
        }else{
            builder.down();
            builder.withDetail("app-actuator", "down").withDetail("message", "服务故障");
        }

        builder.withDetail("healthCount", result);
    }

    /**
     * checkHealth : 返回0-9任意
     *
     * @author hellozhaoxudong@163.com
     * @date 2019/8/11 11:11
     * @param
     * @return int
     */
    private int checkHealth(){
        Random rand = new Random ();
        return rand.nextInt(10);
    }
}
启动,去/health 端点查看自定义的健康信息

在这里插入图片描述