springboot-Actuator使用及自定义端点

举报
一粒沙chen 发表于 2020/08/14 11:00:27 2020/08/14
【摘要】 本文主要介绍的这个组件是actuator。actuator主要是对springboot应用程序进行监控和管理,简单的说就是通过restful api接口请求来进行监管、审计、健康和数据采集你的应用程序运行的情况1. 开启Actuatorspring-boot-actuator模块提供Spring Boot所有的production-ready特性,启用该特性的最简单方式是添加spring-b...

本文主要介绍的这个组件是actuatoractuator主要是对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")

}

2. 默认端点

下面我们看一下可用的端点,他们大部分在1.x中已经存在。尽管如此,有些端点新增,有些被删除,有些被重构。

 

/auditevents:同Actuator 1.x,还可以通过关键字进行过滤

/beans:同Actuator 1.x,不可以过滤

/conditions:返回服务中的自动配置项

/configprops:允许我们获取@ConfigurationPropertiesbean对象

/env:返回当前的环境变量,我们也可以检索某个值

/flyway:提供Flyway数据库迁移的详细情况

/health:同Actuator 1.x

/heapdump:返回应用服务使用地jvmdump信息

/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

/threaddumpdump所依赖的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


4. 自定义端点

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 。

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。