当一个SpringBoot项目在运行的时候,我们可能需要对这个项目进行实时监控,从而得知项目的运行情况。
SpringBoot提供了actuator获取程序实时运行数据,开发者可以使用HTTP或JMX管理和监控应用程序。其中包括应用程序的健康状态、应用信息和内存使用状况。
开启端点
1、在工程中引用依赖 spring-boot-starter-actuato
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2、默认端点介绍
我们可以使用执行器(actuator)中的端点(EndPints)对应用进行监控或者应用进行交互,SpringBoot默认包含以下端点:
端点 | 端点详细描述 | 是否默认开启 |
auditevents | 显示当前应用程序的审计事件信息 | YES |
beans | 显示应用Spring Beans的完整列表,即获取应用上下文中创建的所有的Bean | YES |
caches | 显示可用缓存信息 | YES |
conditions | 显示自动配置类的状态及应用信息 | YES |
configprops | 显示所有@ConfigurationProperties列表,即获取应用中配置的所有属性的信息报告 | YES |
env | 显示ConfigurableEnvironment中的属性,它用来获取应用所有可用的环境属性报告。包括环境变量、JVM属性、应用的配置属性、命令行中 参数。 | YES |
flyway | 显示flyway数据库迁移信息 | YES |
health | 显示应用的健康信息(未认证是现实status,认证显示全部信息详情) | YES |
loggers | 展示并修改应用的日志配置 | YES |
info | 显示任意的应用信息(在资源文件写info.xxx文件即可) | YES |
liquibase | 展示Liquibase数据库迁移 | YES |
metrics | 展示当前应用的metrics信息,返回当前应用端点各类重要的度量指标,比如内存信息、线程信息、垃圾回收信息等 | YES |
mappings | 显示所有@RequestMapping路径集列表,即返回所有Spring MVC控制器映射关系报告 | YES |
scheduledtasks | 显示应用中的计划任务 | YES |
sessions | 允许Spring会话支持的会话存储中检索和删除用户会话 | YES |
shutdown | 允许以优雅的方式关闭(默认情况下不开启) | NO |
threaddump | 执行一个线程dump | YES |
httptrace | 显示HTTP跟踪信息(默认显示最后100个HTTP 请求-相应交换) |
3、如果是WEB应用,还有以下端点:
端点 | 端点描述 | 是否默认开启 |
heapdump | 返回一个GZIP压缩的hprof堆转储文件 | YES |
jolokia | 展示通过HTTP暴露的JMX beans | YES |
logfile | 返回日志文件 | YES |
prometheus | 展示一个可以被Prometheus服务抓取的metrics数据 | YES |
开启、关闭端点
1、其中shutdown端点默认未开启,如果要开启,在工程下application.properties中配置开启
management:
endpoint:
shutdown:
enabled: true
2、如果不想暴露那么多端点,可以关闭默认的配置,然后手动指定需要开启哪些端点。如下关闭所有端点,只开启info端点:
management:
endpoints:
enabled-by-default: false # 关闭所有端点
endpoint:
info:
enabled: true # 开启info端点
暴露端点
1、端点暴露情况(默认)
有些端点包含敏感信息,所以开启和暴露是两回事,下面是默认暴露情况:
端点 | JMX | WEB |
auditevents | YES | NO |
beans | YES | NO |
caches | YES | NO |
conditions | YES | NO |
configprops | YES | NO |
env | YES | NO |
flyway | YES | NO |
health | YES | YES |
heapdump | N/A | NO |
httptrace | YES | NO |
info | YES | YES |
integrationgraph | YES | NO |
jolokia | N/A | NO |
logfile | N/A | NO |
loggers | YES | NO |
liquibase | YES | NO |
metrics | YES | NO |
mappings | YES | NO |
prometheus | N/A | NO |
scheduledtasks | YES | NO |
sessions | YES | NO |
shutdown | YES | NO |
threaddump | YES | NO |
在WEB应用中,默认只有health和info两个端点暴露,在项目中,只有该两个端点可以访问。
自定义暴露端点
1、我们可以在application.yml中自定义暴露哪些端点,例如暴露mapping和metrics端点,添加以下配置:
management:
endpoints:
web:
exposure:
include: mappings,metrics
结果如下:
2、暴露所有端点如下配置
management:
endpoints:
web:
exposure:
include: '*'