一文搞懂并学会使用SpringBoot的Actuator运行状态监控组件

tech2022-08-09  145

目录

闲言碎语:背景Actuator介绍Rest方法来查看Actuatorpom.xml引入Actuator依赖配置application.yml运行项目 Actuator配合SpringBootSecurity配置application.xml运行项目 配置关闭项目API端口配置application.yml命令行执行post关闭指令 附:Actuator端口信息附:SpringBoot自带的健康指示器赠言

闲言碎语:

  最近刷抖音,看到了星爷的很多电影,感叹星爷给后世留下了很多的经典作品,我就在想,作为一名程序员,如何留下影响后人的经典传世之作呢,不经意间看到了一篇大佬的文章,已经近百万人浏览,这就是对后人的一种影响,然后就有了写这篇博客的冲动,结合最近在学习的SpringCloud,对每一个组件的原理和使用都进行深度的学习和理解,然后将心得写在博客里,如果有不对的地方还请大佬进行指正,小弟不胜感激

背景

  微服务之后,系统结构拆分随着业务发展越来越微型化,也意味着节点会呈现几何数量级增长。每个一个节点都是系统组成部分,如何保持如此多节点的可用性是一件非常有挑战的工作。   全方位监控变得越来越重要,当我们遇到bug时,总是希望可以看到更多信息,因此一般我们选用的服务开发框架都需要有方便又强大的监控功能支持。   Spring Boot Actuator便可以帮助我们全方面监控应用节点.   比如健康检查、审计、统计、HTTP追踪等。我们可以通过JMX或者HTTP endpoints来获得。spring Boot Admin配合下可以进行页面展示,也和可以与其它外部应用系统系统整合。

Actuator介绍

  Actuator是SpringBoot的一个非常重要的功能,Actuator 为开发人员提供了SpringBoot运行状态信息,通过Actuator可以查看程序的运行状态的信息。同时它提供了运行状态的监控功能,Actuator的监控功能可以通过Rest、远程shell、JMX方式获得,首先我们介绍Rest方法来查看Actuator的节点方法,这种是十分简单的方法。   Spring Boot Actuator 的关键特性是在应用程序里提供众多的Web节点,通过这些节点可以实时地了解应用程序的运行状况。有了Actuator,你可以知道Bean在Spring应用程序上下文里是如何组装在一 起的,并且可以获取环境属性的信息和运行时度量信息等。

Rest方法来查看Actuator

pom.xml引入Actuator依赖

首先在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

  在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: true

  management.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配合SpringBootSecurity

  actuator可以配合security进行权限控制,从而保护endpint。   首先在pom.xml中引入SpringBootSecurity依赖:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
配置application.xml

  添加: 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端口信息。

配置关闭项目API端口

配置application.yml

  在endpoint后配置shutdown端口为true,默认情况下系统是关闭该端口,防止他人的恶意关闭项目,是出于对系统的一种保护行为。

endpoint: health: enabled: true show-details: always shutdown: enabled: true

注意:在这里我们利用cmd窗口以命令行的形式来模拟post请求,如果在浏览器直接请求的话会报错,后台会提示 Request method ‘GET’ not supported。也就是说不支持get请求,我们需要用post。

命令行执行post关闭指令

  在命令行中输入: $ curl -X POST localhost:9091/actuator/shutdown   然后命令行提示: {“message”:“Shutting down, bye…”}   项目就处于关闭状态了!

附:Actuator端口信息

类型Api端口描述getauditevents显示应用暴露的审计事件 (比如认证进入、订单失败)getinfo显示应用的基本信息gethealth显示应用的健康状态getmetrics显示应用多样的度量信息getloggers显示和修改配置的loggersgetlogfile返回log file中的内容(如果logging.file或者logging.path被设置)gethttptrace显示Liquibase 数据库迁移的纤细信息getenv显示当前的环境特性getflyway显示数据库迁移路径的详细信息getliquidbase显示数据库迁移路径的详细信息postshutdown让你逐步关闭应用getmappings显示所有的@RequestMapping路径getscheduledtasks显示应用中的调度任务getthreaddump执行一个线程dumpgetheapdump返回一个GZip压缩的JVM堆dump

附:SpringBoot自带的健康指示器

指示器键内容ApplicationHealthIndicatornone永远为UPDataSourceHealthIndicatordb如果数据库能连上,则为up,否则为downDiskSpaceHealthIndicatordiskSpace如果可用空间大于阈值,则为up和可用磁盘空间,如果空间不足,则为downJmsHealthIndicatorjms如果能连上消息代理,则为up,否则为downMailHealthIndicatormail如果能连上邮件服务器,则为up和邮件主机和端口,否则为downMangoHealthIndicatormongo如果能连上MangoDB服务器,则为up和MongoDB服务器版本,否则为downRabbitHealthIndicatorrabbit如果能连上RabbitMQ服务器,则为up和MongoDB服务器版本,否则为downRedisHealthIndicatorredis如果能连上Redis服务器,则为up和服务器版本,否则为downSolrHealthIndicatorsolr如果能连上Solr服务器,则为up和服务器版本,否则为down

赠言

  不知不觉,00:08分了,用了两个多小时整理,连学带用,以后在遇到就更快的上手了,寒江孤影,江湖路人,点个赞吧!

这里是一个真诚的***青年技术交流QQ群:860334871***,不管你是大学生、社畜、想学习变成的其他人员,欢迎大家加入我们,一起成长,一起进步,真诚的欢迎你,不管是技术,还是人生,还是学习方法。有道无术,术亦可求,有术无道,止于术。

最新回复(0)