场景
假设一个SpringBoot项目开发完毕部署到生产环境中,刚好出现线上问题,而运维希望能提供一些工具
帮助定位问题。
再假设应用部署成功,但是发现运行方式与预期不一致,通过查看日志,发现加载的Bean自动配置有误,
在生产环境中没法直接调试,用什么办法来解决问题。
SpringBoot提供了Actuator来支持这类需求。
若依前后端分离版手把手教你本地搭建环境并运行项目:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662
在上面的基础上搭建起来项目。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
1、添加Actuator依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
2、修改application.yml,修改端口号为9999(如果有必要,默认是8080)
#Actuator配置 management: server: #配置端口 port: 9999
3、启动项目访问
http://localhost:9999/actuator/
默认只开启这几个端点。
如果在若依框架中访问时提示无法访问,需要放开鉴权
4、配置开启全部端点
#Actuator配置 management: server: #配置端口 port: 9999 #开放endpoints endpoints: web: exposure: #开放所有 include: '*'
此时再访问
5、端点明细
HTTP 方法 路径 描述
GET /auditevents 显示应用暴露的审计事件 (比如认证进入、订单失败)
GET /beans 描述应用程序上下文里全部的 Bean,以及它们的关系
GET /conditions 就是 1.0 的 /autoconfig
,提供一份自动配置生效的条件情况,记录哪些自动配置条件通过了,哪些没通过
GET /configprops 描述配置属性(包含默认值)如何注入Bean
GET /env 获取全部环境属性
GET /env/{name} 根据名称获取特定的环境属性值
GET /flyway 提供一份 Flyway 数据库迁移信息
GET /liquidbase 显示Liquibase 数据库迁移的纤细信息
GET /health 报告应用程序的健康指标,这些值由 HealthIndicator 的实现类提供
GET /heapdump dump 一份应用的 JVM 堆信息
GET /httptrace 显示HTTP足迹,最近100个HTTP request/repsponse
GET /info 获取应用程序的定制信息,这些信息由info打头的属性提供
GET /logfile 返回log file中的内容(如果 logging.file 或者 logging.path
被设置)
GET /loggers 显示和修改配置的loggers
GET /metrics 报告各种应用程序度量信息,比如内存用量和HTTP请求计数
GET /metrics/{name} 报告指定名称的应用程序度量值
GET /scheduledtasks 展示应用中的定时任务信息
GET /sessions 如果我们使用了 Spring Session 展示应用中的 HTTP sessions
信息
POST /shutdown 关闭应用程序,要求endpoints.shutdown.enabled设置为true
GET /mappings 描述全部的 URI路径,以及它们和控制器(包含Actuator端点)的映射关系
GET /threaddump 获取线程活动的快照
6、访问其中一个端点url
http://localhost:9999/actuator/health
这表示当前Spring容器运行正常。
如果要看health端点的详细信息,需要配置
#Actuator配置 management: server: #配置端口 port: 9999 #开放endpoints endpoints: web: exposure: #开放所有 include: '*' #查看详细的健康信息 endpoint: health: show-details: always
7、同时还支持接口优雅关闭,默认是关闭的,需要配置开启
#Actuator配置 management: server: #配置端口 port: 9999 #开放endpoints endpoints: web: exposure: #开放所有 include: '*' #查看详细的健康信息 endpoint: health: show-details: always #开启接口优雅关闭 shutdown: enabled: true
然后使用POST请求方式访问接口