应用监控

简介

Spring Boot提供了运行时的应用监控和管理的功能。我们可以通过http、JMX、SSH协议来进行操作。审计、健康及指标信息将会自动得到。

Endpoints

列举一些主要的endpoints :
这里写图片描述

敏感信息访问限制

根据上面表格,鉴权为false的,表示不敏感,可以随意访问,否则就是做了一些保护,不能随意访问。

endpoints.mappings.sensitive=false

这样需要对每一个都设置,比较麻烦。敏感方法默认是需要用户拥有ACTUATOR角色,因此,也可以设置关闭安全限制:

management.security.enabled=false

http

我们可以通过http实现对应用的监控和管理,在pom.xml中增加下面依赖:

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>

测试端点:

这里写图片描述
其他的端点大家自己测试吧!!

shutdown
shutdown端点默认是关闭的,我们可以在application.properties中开启:

endpoints.shutdown.enabled=true

shutdown端点不支持GET提交,用POST方式访问http://localhost:8080/shutdown;
这里写图片描述
控制台效果:
这里写图片描述

定制端点

定制端点一般通过endpoints+端点名+属性名来设置,每段之间用.隔开。
1:修改端点

endpoints.beans.id=mybeans

此时访问地址变为http://localhost:8080/mybeans;
2:开启端点

endpoints.shutdown.enabled=true

3:关闭端点

endpoints.beans.enabled=false

关闭端点后访问404:
这里写图片描述
4:只开启所需端点
若只开启所需端点的话,我们可以通过关闭所有的端点,然后再开启所需端点来实现:

endpoints.enabled=false
endpoints.beans.enabled=true   //只开启beans端点,访问其它端点皆为404

5:定制端点访问路径

management.context-path=/manage

此时访问路径就为:http://localhost:8080/manage/env;
6:定制端点访问端口
当我们基于安全的考虑,不暴露端点的端口到外部时,就需要应用本身的业务端口和端点所用的端口使用不同的端口:

management.port=8081

此时访问路径就为:http://localhost:8081/env;
7:关闭http端点

management.port=-1

此时访问所有端点皆为404;

自定义端点

当Spring Boot提供的端点不能满足我们特殊的需求,而我们又需要对特殊的应用状态进行监控的时候,就需要自定义一个端点:
StatusService.java

@Service
public class StatusService {  //此类无任何特别,仅为改变status的值
	
	private String status;

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}
}

StatusEndPoint.java

//通过@ConfigurationProperties的设置,我们可以在application.properties中通过endpoints.status配置我们的端点
@ConfigurationProperties(prefix = "endpoints.status", ignoreUnknownFields = false)
//继承AbstractEndpoint类,它是Endpoint接口的抽象实现,当前类一定要重写invoke方法
public class StatusEndPoint extends AbstractEndpoint<String> implements ApplicationContextAware{
	//实现ApplicationContextAware接口可以让当前类对Spring容器的资源有意识,即可访问容器的资源
	ApplicationContext context;

	public StatusEndPoint() {
		super("status");
	}

	@Override
	public String invoke() { //重写invoke方法,返回我们要监控的内容
		StatusService statusService = context.getBean(StatusService.class);
		
		return "The Current Status  is :"+statusService.getStatus();
	}

	@Override
	public void setApplicationContext(ApplicationContext arg0) throws BeansException {
		this.context = arg0;
		
	}
}

DemoApplication.java

@SpringBootApplication
@RestController
public class DemoApplication {
	@Autowired
	StatusService statusService;

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
    
    //注册端点的Bean
    @Bean
    public Endpoint<String> status() {
    	Endpoint<String> status =  new StatusEndPoint();
    	return status;
    }
    //改变status的状态
    @RequestMapping("/change")
    public String changeStatus(String status){
    	statusService.setStatus(status);
    	return "OK";
    }
}

访问:http://localhost:8080/status
这里写图片描述
访问:http://localhost:8080/change?status=running,改变status的值:
这里写图片描述
再次访问:http://localhost:8080/status
这里写图片描述

自定义HealthIndicator

Health 信息是从 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring Boot 内置了一些 HealthIndicator。
这里写图片描述
定制自己的HealthIndicator只需要一个实现HealthIndicator接口的类,并注册为Bean即可:
StatusHealth.java

@Component
public class StatusHealth implements HealthIndicator {//实现HealthIndicator接口,并重写health方法
	@Autowired
	StatusService statusService;

	@Override
	public Health health() {
		String status = statusService.getStatus();
		if(status == null||!status.equals("running")){
			return Health.down().withDetail("Error", "Not Running").build(); //当status的值为非running时构造失败
		}
		return Health.up().build(); //其余情况运行成功
	}

}

运行测试:
访问:http://localhost:8080/health
这里写图片描述
修改status的值为running,访问:http://localhost:8080/change?status=running
这里写图片描述
再次访问:http://localhost:8080/health
这里写图片描述

JMX

我们也可以通过JMX对应用进行监控和管理;
在控制台调用java内置的jconsole来实现JMX监控:
这里写图片描述
打开jconsole页面,选择当前程序的进程:
这里写图片描述
监控内存、线程、CPU占用率等:
这里写图片描述
在MBean标签的org.springframework.boot域下可对我们的程序进行监控和管理:
这里写图片描述

参考书籍:Spring Boot实战
以上只是学习所做的笔记,以供日后参考!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值