Spring Boot 2.x中Actuator的一些知识点

1. 前言

Spring Boot 提供了很多开箱即用的starter,其中有一款非常特别的starter——actuator 。它是用来对Spring Boot 应用进行监控、指标采集、管理,并提供一些很有用的端点(endpoint)来实现上述功能。这有助于我们对Spring Boot 应用进行监视和管理。我们本文将探讨Spring Boot 2.x下的actuator的一些知识点。

2. 集成

像其它starter一样,通过非常简单的依赖集成即可开箱即用。我们通过在项目中引入(以maven为例):

  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>

3. endpoints

Actuator的核心是端点(endpoint),我们通过端点来获取应用的一些监控信息或者通过端点来改变系统的一些状态。Actuator中内置了非常多的端点:

id 描述 默认是否启用
auditevents 显示当前应用程序的审计事件信息 Yes
beans 显示应用Spring Beans的完整列表 Yes
caches 显示可用缓存信息 Yes
conditions 显示自动装配类的状态及及应用信息 Yes
configprops 显示所有 @ConfigurationProperties 列表 Yes
env 显示 ConfigurableEnvironment 中的属性 Yes
flyway 显示 Flyway 数据库迁移信息 Yes
health 显示应用的健康信息(未认证只显示status,认证显示全部信息详情) Yes
info 显示任意的应用信息 Yes
liquibase 展示Liquibase 数据库迁移 Yes
metrics 展示当前应用的 metrics 信息 Yes
mappings 显示所有 @RequestMapping 路径集列表 Yes
scheduledtasks 显示应用程序中的计划任务 Yes
sessions 允许从Spring会话支持的会话存储中检索和删除用户会话。 Yes
shutdown 允许应用以优雅的方式关闭(默认情况下不启用) No
threaddump 执行一个线程dump Yes
httptrace 显示HTTP跟踪信息(默认显示最后100个HTTP请求 - 响应交换) Yes
heapdump 返回一个GZip压缩的hprof堆dump文件 Yes
prometheus Prometheus服务器抓取的格式显示metrics信息 Yes

3.1 启用与关闭

默认情况下除了shutdown是关闭的其它端点都是启用的。个别端点的启用依赖其他组件,比如我们上篇文章介绍的Prometheus。我们可以在Spring Boot 配置文件中通过配置(id参见上表)management.endpoint.<id>.enabled来配置端点是否启用。

另外我们可以通过management.endpoints.enabled-by-default来修改全局端口默认配置,以下示例启用info端点并禁用所有其他端点:

# 先设置所有的端点默认为关闭
management.endpoints.enabled-by-default=false
# 然后开启info 端点
management.endpoint.info.enabled=true

3.2 开放与封闭

特别需要我们注意的是,以上只是我们开启的端点功能,并不意味我们把这些端点暴露给应用之外的环境中去。暴露的配置规则是 management.endpoints.<web|jmx>.exposure.<include|exclude>我们以web为例,通过以下方式来暴露web端点:

# * 为暴露所有web端点,如果暴露的是一个列表请使用端点 id 并以逗号隔开
management.endpoints.web.exposure.include='*'

同样的如果我们要排除一些web端点请用 management.endpoints.web.exposure.exclude来配置。我们可以通过/actuator来列举暴露的端点。当然这个路径取决于我们对management.endpoints.web.basePath的配置。

3.3 安全性

对于生产环境来说端点都是敏感的。我们当然不希望非法的访问端点,特别如/shutdown这种端点。我们可以通过上面3.1、3.2进行关闭、封闭操作。也可直接配置management.server.port=-1 来关闭管理端点。或者确保在外面的安全框架诸如Spring security的控制之下。即保证 EndpointRequest.toAnyEndpoint()的安全性。

3.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;

    // [...] getters and setters
  }

}

注意请务必保证端点的id在该应用中唯一。

3.5 端点扩展

假设我们想要确保我们的应用程序的生产实例永远不是SNAPSHOT版本。我们决定通过更改返回此信息的Actuator端点(/info)来完成此操作。如果我们的应用程序恰好是SNAPSHOT。我们将获得不同的HTTP状态代码。

我们可以使用@EndpointExtension或其更具体的@EndpointWebExtension、@EndpointJmxExtension轻松扩展预定义端点的行为:

@Component
@EndpointWebExtension(endpoint = InfoEndpoint.class)
public class InfoWebEndpointExtension {

  private InfoEndpoint delegate;

  // standard constructor

  @ReadOperation
  public WebEndpointResponse<Map> info() {
    Map<String, Object> info = this.delegate.info();
    Integer status = getStatus(info);
    return new WebEndpointResponse<>(info, status);
  }

