笔记 -- Actuator

Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查、审计、统计和HTTP追踪等。所有的这些特性可以通过JMX或者HTTP endpoints来获得。

Actuator同时还可以与外部应用监控系统整合,比如 Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等。这些系统提供了非常好的仪表盘、图标、分析和告警等功能,使得你可以通过统一的接口轻松的监控和管理你的应用。

Endpoints

pom依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
application.properties
management.endpoints.web.exposure.include=*
management.endpoint.integrationgraph.enabled=true 	// 需要单独开启

env

	GET localhost:8080/actuator/env

health

	GET localhost:8080/actuator/health

RedisHealthIndicator (redis 组件)

public class RedisHealthIndicator extends AbstractHealthIndicator {
    static final String VERSION = "version";
    static final String REDIS_VERSION = "redis_version";
    private final RedisConnectionFactory redisConnectionFactory;

    public RedisHealthIndicator(RedisConnectionFactory connectionFactory) {
        super("Redis health check failed");
        Assert.notNull(connectionFactory, "ConnectionFactory must not be null");
        this.redisConnectionFactory = connectionFactory;
    }

    protected void doHealthCheck(Builder builder) throws Exception {
        RedisConnection connection = RedisConnectionUtils.getConnection(this.redisConnectionFactory);

        try {
            if (connection instanceof RedisClusterConnection) {
                ClusterInfo clusterInfo = ((RedisClusterConnection)connection).clusterGetClusterInfo();
                builder.up().withDetail("cluster_size", clusterInfo.getClusterSize()).withDetail("slots_up", clusterInfo.getSlotsOk()).withDetail("slots_fail", clusterInfo.getSlotsFail());
            } else {
                Properties info = connection.info();
                builder.up().withDetail("version", info.getProperty("redis_version"));
            }
        } finally {
            RedisConnectionUtils.releaseConnection(connection, this.redisConnectionFactory);
        }

    }
}

自定义health 组件

	实现AbstractHealthIndicator 接口可以自定义健康检查类

shutdown

	POST 	localhost:8080/actuator/shutdown

loggers

	GET localhost:8080/actuator/loggers/root	 // 查看root目录下的日志级别
	
	POST 	localhost:8080/actuator/loggers/root		// 修改root目录下的日志级别
	{"configuredLevel":"DEBUG"}

Info

	GET localhost:8080/actuator/info

Metrics(监控)

	localhost:8080/actuator/metrics 		// 返回所有监视的名称,比如jvm.gc.max.data.size
	
	localhost:8080/actuator/metrics/jvm.gc.max.data.size		

	监控内容包含:
		JVM(垃圾收集器、内存、堆)
		系统(运行时间、平均负载、处理器的信息)
		线程池信息
		Tomcat会话信息
		……

Actuator两种形态的监控

HTTP
JMX(Java Management Extensions)
application.properties
management.endpoints.jmx.exposure.include=*
#是否展示spring jmx信息
spring.jmx.enabled=true
cmd - jconsole

在这里插入图片描述

自定义JMX
定义接口,后缀 MBean
public interface SystemInfoMBean {

    int getCpuCore();

    long getTotalMemory();

    void shutdown();
}
实现类,命名保持一致
public class SystemInfo implements SystemInfoMBean{
    @Override
    public int getCpuCore() {
        return Runtime.getRuntime().availableProcessors();
    }

    @Override
    public long getTotalMemory() {
        return Runtime.getRuntime().totalMemory();
    }

    @Override
    public void shutdown() {
        System.exit(0);
    }
}
发布一(main 方法发布)
public class JMXMain {
    public static void main(String[] args) throws Exception {
                MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();  // 创建MBeanServer
        ObjectName objectName = new ObjectName("com.example.actuator.jmx:type=SystemInfo");// 新建MBean, 在MBeanServer里标识注册的MBean
        SystemInfo systemInfo = new SystemInfo();// 创建MBean:SystemInfo
        mBeanServer.registerMBean(systemInfo,objectName);// 在MBeanServer里注册MBean, 标识为ObjectName(com.tenpay.jmx:type=Echo)
//        mBeanServer.invoke(objectName, "print", new Object[] { "haitao.tu"}, new String[] {"java.lang.String"});// 在MBeanServer里调用已注册的EchoMBean的print方法
        System.in.read();
}
}
发布二(注册类,参考 SpringApplicationAdminMXBeanRegistrar.class)
@Component
public class GpApplicationMXBeanRegistrar implements ApplicationContextAware,
        EnvironmentAware, InitializingBean, DisposableBean {

    private ConfigurableApplicationContext applicationContext;

    private Environment environment = new StandardEnvironment();

    private final ObjectName objectName=new ObjectName("com.example.actuator.jmx:type=SystemInfo");

    public GpApplicationMXBeanRegistrar() throws MalformedObjectNameException {
    }

	/* 销毁 */
    @Override
    public void destroy() throws Exception {
        ManagementFactory.getPlatformMBeanServer()
        					.unregisterMBean(this.objectName);
    }
    
	/* 注册 */
    @Override
    public void afterPropertiesSet() throws Exception {
         ManagementFactory.getPlatformMBeanServer()
         				.registerMBean(new SystemInfo(), this.objectName);
    }

	/* 获取上下文 */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext=(ConfigurableApplicationContext)applicationContext;
    }

    @Override
    public void setEnvironment(Environment environment) {
        this.environment=environment;
    }
}
可视化系统(prometheus 集成 grafana)
替代jconsole的监控系统:
	数据采集
	时序数据库(time-series) 存储 metrics
	可视化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值