springboot-Actuator使用及自定义端点
本文主要介绍的这个组件是actuator。actuator主要是对springboot应用程序进行监控和管理,简单的说就是通过restful api接口请求来进行监管、审计、健康和数据采集你的应用程序运行的情况
1. 开启Actuator
spring-boot-actuator模块提供Spring Boot所有的production-ready特性,启用该特性的最简单方式是添加spring-boot-starter-actuator 依赖即可。
按以下配置为Maven项目添加执行器:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
Actuator跟随springboot的版本变动而变动,在spring-boot1.x 和spring-boot2.x有非常大的差距,从内部包的名称,路径到相关配置项都有变化,在使用前需要确定好当前服务所使用的springboot版本,不同版本带来的适配工作很大!
另外如果需要可视化的监控推荐:Grafana结合prometheus。
对于Gradle,使用下面的声明:
dependencies {
compile("org.springframework.boot:spring-boot-starter-actuator")
}
下面我们看一下可用的端点,他们大部分在1.x中已经存在。尽管如此,有些端点新增,有些被删除,有些被重构。
/auditevents:同Actuator 1.x,还可以通过关键字进行过滤
/beans:同Actuator 1.x,不可以过滤
/conditions:返回服务中的自动配置项
/configprops:允许我们获取@ConfigurationProperties的bean对象
/env:返回当前的环境变量,我们也可以检索某个值
/flyway:提供Flyway数据库迁移的详细情况
/health:同Actuator 1.x
/heapdump:返回应用服务使用地jvm堆dump信息
/info:同Actuator 1.x
/liquibase:类似于 /flyway,但是组件工具为Liquibase
/logfile:返回应用的普通日志文件
/loggers:允许我们查询和修改应用的日志等级
/metrics:同Actuator 1.x
/prometheus:返回与/metrics类似,与Prometheus server一起使用
/scheduledtasks:返回应用的周期性任务
/sessions:同Actuator 1.x
/shutdown:同Actuator 1.x
/threaddump:dump所依赖的jvm线程信息
3. Actuator的端点安全
Actuator端点是敏感的,必须防止未经授权的访问。 如果应用程序中存在Spring Security,则默认情况下使用基于表单的HTTP基本身份验证来保护端点。使用Spring Security保护Actuator的端点访问。
配置文件
management.endpoints.enabled-by-default=true
#启动所有端点
management.endpoints.web.exposure.include=*
#自定义管理端点路径
#management.endpoints.web.base-path=/manage
处于安全考虑,Spring Boot 2.X 中,Actuator 默认只开放 health 和 info 两个端点。
添加management.endpoints.web.exposure.include=*配置后启动应用,访问 http://127.0.0.1:8081/actuator 我们可以看到所有的 Actuator 端点列表。
这里的port一是可以在配置文件中配置,二是根据你服务配置的端口走(同样前面的ip:port都是根据你服务的具体情况来定的)
如果将management.endpoints.enabled-by-default设置为false,则禁用所有端点,如需启用则如下:
management.endpoints.enabled-by-default=false
management.endpoint.info.enabled=true
禁用的端点将从应用程序上下文中完全删除。如果只想更改公开端点,使用include和exclude属性。使用如下:
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans
management.endpoints.web.base-path=/manage 配置表示将 /actuator 路径重定义为 /manage。
Spring Boot 2.x 开始,Actuator支持CRUD模型,而不是旧的RW(读/写)模型。我们可以按照两种策略来自定义:
@Endpoint 同时支持JMX和http
@JmxEndpoint 只支持JMX技术
@WebEndpoint 只支持http
通过在一个端点类(必须是Spring Bean)上添加上面其中一个来表明该类是一个端点类。
在类的方法使用@ReadOperation,@WriteOperation或@DeleteOperation,这分别会映射到Http中的 GET、POST、DELETE(对http来说)。 以下是我们自定义的一个端点:
@Component
@Endpoint(id = "features")
public class FeaturesEndpoint {
private Map<String, Feature> features = new ConcurrentHashMap<>();
@ReadOperation
public Map<String, Feature> features() {
return features;
}
@ReadOperation
public Feature feature(@Selector String name) {
return features.get(name);
}
@WriteOperation
public void configureFeature(@Selector String name, Feature feature) {
features.put(name, feature);
}
@DeleteOperation
public void deleteFeature(@Selector String name) {
features.remove(name);
}
public static class Feature {
private Boolean enabled;
// TODO
}
}
这里需要配置
management.endpoints.web.exposure.include=features
这里的访问端点就是/actuator/features ,如果不想要actuator,或者屏蔽actuator,还可以进一步配置
如下:
management.endpoints.web.base-path=/admin/monitor
management.endpoints.web.exposure.include=features
这样访问路径就变成/admin/monitor/features 。
- 点赞
- 收藏
- 关注作者
评论(0)