app开发者平台在数字化时代的重要性与发展趋势解析
1032
2023-04-18
一文搞懂并学会使用SpringBoot的Actuator运行状态监控组件的详细教程
目录闲言碎语:背景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依赖,代码如下:
配置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中引入SpringBootSecurithttp://y依赖:
配置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端口
描述
get
auditevents
显示应用暴露的审计事件 (比如认证进入、订单失败)
get
info
显示应用的基本信息
get
health
显示应用的健康状态
get
metrics
显示应用多样的度量信息
get
loggers
显示和修改配置的loggers
get
logfile
返回log file中的内容(如果logging.file或者logging.path被设置)
get
httptrace
显示Liquibase 数据库迁移的纤细信息
get
env
显示当前的环境特性
get
flyway
显示数据库迁移路径的详细信息
get
liquidbase
显示数据库迁移路径的详细信息
post
shutdown
让你逐步关闭应用
get
mappings
显示所有的@RequestMapping路径
get
scheduledtasks
显示应用中的调度任务
get
threaddump
执行一个线程dump
get
heapdump
返回一个GZip压缩的JVM堆dump
附:SpringBoot自带的健康指示器
指示器
键
内容
ApplicationHealthIndicator
none
永远为UP
DataSourceHealthIndicator
db
如果数据库能连上,则为up,否则为down
DiskSpaceHealthIndicator
diskSpace
如果可用空间大于阈值,则为up和可用磁盘空间,如果空间不足,则为down
JmsHealthIndicator
jms
如果能连上消息代理,则为up,否则为down
MailHealthIndicator
如果能连上邮件服务器,则为up和邮件主机和端口,否则为down
MangoHealthIndicator
mongo
如果能连上MangoDB服务器,则为up和MongoDB服务器版本,否则为down
RabbitHealthIndicator
rabbit
如果能连上RabbitMQ服务器,则为up和MongoDB服务器版本,否则为down
RedisHealthIndicator
redis
如果能连上Redis服务器,则为up和服务器版本,否则为down
SolrHealthIndicator
solr
如果能连上Solr服务器,则为up和服务器版本,否则为down
总结
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~