本文基于spring boot 2.2.0 release版本。
SpringBoot提供了生产级的监控功能Actuator,可以对程序内部运行情况进行监控,比如线程信息,bean信息,配置,内存使用情况,健康状况等。Actuator的监控结果可以通过HTTP、远程shell和JMX获得,一般我们直接通过HTTP直接访问。在Actuator中,每个监控功能称为端点(endpoint)。
本文接下来介绍如何在SpringBoot中启用Actuator,以及如何配置Actuator。
启用Actuator很简单,直接在pom文件中引入如下依赖即可:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
然后启动程序,在浏览器中输入http://localhost:8079/actuator
(我本地使用的web服务端口是8079),即可看到所有通过HTTP暴露的监控端点。
是不是很简单。
为了了解应用程序运行时的内部状况,Actuator 提供了众多丰富的监控功能,随着版本的增加,可以监控的端点也在增加。
官网:https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-endpoints 展示了所有的端点,并对每个端点的功能进行了说明,在Exposing Endpoints小节里面还介绍了JMX和WEB默认可以访问的端点有哪些。web默认可以访问health和info。
这些端点可以分为三大类:配置端点、度量端点和其它端点,完整的端点功能介绍如下表。
序号 | 端点 | 功能 |
---|---|---|
1 | /configprops | 展示所有@ConfigurationProperties注解信息 |
2 | /beans | 展示spring容器中所有的bean |
3 | /threaddump | 执行一个线程dump |
4 | /env | 展示所有的环境变量 |
5 | /flyway | 获取已应用的所有Flyway数据库迁移信息,需要一个或多个 Flyway Bean |
6 | /health | 展示应用的健康信息 |
7 | /info | 展示应用的基本信息 |
8 | /mappings | 展示所有@RequestMapping的路径 |
9 | /metrics | 展示应用的度量信息,比如内存用量和HTTP请求计数 |
10 | /shutdown | 优雅的关闭应用程序,默认不能通过web访问 |
11 | /httptrace | 显示HTTP足迹,默认展示最近100个HTTP request/repsponse |
12 | /auditevents | 展示当前应用的审计事件信息,这个和AuditEventRepository有关 |
13 | /caches | 展示系统中的缓存数据 |
14 | /startup | 展示由ApplicationStartup收集的启动步骤数据,这个需要配置BufferingApplicationStartup |
15 | /scheduledtasks | 展示系统中的缓存数据 |
16 | /sessions | 允许从Spring Session支持的会话存储中检索和删除用户会话,这个需要在基于Servlet的Web应用程序中使用 |
17 | /integrationgraph | 显示 Spring Integration 图。需要依赖 spring-integration-core |
18 | /loggers | 显示和修改应用程序中日志的配置 |
19 | /liquibase | 获取已应用的所有Liquibase数据库迁移。需要一个或多个 Liquibase Bean |
20 | /heapdump | 返回一个heap dump文件 |
21 | /jolokia | 通过HTTP暴露JMX bean(当Jolokia在类路径上时,不适用于WebFlux)。需要依赖 jolokia-core |
22 | /logfile | 返回日志文件的内容(如果已设置logging.file.name或logging.file.path属性) |
23 | /prometheus | 以Prometheus服务器可以抓取的格式暴露指标,需要依赖 micrometer-registry-prometheus |
其中20-23只能在web环境下使用。
默认Actuator提供的端点中只有shutdown
是未开启的,换句话说通过任何渠道都无法访问shutdown
,如果想访问该端点,需要增加如下配置:
management.endpoint.shutdown.enabled=true
由此可以推断如果想关闭某个端点可以通过设置management.endpoint.
,比如:
management.endpoint.beans.enabled=false
我们也可以使用如下配置关闭所有的端点,然后单独打开某个端点:
management.endpoints.enabled-by-default=false
management.endpoint.info.enabled=true
开启了端点之后,还可以设置该端点是否可以通过web和JMX访问,如下:
//设置禁止通过jmx暴露该端点
management.endpoints.jmx.exposure.exclude=beans,env
//设置允许jmx暴露所有端点
management.endpoints.jmx.exposure.include=*
//设置禁止通过web暴露该端点
management.endpoints.web.exposure.exclude=beans,env
//设置允许通过web暴露info和health
management.endpoints.web.exposure.include=info, health
exclude
表示禁止暴露端点,include
表示可以暴露该端点,它们后面都可以指定一个端点列表,中间使用“,”分隔,也可以使用通配符“*”,表示所有端点。一个端点如果在include
和exclude
都配置,exclude
优先于include
,即此端点点没有暴露。
默认通过web只能访问health和info。
Actuator还提供一个参数可以修改访问端点的URL路径,比如使用如下配置:
management.endpoints.web.base-path=/manage
可以将URL路径中的/actuator
修改为/manage
。
后续连续几篇文章会介绍Actuator部分端点的实现原理。