SpringBoot:模块探究之spring-boot-actuator
创始人
2024-04-22 19:43:43
0

spring-boot-actuator 模块 是 spring-boot 用来查询或监控项目中各种组件、维度的度量指标(如:环境变量信息、日志级别、SpringBean 信息、组件(Redis、Mq、DB)健康状态)时使所用的模块。

此外 spring-boot-actuator 模块 还会向外提供系统运行的情况(如程序是否存活、Jvm 状态)等相关信息。

我们可以通过使用 Http 或 Jmx 的方式来使用 spring-boot-actuator。

本篇内容包括:spring-boot-actuator 模块介绍、spring-boot-actuator 初体验、health 端点、metrics 端点、loggers 端点、beans 端点、关于自定义 Endpoint


文章目录

    • 一、spring-boot-actuator 模块介绍
        • 1、关于 spring-boot-actuator 模块
        • 2、spring-boot-actuator 源码地址
        • 3、启用 spring-boot-actuator 模块
    • 二、spring-boot-actuator 初体验
        • 1、项目中添加 Maven 依赖
        • 2、启动项目访问 Api
        • 3、添加 actuator 配置
        • 4、启动项目访问 Api
        • 5、spring-boot-actuator 内置端点
    • 三、health 端点
    • 四、metrics 端点
        • 1、/metrics 端点
        • 2、/metrics/{name} 端点
        • 3、/metrics 自定义端点
    • 五、loggers 端点
        • 1、/loggers 端点查看运行时日志等级
        • 2、/loggers/{name} 端点查看运行时日志等级
        • 3、/loggers 端点改变运行时日志等级
    • 六、beans 端点
    • 七、关于自定义 Endpoint


一、spring-boot-actuator 模块介绍

1、关于 spring-boot-actuator 模块

spring-boot-actuator 模块 是 spring-boot 用来查询或监控项目中各种组件、维度的度量指标(如:环境变量信息、日志级别、SpringBean 信息、组件(Redis、Mq、DB)健康状态)时使所用的模块。

此外 spring-boot-actuator 模块 还会向外提供系统运行的情况(如程序是否存活、Jvm 状态)等相关信息。

我们可以通过使用 Http 或 Jmx 的方式来使用 spring-boot-actuator。

2、spring-boot-actuator 源码地址

spring-boot-actuator 位于 spring-boot 项目中。

spring-boot-actuator 在 源码地址为: https://github.com/spring-projects/spring-boot/tree/v2.1.0.RELEASE/spring-boot-project/spring-boot-actuator

3、启用 spring-boot-actuator 模块

对于 Maven:

org.springframework.bootspring-boot-starter-actuator

对于 Gradle:

dependencies {compile("org.springframework.boot:spring-boot-starter-actuator")
}

亦或使用 SpringBoot CLI,可以使用如下 @Grab 注解:

@Grab('spring-boot-starter-actuator')

二、spring-boot-actuator 初体验

1、项目中添加 Maven 依赖

# 在 pom 文件中添加以下内容

        org.springframework.bootspring-boot-starter-actuator

2、启动项目访问 Api

启动项目访问 /actuator/health 地址,得到以下级过

{"status":"UP"}

其中 /actuator 是访问 endpoints 的默认 url 前缀,/health 则展示应用的健康信息。

可以通过以下属性配置,修改 endpoints 的 url 前缀:

management.endpoints.web.base-path=/simple

修改之后 health 访问地址为 /simple/health。

3、添加 actuator 配置

actuator 的 health 端点是默认开启的,下面我们将尝试关闭所有默认配置,并启用和使用 shutdown 端点(默认不启用),优雅的关闭程序

# Yaml 配置文件中添加以下内容

#启用端点
management:#全局配置endpoints:#关闭默认配置(即全部内容需重新配置)enabled-by-default: false#http方式暴露web:#actuator提供的api接口根路径base-path: "/simple"exposure:#需要开放的端点,默认只打开health、info,*表示所有include: "*"#需要排除的端点exclude:#单一端点配置endpoint:shutdown:#启用shutdown端点enabled: true

4、启动项目访问 Api

# 修改配置后,Post 访问端点 /simple/shutdown

image-20221212171147107

# 可以看到项目成功关闭

image-20221212171254571

5、spring-boot-actuator 内置端点

Actuator 提供 13 个端点,可以分为三大类:配置端点、度量端点和其他端点。具体如下表所示

