最近刷抖音,看到了星爷的很多电影,感叹星爷给后世留下了很多的经典作品,我就在想,作为一名程序员,如何留下影响后人的经典传世之作呢,不经意间看到了一篇大佬的文章,已经近百万人浏览,这就是对后人的一种影响,然后就有了写这篇博客的冲动,结合最近在学习的SpringCloud,对每一个组件的原理和使用都进行深度的学习和理解,然后将心得写在博客里,如果有不对的地方还请大佬进行指正,小弟不胜感激
微服务之后,系统结构拆分随着业务发展越来越微型化,也意味着节点会呈现几何数量级增长。每个一个节点都是系统组成部分,如何保持如此多节点的可用性是一件非常有挑战的工作。 全方位监控变得越来越重要,当我们遇到bug时,总是希望可以看到更多信息,因此一般我们选用的服务开发框架都需要有方便又强大的监控功能支持。 Spring Boot Actuator便可以帮助我们全方面监控应用节点. 比如健康检查、审计、统计、HTTP追踪等。我们可以通过JMX或者HTTP endpoints来获得。spring Boot Admin配合下可以进行页面展示,也和可以与其它外部应用系统系统整合。
Actuator是SpringBoot的一个非常重要的功能,Actuator 为开发人员提供了SpringBoot运行状态信息,通过Actuator可以查看程序的运行状态的信息。同时它提供了运行状态的监控功能,Actuator的监控功能可以通过Rest、远程shell、JMX方式获得,首先我们介绍Rest方法来查看Actuator的节点方法,这种是十分简单的方法。 Spring Boot Actuator 的关键特性是在应用程序里提供众多的Web节点,通过这些节点可以实时地了解应用程序的运行状况。有了Actuator,你可以知道Bean在Spring应用程序上下文里是如何组装在一 起的,并且可以获取环境属性的信息和运行时度量信息等。
首先在pom.xml种引入spring-boot-starter-actuator依赖,代码如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <version>2.3.3.RELEASE</version> </dependency>在application.yml中配置management.port和management.security.enabled,这俩是向外暴露actuator的端口和actuator的非安全验证方式。 在这里指定actuator对外暴露的RestApi端口为9091,Spring1.5x默认采用了Actuator安全验证,为了能够在浏览器上展示效果,不做安全验证,将其设置为false。
management: server: port: 9091 # 对外暴露API接口端口为9001 servlet: context-path: /sys security: enabled: false # 这是为了在浏览器上展示效果 所以设置为false endpoints: web: exposure: include: "*" # include表示需要暴露的endpoint,配置时使用“,”隔开,你也可以用*让所有endpoint暴露出来 endpoint: health: enabled: true show-details: always # health endpoint只展示了简单的UP和DOWN状态。为了获得健康检查中所有指标的详细信息,可以设置其展示详细信息。 shutdown: enabled: truemanagement.endpoint.health.show-details的默认值为never,除了always之外还有when-authorized。 exclude表示在暴露endpoint时,排除掉哪些,同样使用“,”隔开,例如 management.endpoints.web.exposure.exclude=info # 排除info
注意:如果不指定会默认采用程序的启动端口,这样做的目的就是将监控端口与项目端口进行区分。 不配置监控端口:localhost:8080/actuator/ 配置监控端口:localhost:9091/sys/actuator/ 特别注意:在2.0之后的版本访问地址必须要加上/actuator/才可以
就可以看到详细的信息了,以health为例:
请求路径:http://localhost:9091/sys/actuator/health { status: "UP", components: { diskSpace: { status: "UP", details: { total: 161062318080, free: 103786217472, threshold: 10485760, exists: true } }, ping: { status: "UP" } } }actuator可以配合security进行权限控制,从而保护endpint。 首先在pom.xml中引入SpringBootSecurity依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>添加: spring.security.user.name = admin spring.security.user.password = admin 这样在我们访问localhost:9091/sys/actuator/的时候就会自动跳转到安全登录页面,提示我们输入用户名和密码。
security: user: name: admin password: admin我们的请求路径由http://localhost:9091/sys/actuator/自动变成了http://localhost:9091/sys/login,输入配置好的用户名和密码,就可以看到对应的各种Api端口信息。
在endpoint后配置shutdown端口为true,默认情况下系统是关闭该端口,防止他人的恶意关闭项目,是出于对系统的一种保护行为。
endpoint: health: enabled: true show-details: always shutdown: enabled: true注意:在这里我们利用cmd窗口以命令行的形式来模拟post请求,如果在浏览器直接请求的话会报错,后台会提示 Request method ‘GET’ not supported。也就是说不支持get请求,我们需要用post。
在命令行中输入: $ curl -X POST localhost:9091/actuator/shutdown 然后命令行提示: {“message”:“Shutting down, bye…”} 项目就处于关闭状态了!
不知不觉,00:08分了,用了两个多小时整理,连学带用,以后在遇到就更快的上手了,寒江孤影,江湖路人,点个赞吧!
这里是一个真诚的***青年技术交流QQ群:860334871***,不管你是大学生、社畜、想学习变成的其他人员,欢迎大家加入我们,一起成长,一起进步,真诚的欢迎你,不管是技术,还是人生,还是学习方法。有道无术,术亦可求,有术无道,止于术。