SpringBoot:模块探究之spring-boot-actuator

news2024/11/29 20:37:10

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:

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

对于 Gradle:

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

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

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

二、spring-boot-actuator 初体验

1、项目中添加 Maven 依赖

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

        <!--   对应用系统的自省和监控     -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

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请求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85062.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ Http Server 开源库(汇总级整理)

C http server 开源框架 star 统计截止至 2022.12.10 名称说明链接starcpp-httplib&#xff08;推荐&#xff09;A C header-only HTTP/HTTPS server and client libraryhttps://github.com/yhirose/cpp-httplib8.2ksougo/workflowC Parallel Computing and Asynchronous Netwo…

【数据结构Note3】- 栈 应用栈求解迷宫路径

文章目录栈求解迷宫路径1. 求解迷宫思想和难点2. 定义迷宫3. 定义方向结构体和数组4. 迷宫路径穷举5. 代码总测试栈求解迷宫路径 本文分为两部分&#xff0c;第一部分让大家整体了解栈求解迷宫路径的整体思路和算法实现&#xff0c;第二部分仔细分析迷宫求解过程。小白门看不懂…

【机器视觉】电脑连接相机配置的二三事

最近手上有个机器视觉项目&#xff0c;现场总是反馈相机拍照取图是取的上一次的图&#xff0c;折腾很久&#xff0c;发现是配置的锅&#xff0c;这里记录下&#xff0c;防止下次再犯。 1.设置网卡固定IP&#xff1a; 举例&#xff1a;第一个网口&#xff1a;100.100.100.100 …

数据可视化 数据分析 常用图 seaborn

本文主要介绍几种数据分析阶段常用的统计图&#xff0c;可以用来验证数据分布&#xff0c;发现数据之间的关系&#xff0c;或进行异常值检测等。 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from scipy import stats im…

机器学习 集成学习

集成学习 参考机器学习——集成算法。 集成算法是指构建多个学习器&#xff0c;然后通过一定策略结合它们来完成学习任务&#xff0c;常常可以表现得比单一学习更显著优越。 集成算法一般分为三类&#xff1a; bagging。并行训练多个模型&#xff0c;预测结果取所有模型的投票…

list模拟实现

文章目录list的介绍list和vector的对比**list和vector对于排序算法速度的比较****list和vector对于迭代器的比较****list的模拟实现****框架****节点****迭代器****普通迭代器-普通写法****const 迭代器-普通写法****迭代器-高级写法****链表结构****关于节点的析构****关于迭代…

模型交易平台|金融大数据项目案例模型分享

股市评论数据情感分析 涉及关键技术&#xff1a; TF-IDF; 词嵌入; LSTM 主要工具&#xff1a;Python 技术大类&#xff1a;自然语言处理 主要业务问题&#xff1a; 随着互联网的日益发展&#xff0c;越来越多的人依赖网络搜索信息和分享交流。同时&#xff0c;股市投资者…

Java整合RabbitMQ实现生产消费(7种通讯方式)

文章目录环境说明工程搭建连接RabbitMQ通讯模式1.简单通讯2.工作队列通讯3.发布/订阅通讯4.路由通讯5.主题通讯6.RPC通讯7.Publisher确认通讯代码仓库环境说明 RabbitMQ环境&#xff0c;参考RabbitMQ环境搭建Java版本&#xff1a;JDK1.8Maven版本&#xff1a;apache-maven-3.6…

软件测试基础理论体系学习7-【一文看懂】什么是等价类划分法?边界值分析法?因果图法?错误推测法?功能图分析法?

7-【一文看懂】什么是等价类划分法&#xff1f;边界值分析法&#xff1f;因果图法&#xff1f;错误推测法&#xff1f;功能图分析法&#xff1f;1 等价类划分法1.1 理论知识1.1.1 划分等价类1.1.2 划分等价类的方法1.1.3 设计测试用例1.1.4 设计测试用例原则&#xff1a;1.2 等…

产品解读丨鸿翼ISO质量体系文件管理系统 合规 安全 高效