Http方法路径描述
get/health报告应用程序的健康指标,这些值由 HealthIndicator 的实现类提供
get/metrics报告各种应用程序度量信息,比如内存用量和HTTP请求计数
get/metrics/{name}报告指定名称的应用程序度量值
get/autoconfig提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过
get/configprops描述配置属性(包含默认值)如何注入Bean
get/beans描述应用程序上下文里全部的Bean,以及它们的关系
get/dump获取线程活动的快照
get/env获取全部环境属性
get/env/{name}根据名称获取特定的环境属性值
get/info获取应用程序的定制信息,这些信息由 info 打头的属性提供
get/mappings描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系
post/shutdown关闭应用程序,要求 endpoints.shutdown.enabled 设置为 true
get/trace提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)

三、health 端点

当我们开启 health 的健康端点时,我们能够查到应用健康信息是一个汇总的信息,访问 /health 时,我们获取到的信息是 {“status”:“UP”},status 的值还有可能是 DOWN。

# 要想查看详细的应用健康信息需要加入以下配置:

#单一端点配置  
endpoint:health:show-details: always

该属性可以使用以下值之一进行配置:

  1. never:默认配置,不展示详细信息,只展示 up/down 状态,
  2. when-authorized:详细信息将会展示给通过认证的用户。授权的角色可以通过 management.endpoint.health.roles 配置
  3. always:对所有用户暴露详细信息

# 添加后可以得到以下信息:

{"status": "UP","components": {"redis": {"status": "UP","details": {"version": "3.2.11"}},"db": {"status": "UP","details": {"database": "MySQL","validationQuery": "isValid()"}},"diskSpace": {"status": "UP","details": {"total": 499963174912,"free": 281442709504,"threshold": 10485760,"exists": true}},"ping": {"status": "UP"}}
}

从上面的应用的详细健康信息发现,健康信息包含磁盘空间、redis、DB,启用监控的这个 SpringBoot 应用确实是连接了 Redis 和 MySQL 数据库,Actuator 就自动给监控起来了,确实是很方便、很有用。

Ps:diskSpace 是指磁盘空间监测!

/health 端点有很多自动配置的健康指示器:如 Redis、Rabbitmq、db 等组件。当你的项目有依赖对应组件的时候,这些健康指示器就会被自动装配,继而采集对应的信息。


四、metrics 端点

1、/metrics 端点

# /metrics 端点用来查看所有可追踪的度量,比如我当前项目访问 /metrics 端点:

{"names": ["application.ready.time","application.started.time","disk.free","disk.total","executor.active",...]
}

Actuator 在这个界面看不到具体的指标信息,只是展示了一个指标列表。为了获取到某个指标的详细信息,我们可以请求具体的指标信息,即 /metrics/{name} 端点

2、/metrics/{name} 端点

/metrics 各个指标说明如下:

序号参数参数说明是否监控监控手段重要度
JVM
1jvm.memory.maxJVM 最大内存
2jvm.memory.committedJVM 可用内存展示并监控堆内存和 Metaspace重要
3jvm.memory.usedJVM 已用内存展示并监控堆内存和 Metaspace重要
4jvm.buffer.memory.usedJVM 缓冲区已用内存
5jvm.buffer.count当前缓冲区数
6jvm.threads.daemonJVM 守护线程数显示在监控页面
7jvm.threads.liveJVM 当前活跃线程数显示在监控页面;监控达到阈值时报警重要
8jvm.threads.peakJVM 峰值线程数显示在监控页面
9jvm.classes.loaded加载 classes 数
10jvm.classes.unloaded未加载的 classes 数
11jvm.gc.memory.allocatedGC 时,年轻代分配的内存空间
12jvm.gc.memory.promotedGC 时,老年代分配的内存空间
13jvm.gc.max.data.sizeGC 时,老年代的最大内存空间
14jvm.gc.live.data.sizeFullGC 时,老年代的内存空间
15jvm.gc.pauseGC 耗时显示在监控页面
TOMCAT
16tomcat.sessions.createdtomcat 已创建 session 数
17tomcat.sessions.expiredtomcat 已过期 session 数
18tomcat.sessions.active.currenttomcat 活跃 session 数
19tomcat.sessions.active.maxtomcat 最多活跃 session 数显示在监控页面,超过阈值可报警或者进行动态扩容重要
20tomcat.sessions.alive.max.secondtomcat 最多活跃 session 数持续时间
21tomcat.sessions.rejected超过 session 最大配置后,拒绝的 session 个数显示在监控页面,方便分析问题
22tomcat.global.error错误总数显示在监控页面,方便分析问题
23tomcat.global.sent发送的字节数
24tomcat.global.request.maxrequest 最长时间
25tomcat.global.request全局 request 次数和时间
26tomcat.global.received全局 received 次数和时间
27tomcat.servlet.requestservlet 的请求次数和时间
28tomcat.servlet.errorservlet 发生错误总数
29tomcat.servlet.request.maxservlet 请求最长时间
30tomcat.threads.busytomcat 繁忙线程显示在监控页面,据此检查是否有线程夯住
31tomcat.threads.currenttomcat 当前线程数(包括守护线程)显示在监控页面重要
32tomcat.threads.config.maxtomcat 配置的线程最大数显示在监控页面重要
33tomcat.cache.accesstomcat 读取缓存次数
34tomcat.cache.hittomcat 缓存命中次数
CPU
35system.cpu.countCPU 数量
36system.load.average.1mload average超过阈值报警重要
37system.cpu.usage系统 CPU 使用率
38process.cpu.usage当前进程 CPU 使用率超过阈值报警
39http.server.requestshttp 请求调用情况显示 10 个请求量最大,耗时最长的 URL;统计非 200 的请求量重要
40process.uptime应用已运行时间显示在监控页面
41process.files.max允许最大句柄数配合当前打开句柄数使用
42process.start.time应用启动时间点显示在监控页面
43process.files.open当前打开句柄数监控文件句柄使用率,超过阈值后报警重要