  private Integer getStatus(Map<String, Object> info) {
    // return 5xx if this is a snapshot
    return 200;
  }
}

3.6 Spring Boot metrics

运维应用监控依赖于对应用度量(metric)指标的抽取。Spring Boot 2.x中的Actuator 对Micrometer的自动配置。 甚至我们可以通过一个叫MeterRegistry的Spring Bean来注册一个自定义的metric指标。我们可以通过/actuator/metrics端点获取所有的metric指标。 也可以通过/actuator/metrics/{metricName} 来获取具体度量的元数据。

Micrometer 是一个应用度量门面类库,类似SLF4。后面我会专门写一篇文章来介绍这个知识点。请关注我的公众号:Felordcn 以保证第一时间获取相关的知识。

4. 总结

本文我们介绍了Spring Boot 2.x中Actuator 组件。该组件可以帮助我们来获取系统的一些元信息和一些监控度量指标。对于Spring Boot 应用十分重要。该组件是一个生产级别的工具,我们不应该忽略它。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • SpringBoot四大神器之Actuator的使用小结

    序 Spring Boot有四大神器,分别是auto-configuration.starters.cli.actuator,本文主要讲actuator.actuator是spring boot提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看.相关功能统计等. spring-boot-starter-actuator模块的实现对于实施微服务的中小团队来说,可以有效地减少监控系统在采集应用指标时的开发量.当然,它也并不是万能的,有时候我们也需要对其做一些简单的扩展来帮助我们实现自

  • 详解关于springboot-actuator监控的401无权限访问

    今天心血来潮看一下spring监控 访问/beans 等敏感的信息时候报错 Tue Mar 07 21:18:57 GMT+08:00 2017 There was an unexpected error (type=Unauthorized, status=401). Full authentication is required to access this resource. application.properties添加配置参数 management.security.enabled=

  • 详解spring-boot actuator(监控)配置和使用

    在生产环境中,需要实时或定期监控服务的可用性.spring-boot 的actuator(监控)功能提供了很多监控所需的接口.简单的配置和使用如下: 1.引入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 如果使用http调用的

  • springboot 使用Spring Boot Actuator监控应用小结

    微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个环节出现了问题? 在这种框架下,微服务的监控显得尤为重要.本文主要结合Spring Boot Actuator,跟大家一起分享微服务Spring Boot Actuator的常见用法,方便我们在日常中对我们的微服务进行监控治理. Actuator监控 Spring Boot使用"习惯优于配置的理念",采用包

  • Spring Boot Actuator监控端点小结

    在Spring Boot的众多Starter POMs中有一个特殊的模块,它不同于其他模块那样大多用于开发业务功能或是连接一些其他外部资源.它完全是一个用于暴露自身信息的模块,所以很明显,它的主要作用是用于监控与管理,它就是:spring-boot-starter-actuator. spring-boot-starter-actuator模块的实现对于实施微服务的中小团队来说,可以有效地减少监控系统在采集应用指标时的开发量.当然,它也并不是万能的,有时候我们也需要对其做一些简单的扩展来帮助我们

  • Spring Boot中使用Actuator的/info端点输出Git版本信息

    对于Spring Boot的Actuator模块相信大家已经不陌生了,尤其对于其中的/health./metrics等强大端点已经不陌生(如您还不了解Actuator模块,建议先阅读<Spring Boot Actuator监控端点小结>).但是,其中还有一个比较特殊的端点/info经常被大家所忽视,因为从最初的理解,它主要用来输出application.properties配置文件中通过info前缀来定义的一些属性,由于乍看之下可能想不到太多应用场景,只是被用来暴露一些应用的基本信息,而基本

  • SpringBoot 监控管理模块actuator没有权限的问题解决方法

    SpringBoot 1.5.9 版本加入actuator依赖后,访问/beans 等敏感的信息时候报错,如下 Tue Mar 07 21:18:57 GMT+08:00 2017 There was an unexpected error (type=Unauthorized, status=401). Full authentication is required to access this resource. 肯定是权限问题了.有两种方式: 1.关闭权限:application.prop

  • 详解配置spring-boot-actuator时候遇到的一些小问题

    前言 spring-boot-actuator是一个spring-boot提供的用于监控组件,只需要在代码中加入依赖就可以了 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 遇到的一些小问题 1.可以加入依赖 <dependenc

  • spring boot starter actuator(健康监控)配置和使用教程

    添加POM依赖: <!-- spring-boot-监控--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.bo

  • Spring Boot 2.x中Actuator的一些知识点

    1. 前言 Spring Boot 提供了很多开箱即用的starter,其中有一款非常特别的starter--actuator .它是用来对Spring Boot 应用进行监控.指标采集.管理,并提供一些很有用的端点(endpoint)来实现上述功能.这有助于我们对Spring Boot 应用进行监视和管理.我们本文将探讨Spring Boot 2.x下的actuator的一些知识点. 2. 集成 像其它starter一样,通过非常简单的依赖集成即可开箱即用.我们通过在项目中引入(以maven为

  • 教你在Spring Boot微服务中集成gRPC通讯的方法

    一.首先声明gRPC接口 这里引入的是最新的gRpc-core 1.37版本, 采用的grcp-spring-boot-starter封装的版本进行实现,github地址: https://github.com/yidongnan/grpc-spring-boot-starter 要实现gRpc通讯, 先定义接口以及入参出参信息 syntax = "proto3"; option java_multiple_files = true; option java_package = &qu

  • 在Spring boot的项目中使用Junit进行单体测试

    使用Junit或者TestNG可以进行单体测试,这篇文章简单说明一下如何在Spring boot的项目中使用Junit进行单体测试. pom设定 pom中需要添加spring-boot-starter-test <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>

  • 解决Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题

    LocalDate . LocalTime . LocalDateTime 是Java 8开始提供的时间日期API,主要用来优化Java 8以前对于时间日期的处理操作.然而,我们在使用Spring Boot或使用Spring Cloud Feign的时候,往往会发现使用请求参数或返回结果中有 LocalDate . LocalTime . LocalDateTime 的时候会发生各种问题.本文我们就来说说这种情况下出现的问题,以及如何解决. 问题现象 先来看看症状.比如下面的例子: @Sprin

  • 在Spring Boot应用程序中使用Apache Kafka的方法步骤详解

    第1步:生成我们的项目: Spring Initializr来生成我们的项目.我们的项目将提供Spring MVC / Web支持和Apache Kafka支持. 第2步:发布/读取Kafka主题中的消息: <b>public</b> <b>class</b> User { <b>private</b> String name; <b>private</b> <b>int</b> age

  • Spring Boot集成Mybatis中如何显示日志的实现

    在Spring Boot集成Mybatis的项目中,如果出现SQL语句执行问题,我们需要进行排查.此时就需要打印对应的SQL语句,那么该如何操作才能正常打印出对应的SQL语句呢? 其实操作非常简单,在application.properties或application.yml文件中配置对应mapper所在包的日志级别即可. 示例如下: logging.level.com.secbro.mapper=debug 其中"logging.level."为前缀,"com.secbro

  • Spring boot 在idea中添加热部署插件的图文教程

    目录 一.开启IDEA的自动编译(静态) 二.开启IDEA的自动编译(动态) 三.开启IDEA的热部署策略(非常重要) 四.在项目添加热部署插件(可选) 一.开启IDEA的自动编译(静态) 具体步骤:打开顶部工具栏 File -> Settings -> Default Settings -> Build -> Compiler 然后勾选 Build project automatically . 二.开启IDEA的自动编译(动态) 具体步骤:同时按住 Ctrl + Shift +

  • Spring Boot在开发过程中常用IDEA插件

    目录 一.Codota 二.AutofillingJavacallarguments 三.GsonFormat 四.RainbowBrackets 五.MavenHelper 六.KeypromoterX 七.换个心水的背景图 本篇为大家介绍一些在开发过程中,经常可以使用到的一些IntelliJ IDEA插件和提高工作效率的方法,关于如何安装插件可以参考本专栏前面两小节的内容. 一.Codota 极其强大的代码自动补全 当我们第一次使用某个类,对该类的某个函数不够熟悉时,可以通过该插件搜索相关用

  • 使用Spring-Retry解决Spring Boot应用程序中的重试问题

    目录 1.背景 2.引入依赖 3.开启spring-retry 4.在方法上添加@Retryable 5.重试完 6.注意事项 1.背景 在日常开发过程中,难免会与第三方接口发生交互,例如:远程服务调用当正常调用发生异常时,例如:网络抖动等短时间内的临时问题,程序为了更加健壮并且更不容易出现故障.需要重新触发业务操作,以防止间歇性的异常对程序照成的影响.这个可以就可以用重试来解决. 2.引入依赖 <!--因为spring-retry是基于aop实现,所以需要引入aop--> <depen

  • Spring Boot面试必问之启动流程知识点详解

    目录 一 面试提问 1.1 Spring Boot启动流程 1.2 SpringBoot自动装配 二 知识点详解 2.1 SpringBoot核心注解: 2.2详细启动流程(结合源码) 总结 一 面试提问 1.1 Spring Boot启动流程 ???面试官:说说SpringBoot启动流程吧 ?? 我 : 首先从main找到run()方法,在执行run()方法之前new一个SpringApplication对象 进入run()方法,创建应用监听器SpringApplicationRunList

随机推荐