学透Spring Boot — 012. 强大的仪表盘 Spring Boot Actuator

目录

1. Spring Boot Actuator简介

2. 引入spring-boot-actuator

2. 核心功能和端点解析

什么是端点 Endpoint

查看有哪些端点

配置endpoint

Health 端点的自动配置

定制端点

Kubernetes中的探针

info端点

Metrics端点

5. 最佳实践

不要暴露全部端点

避免打印详细信息

配置单独的端口

配置SSL


1. Spring Boot Actuator简介

使用Spring Boot让我们开发一个Web应用变得非常简单,我们只需要做少量的配置,加一些MVC的代码,就可以对外提供Web服务了。

但是这有时候还不够,比如我们有时候想知道应用的状态,是不是可以访问,特别是在部署在Kubernetes的应用,Kubernetes需要获取应用的状态,如果挂了,K8S会自动的重启应用。

就这就需要我们的应用提供一个状态检查的接口。大部分人想到的就是自定义一个Controller

我们可以当然可以这么做,亲力亲为。但是如果还有其它需求呢,比如获取服务的状态(CPU 内存的使用情况等等),我们也每次自定义吗?

但是作为一款超级框架,Spring Boot 不会允许我们所有开发者都自己造轮子,直接提供了开箱即用的功能给我们使用。

> 像这些都是业务无关的,基础架构的功能,Spring Boot都给我们直接提供了。

这就是 Spring Boot的一个模块 `spring-boot-actuator`。它提供了很多开箱即用的功能:

  • 健康检查
  • 服务器指标
  • 日志追踪
  • 环境变量和配置
  • ……

我们只需要做少量的配置,我们的应用就能自动集成这些功能。

2. 引入spring-boot-actuator

第一件事情,我们先要引入starter

然后在application.yaml中开启和配置健康检查端点

恭喜你,你的应用已经具备健康检查的接口了

这就是开箱即用

3. 核心功能和端点解析

什么是端点 Endpoint

端点就是Spring Boot提供的一些接口,通过这些Actuator端点,我们可以对 Spring 应用进行监控和交互。

可以大概这么理解,虽然不太准确,因为通过HTTP暴露出来,只是一种形式,我们还可以通过JMX暴露端点。

这些Endpoint是开箱即用的,一般情况,我们不需要写Java代码,只是少量的配置即可。

比如前面用/health 这个endpoint 对应用进行健康检查。

查看有哪些端点

我们可以在配置中暴露全部的endpoint(web的意思是用HTTP来暴露endpoint

调用接口 http://localhost:8080/actuator 就能看到全部的端点了

不得不说,自动集成的端点功能太强大了!

比如我们可以查看 JVM内存的使用情况 http://localhost:8080/actuator/metrics/jvm.memory.used

配置endpoint

启用endpoint后,我们可以配置具体的endpoint

用health endpoint举例,默认的health 端点,只有一个值 status : UP

但是我们可以配置打印详情

这样,我们可以得到更详细的信息

可以看到health的up状态,是因为其它的几个组件(我的项目中引入了db、redis等)都是UP状态。

生产项目谨慎打开,因为会暴露你的应用信息。

如果一定要打开,可以选择对端点认证。

Health 端点的自动配置

上面也看到了,我用到了db,所以health端点会自动去检查db的健康情况。

我们测试一下,把db从health检查的组件中移除

再次调用 http://localhost:8080/actuator/health 端点,已经不检测db的状态了

要暴露liveness和readness,还需要配置

这样就暴露了readness和liveness

http://localhost:8080/actuator/health/liveness

原理,万变不离其宗,也是自动配置

health检查的组件还有很多,都是自动配置的。完整的列表可以查看

Spring Boot Reference Documentationhttps://docs.spring.io/spring-boot/docs/3.2.4/reference/htmlsingle/#actuator.endpoints.health.auto-configured-health-indicators

定制端点

除了通过配置定制端点,我们还可以通过代码定制端点。用health端点举例。

我们要做到的只是实现HealthIndicator接口。只是测试,我们直接设置为down

可以看到,我们的health的结果是Down,因为下面新增了一个组件,它的状态是down

新增的组件的类名是 XXXHealthIndicator,则组件的名就是XXX

Kubernetes中的探针

Kubernetes可以把存活探针和可读探针直接指向我们spring boot应用的健康检查端点。

其实Kubernetes还提供一个启动探针startupProbe,专门用来做启动探测的,它的意思是检测这个端点,如果在指定的时间没有得到up状态,就会尝试重启,如果启动到指定次数,就表示启动失败。

info端点

再分享几个好玩的端点。第一个是info端点。

我们如果想要获取git相关的信息,只需要先维护git信息,再classpath下新建一个git.properties

git.branch=main
git.commit.id.abbrev=0f0e0d

然后启动git开关

management:
  info:
    git:
      enabled: true
      mode: full

http://localhost:8080/actuator/info 就可以获取到

其它端点也类似,比如info下的build信息。

这就是框架的意义。它帮我们定义好了规则,我们只需按规则做少量的配置,把配置放到指定目录下,就能够开箱即用的使用功能了。

Metrics端点

服务器性能指标,也是我们非常关注的信息

需要先启用metrics

访问端点,http://localhost:8081/actuator/metrics 列出了所有我们可以获取的metric指标信息

比如我们最关系的内存使用情况 http://localhost:8081/actuator/metrics/jvm.memory.used

4. 最佳实践

spring boot actuator 模块提供了很多开箱即用的端口,提供了丰富的功能,但是事情都有两面性,也带来了暴露我们服务关键信息的风险,可能被不法分子攻击。

所以生产环境需要谨慎使用。

不要暴露全部端点

按自己的情况,选择暴露哪些端点。比如只暴露health端点

这样,只能访问健康检查的端点

避免打印详细信息

打印详细信息,会暴露我们服务的重要信息,比如使用的数据库,使用了Redis等等

所以不要把show-details 设置成always

否则一览无余

配置单独的端口

最好给management指定一个单独的端口,不要影响正常的业务

http://localhost:8081/actuator

配置SSL

默认暴露是HTTP的,为了安全传输,我们需要配置SSL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值