3、/metrics 自定义端点

metrics 端点除了默认的这些统计指标外,我们还可以实现自定义统计指标。Metrics 提供 4 种基本的度量类型:Gauge、Counter、Timer、Summary

  • Cauge 是表示单个的变化的值,例如温度,气压。与 Counter 的区别在于,Gauge 的值不总是增加的;Gauge 对象一旦被创建,就不能手动对其中的值进行修改。在每次取样时,Gauge 会返回当前值;
  • Counter 只允许增加值,Counter 所表示的计数值是 double 类型,默认情况下增加的值是 1.0;
  • Timer 通常用来记录事件的持续时间。Timer 会记录两类的数据,事件的数量和总的持续时间。Timer 提供了不同方式来记录持续时间。第一种方式是使用 record() 方法来记录 Runnable 和 Callable 对象的运行时间,第二种方式是使用 Timer.Sample 来保存计时状态;
  • Summary 用来记录指标的分布,Summary 根据每个指标的值,把值分配到对应的 bucket 中。Micrometer 默认的 bucket 的值从 1 到 Long.MAX_VALUE,可以通过 minimumExpectedValue 和 maximumExpectedValue 来控制 bucket 的范围,如果指标的值较小,还可以通过 scale 来设置一个值对数值进行放大。

五、loggers 端点

1、/loggers 端点查看运行时日志等级

loggers 端点暴露了我们程序内部配置的所有 logger 的信息。我们访问 /loggers 可以看到:

image-20221213110600372

2、/loggers/{name} 端点查看运行时日志等级

你也可以通过下述方式访问单独一个 logger:

http://localhost:8080/actuator/loggers/{name}

image-20221213110745258

3、/loggers 端点改变运行时日志等级

loggers 端点能够动态修改日志等级。

比如,我们可以通过以下几种方式来修改 root logger 的日志等级。我们只需要发起一个 URL 为 http://localhost:8080/actuator/loggers/rootPOST 请求,POST 报文如下:

{"configuredLevel": "DEBUG"
}

修改:

image-20221213111000537

修改后:

image-20221213111024077


六、beans 端点

beans 端点会返回 Spring 容器中所有 bean 的别名、类型、是否单例、依赖等信息。

image-20221213111414635


七、关于自定义 Endpoint

默认的端点虽然可以满足大多数的需求,但一些特殊的需求还是需要能够支持自定义端点的。

自定义 Endpoint 端点,只需要在我们的新建 Bean 上使用 @Endpoint 注解即可, Bean 中的方法就可以通过 JMX 或者 HTTP 公开。

除此之外,还可以使用 @JmxEndpoint @WebEndpoint 编写 EndPoint。但这些 EndPoint 仅限于各自的公开方式。例如,@WebEndpoint 仅通过 HTTP 公开,而不通过 JMX 公开。

那么是不是类中所有的方法都支持对外公开呢?

很明显不是的。Actuator 提供了三个用于方法上的注解,只有加三个注解的方法才支持对外公开,并且每个注解都有支持它的 HTTP method。

  • @ReadOperation 对应 HTTP 的 GET请求
  • @WriteOperation 对应 HTTP 的 POST请求
  • @DeleteOperation 对应 HTTP 的 DELETE请求

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...