笔记 -- 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
    评论
好的,我可以和你分享一些关于Spring Boot的学习笔记。 1. Spring Boot是什么? Spring Boot是一个基于Spring框架的快速开发框架,它能够帮助开发者快速搭建Spring项目,简化了Spring应用开发的繁琐过程,提高了开发效率。 2. Spring Boot的优点有哪些? Spring Boot的优点有很多,其中包括: - 简化了Spring应用的开发,提高了开发效率; - 集成了很多常用的第三方库,减少了依赖管理的工作; - 自动化配置,减少了配置文件的编写工作; - 内嵌了Tomcat等Web容器,使得应用的部署更加便捷; - 提供了Actuator等模块,使得应用的监控和管理更加便捷。 3. Spring Boot的核心注解有哪些? Spring Boot的核心注解包括: - @SpringBootApplication:标注在启动类上,代表这是一个Spring Boot应用; - @Controller:标注在控制器类上,处理HTTP请求; - @Service:标注在服务类上,用于处理业务逻辑; - @Repository:标注在数据访问类上,用于数据库访问; - @Configuration:标注在配置类上,用于配置Spring应用上下文。 4. Spring Boot的配置文件有哪些? Spring Boot的配置文件包括: - application.properties:基于Key-Value的属性文件; - application.yml:基于YAML语法的配置文件。 5. 如何使用Spring Boot集成数据库? 使用Spring Boot集成数据库需要完成以下几个步骤: - 在pom.xml中添加相关数据库依赖; - 配置数据源和JPA/Hibernate等相关配置; - 编写实体类和DAO层代码。 以上就是一些关于Spring Boot的学习笔记,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值