当前位置:   article > 正文

应用监控_endpoints.enabled

endpoints.enabled

简介

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

Endpoints

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

敏感信息访问限制

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

endpoints.mappings.sensitive=false
  • 1

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

management.security.enabled=false
  • 1

http

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

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
  • 1
  • 2
  • 3
  • 4

测试端点:

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

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

endpoints.shutdown.enabled=true
  • 1

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

定制端点

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

endpoints.beans.id=mybeans
  • 1

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

endpoints.shutdown.enabled=true
  • 1

3:关闭端点

endpoints.beans.enabled=false
  • 1

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

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

5:定制端点访问路径

management.context-path=/manage
  • 1

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

management.port=8081
  • 1

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

management.port=-1
  • 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;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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;
		
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

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";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

访问: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(); //其余情况运行成功
	}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

运行测试:
访问: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实战
以上只是学习所做的笔记,以供日后参考!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/262984
推荐阅读
相关标签
  

闽ICP备14008679号