一、什么是Actuator?
当一个SpringBoot项目运行的时候,我们可能需要对这个项目进行实时监控,actuator是一个监控工具包,用来在程序运行时监控运行数据,开发者可以使用http端点或jmx来管理和监控应用程序的健康状况、应用信息、内存使用状况等。web服务端点是指您的程序用来和其他应用程序进行通信的url地址。
在SpringBoot中,端点(endpoints)可用于监控应用及与应用进行交互,Spring Boot包含很多内置的端点,你也可以添加自己的。例如,health端点提供了应用的基本健康信息。每个端点都可以启用或禁用。这控制着端点是否被创建,并且它的bean是否存在于应用程序上下文中。要远程访问端点,除了启用端点,还必须通过JMX或HTTP进行暴露。大部分应用选择HTTP方式暴露,端点的ID映射到一个带/actuator
前缀的URL。
SpringBoot2的端点默认根路径已经由 “/” 调整到了 “/actuator“ 下,可以在配置文件application.yml中配置根路径:management.endpoints.web.base-path=/ 。SpringBoot内置了如下一些端点:
在web项目中还可以使用如下端点:
二、Actuator的使用
1、引入jar包:使用Actuator需要在springboot项目中引入jar包,Maven引入方式如下
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
2、启用端点:默认情况下,除shutdown以外的所有端点均已启用。要配置单个端点的启用
,请使用management.endpoint.<id>.enabled
属性。配置举例如下
#启用端点 management:
endpoints:
enabled-by-default:false #全局配置,关闭所有端点 endpoint: #单一端点配置 shutdown: enabled:true #启用shutdown端点
3、暴露端点:要远程访问端点,必须通过JMX或HTTP进行暴露,配置举例如下
#暴露监控端点 management: endpoints:
web: #http方式暴露
base-path:/actuator #actuator提供的api接口根路径 exposure: include: "*" #需要开放的端点,默认只打开health、info,*表示所有
exclude: #需要排除的端点
jmx: #jmx方式暴露
exposure:
include: "*"
exclude:
注意:禁用的端点将从应用程序上下文中完全删除。如果您只想更改端点公开(对外暴露)的技术,请改为使用include
和exclude
属性。由于端点可能包含敏感信息,因此应仔细考虑何时公开它们。下表显示了内置端点的默认暴露情况。
4、端点访问路径:默认情况下,端点通过使用端点的ID在/actuator
路径下的HTTP上公开。例如,beans
端点暴露在/actuator/beans
下。如果要将端点映射到其他路径,则可以使用management.endpoints.web.path-mapping
属性。另外,如果您想更改基本路径,则可以使用management.endpoints.web.base-path
。
5、端点跨域访问:默认情况下,CORS支持处于禁用状态,只有在设置了management.endpoints.web.cors.allowed-origins
属性后才能启用。以下配置允许来自example.com域的GET和POST调用:
management: endpoints: web: cors: allowed-origins = http://example.com allowed-methods = POST,GET
6、自定义端点:如果添加用@Endpoint注解
的@Bean
,则任何使用@ReadOperation
,@WriteOperation
或@DeleteOperation
注释的方法都会自动通过JMX公开,并且也可以通过HTTP在Web应用程序中通过HTTP公开。也可以使用Jersey,Spring MVC或Spring WebFlux通过HTTP公开端点。
7、端点操作:
端点上的操作通过参数接收输入,这些参数的值取自URL的查询参数和JSON请求主体。通过JMX公开时,参数将映射到MBean操作的参数。参数默认是必需的,可以通过使用@org.springframework.lang.Nullable
注释使其成为可选的。
传递给端点操作方法的参数在必要时会自动转换为所需的类型。在调用操作方法之前,使用ApplicationConversionService
的实例将通过JMX或HTTP请求接收到的输入转换为所需的类型。