接轨国际&#xff0c;顺应全球标准化浪潮是当下国内制造企业发展过程的必经之路。通过建立从上而下的、符合国际各类标准的质量体系&#xff0c;鸿翼ISO质量体系文件管理系统能够严格监管企业质量体系的正常运转&#xff0c;为制造企业降本提效、重塑核心竞争力提供科学高效的解…

【JVM深层系列】「监控调优体系」针对于Alibaba-Arthas的安装入门及基础使用开发实战指南

Arthas特性介绍 Arthas是Alibaba开源的Java诊断工具&#xff0c;深受开发者喜爱。在线排查问题&#xff0c;无需重启&#xff1b;动态跟踪Java代码&#xff1b;实时监控JVM状态。 Arthas支持JDK 6&#xff0c;支持Linux/Mac/Windows&#xff0c;采用命令行交互模式&#xff0c…

网络电话会议摸鱼利器:会议自动退出器 - 网络会议结束后自动退出工具 方便会议挂机

随着远程办公和网络化的发展&#xff0c;我们可能经常需要开更多的在线电话会议。有些网络会议可能并不重要&#xff0c;但是你却不能一走了之。如果你打开了会议程序&#xff0c;然后埋头扎进Excel或笔记工具中&#xff0c;但没多一会一看&#xff0c;你竟然成了网络会议室中的…

叠氮聚乙二醇丙烯酰胺,N3-PEG-ACA,ACA-PEG-Azide

在铜催化剂催化下&#xff0c;叠氮可以与炔基在水溶液中发生click环化反应&#xff0c;生成含氮五元杂环。修饰性PEG广泛应用于修饰蛋白类药物、肽类化合物、有机小分子药物、生物材料等。 产品名称 叠氮聚乙二醇丙烯酰胺 N3-PEG-ACA 中文名称 叠氮PEG丙烯酰胺 丙烯酰胺P…

[附源码]Python计算机毕业设计SSM基于web动物园网站(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

(附源码)php 网上投票系统 毕业设计 121500

基于PHP网上投票系统 摘 要 随着全球Internet的迅猛发展和计算机应用的普及&#xff0c;特别是近几年无线网络的广阔覆盖以及无线终端设备的爆炸式增长&#xff0c;使得人们能够随时随地的访问网络&#xff0c;以获取最新信息、参与网络活动、和他人在线互动。为了能及时地了解…

SpringMVC学习:一、概念、入门

SpringMVC 1.SpringMVC简介 ​ Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web 框架&#xff0c;即使用了MVC架构模式的思想&#xff0c;将web 层进行职责解耦&#xff0c;基于请求驱动指的就是使用请求-响应模型&#xff0c;框架的目的就是…

【C语言刷题】牛客网编程入门130题--精选题目(编程初学者赶紧进来!!!)

牛客编程入门130题–精选&#xff08;一&#xff09; 前言 以下题目来自牛客网的编程入门训练题库(<—)&#xff0c;题库适合大一&#xff0c;大二学生&#xff0c;题目有难有易&#xff0c;主要偏向入门。 不过里面还是有很多不错的题目&#xff0c;节约时间&#xff0c;没…

VM系列振弦采集模块 温度传感器使用及UART 通讯参数

VM系列振弦采集模块 温度传感器使用及UART 通讯参数 VMXXX 模块支持外接温度传感器&#xff0c;通过设置寄存器 TEMP_EX 的值来选择外接温度传感器的类型&#xff0c; 通过读取寄存器 TEMP 来获取实时的温度传感器测量值&#xff0c; 温度计算参数寄存器 TEMP_PAR1和 TEMP_PAR…

十一月券商金工精选

✦ 研报目录 ✦ ✦ 简述 ✦ 按发布时间排序 国信证券 财报中的竞争对手分析能否用来预测股票收益&#xff1f; 发布日期&#xff1a;2022-11-01 关键词&#xff1a;股票、文本分析、竞争对手 主要内容&#xff1a;竞争对手提及次数被定义为一家公司在全市场所有公司的最新…

VCS学习1

1、Verilog simulation event queue&#xff08;Verilog 仿真时间队列&#xff09; 龟腚&#xff1a; VCS大概的处理Verilog代码的流程&#xff1a; 上述流程在t0之前&#xff0c;先对一些不存在延时的一些语句进行处理&#xff0c;然后到达t0时刻&#xff0c;也称为current t…