前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringBoot掌握的差不多了,就剩下一个Actuator没搞定了,本文详细来介绍!!!

SpringBoot掌握的差不多了,就剩下一个Actuator没搞定了,本文详细来介绍!!!

作者头像
用户4919348
发布于 2021-09-08 07:01:10
发布于 2021-09-08 07:01:10
1.6K00
代码可运行
举报
文章被收录于专栏:波波烤鸭波波烤鸭
运行总次数:0
代码可运行

SpringBoot自动装配原理 SpringBoot的自定义Starter

Actuator(监控)

1. Actuator介绍

  通过前面的介绍我们明白了SpringBoot为什么能够很方便快捷的构建Web应用,那么应用部署上线后的健康问题怎么发现呢?在SpringBoot中给我们提供了Actuator来解决这个问题。

官网地址:https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html

Spring Boot includes a number of additional features to help you monitor and manage your application when you push it to production. You can choose to manage and monitor your application by using HTTP endpoints or with JMX. Auditing, health, and metrics gathering can also be automatically applied to your application. ​ Spring Boot包括许多附加特性,可以帮助您在将应用程序投入生产时监视和管理应用程序。您可以选择使用HTTP端点或使用JMX来管理和监视应用程序。审计、运行状况和度量收集也可以自动应用于您的应用程序。

  使用Actuator我们需要添加依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2.端点(Endpoints)

  执行器端点(endpoints)可用于监控应用及与应用进行交互,Spring Boot包含很多内置的端点,你也可以添加自己的。例如,health端点提供了应用的基本健康信息。    每个端点都可以启用或禁用。这控制着端点是否被创建,并且它的bean是否存在于应用程序上下文中。要远程访问端点,还必须通过JMX或HTTP进行暴露,大部分应用选择HTTP,端点的ID映射到一个带/actuator前缀的URL。例如,health端点默认映射到/actuator/health

注意:   Spring Boot 2.0的端点基础路径由“/”调整到”/actuator”下,如:/info调整为/actuator/info 可以通过以下配置改为和旧版本一致:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management.endpoints.web.base-path=/

  默认在只放开了healthinfo两个 Endpoint。

  如果要放开更多的Endpoint,我们需要配置如下信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management.endpoints.web.exposure.include=*

  以下是SpringBoot中提供的Endpoint。

ID

描述

默认启用

auditevents

显示当前应用程序的审计事件信息

Yes

beans

显示一个应用中所有Spring Beans的完整列表

Yes

conditions

显示配置类和自动配置类(configuration and auto-configuration classes)的状态及它们被应用或未被应用的原因

Yes

configprops

显示一个所有@ConfigurationProperties的集合列表

Yes

env

显示来自Spring的 ConfigurableEnvironment的属性

Yes

flyway

显示数据库迁移路径,如果有的话

Yes

health

显示应用的健康信息(当使用一个未认证连接访问时显示一个简单的’status’,使用认证连接访问则显示全部信息详情)

Yes

info

显示任意的应用信息

Yes

liquibase

展示任何Liquibase数据库迁移路径,如果有的话

Yes

metrics

展示当前应用的metrics信息

Yes

mappings

显示一个所有@RequestMapping路径的集合列表

Yes

scheduledtasks

显示应用程序中的计划任务

Yes

sessions

允许从Spring会话支持的会话存储中检索和删除(retrieval and deletion)用户会话。使用Spring Session对反应性Web应用程序的支持时不可用。

Yes

shutdown

允许应用以优雅的方式关闭(默认情况下不启用)

No

threaddump

执行一个线程dump

Yes

  shutdown端点默认是关闭的,我们可以打开它

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 放开 shutdown 端点
management.endpoint.shutdown.enabled=true

shutdown只支持post方式提交,我们可以使用POSTMAN来提交或者使用IDEA中提供的工具来提交。

  如果使用web应用(Spring MVC, Spring WebFlux, 或者 Jersey),你还可以使用以下端点:

ID

描述

默认启用

heapdump

返回一个GZip压缩的hprof堆dump文件

Yes

jolokia

通过HTTP暴露JMX beans(当Jolokia在类路径上时,WebFlux不可用)

Yes

logfile

返回日志文件内容(如果设置了logging.file或logging.path属性的话),支持使用HTTP Range头接收日志文件内容的部分信息

Yes

prometheus

以可以被Prometheus服务器抓取的格式显示metrics信息

Yes

  现在我们看的health信息比较少,如果我们需要看更详细的信息,可以配置如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# health 显示详情
management.endpoint.health.show-details=always

  再访问测试

  这样一来health不仅仅可以监控SpringBoot本身的状态,还可以监控其他组件的信息,比如我们开启Redis服务。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

  添加Redis的配置信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Redis的 host 信息
spring.redis.host=192.168.100.120

  重启服务,查看 http://localhost:8080/actuator/health

3.监控类型

  介绍几个监控中比较重要的类型

3.1 health

  显示的系统的健康信息,这个在上面的案例中讲解的比较多,不再赘述。

3.2 metrics

  metrics 端点用来返回当前应用的各类重要度量指标,比如内存信息,线程信息,垃圾回收信息等。如下:

各个指标信息的详细描述:

序号

参数

参数说明

是否监控

监控手段

重要度

JVM

1

jvm.memory.max

JVM 最大内存

2

jvm.memory.committed

JVM 可用内存

展示并监控堆内存和 Metaspace

重要

3

jvm.memory.used

JVM 已用内存

展示并监控堆内存和 Metaspace

重要

4

jvm.buffer.memory.used

JVM 缓冲区已用内存

5

jvm.buffer.count

当前缓冲区数

6

jvm.threads.daemon

JVM 守护线程数

显示在监控页面

7

jvm.threads.live

JVM 当前活跃线程数

显示在监控页面;监控达到阈值时报警

重要

8

jvm.threads.peak

JVM 峰值线程数

显示在监控页面

9

jvm.classes.loaded

加载 classes 数

10

jvm.classes.unloaded

未加载的 classes 数

11

jvm.gc.memory.allocated

GC 时,年轻代分配的内存空间

12

jvm.gc.memory.promoted

GC 时,老年代分配的内存空间

13

jvm.gc.max.data.size

GC 时,老年代的最大内存空间

14

jvm.gc.live.data.size

FullGC 时,老年代的内存空间

15

jvm.gc.pause

GC 耗时

显示在监控页面

TOMCAT

16

tomcat.sessions.created

tomcat 已创建 session 数

17

tomcat.sessions.expired

tomcat 已过期 session 数

18

tomcat.sessions.active.current

tomcat 活跃 session 数

19

tomcat.sessions.active.max

tomcat 最多活跃 session 数

显示在监控页面,超过阈值可报警或者进行动态扩容

重要

20

tomcat.sessions.alive.max.second

tomcat 最多活跃 session 数持续时间

21

tomcat.sessions.rejected

超过 session 最大配置后,拒绝的 session 个数

显示在监控页面,方便分析问题

22

tomcat.global.error

错误总数

显示在监控页面,方便分析问题

23

tomcat.global.sent

发送的字节数

24

tomcat.global.request.max

request 最长时间

25

tomcat.global.request

全局 request 次数和时间

26

tomcat.global.received

全局 received 次数和时间

27

tomcat.servlet.request

servlet 的请求次数和时间

28

tomcat.servlet.error

servlet 发生错误总数

29

tomcat.servlet.request.max

servlet 请求最长时间

30

tomcat.threads.busy

tomcat 繁忙线程

显示在监控页面,据此检查是否有线程夯住

31

tomcat.threads.current

tomcat 当前线程数(包括守护线程)

显示在监控页面

重要

32

tomcat.threads.config.max

tomcat 配置的线程最大数

显示在监控页面

重要

33

tomcat.cache.access

tomcat 读取缓存次数

34

tomcat.cache.hit

tomcat 缓存命中次数

CPU

35

system.cpu.count

CPU 数量

36

system.load.average.1m

load average

超过阈值报警

重要

37

system.cpu.usage

系统 CPU 使用率

38

process.cpu.usage

当前进程 CPU 使用率

超过阈值报警

39

http.server.requests

http 请求调用情况

显示 10 个请求量最大,耗时最长的 URL;统计非 200 的请求量

重要

40

process.uptime

应用已运行时间

显示在监控页面

41

process.files.max

允许最大句柄数

配合当前打开句柄数使用

42

process.start.time

应用启动时间点

显示在监控页面

43

process.files.open

当前打开句柄数

监控文件句柄使用率,超过阈值后报警

重要

如果要查看具体的度量信息的话,直接在访问地址后面加上度量信息即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://localhost:8080/actuator/metrics/jvm.buffer.memory.used

添加自定义的统计指标

  除了使用metrics端点默认的这些统计指标外,我们还可以实现自定义统计指标,metrics提供了4中基本的度量类型:

  • gauge 计量器,最简单的度量类型,只有一个简单的返回值,他用来记录一些对象或者事物的瞬时值。
  • Counter 计数器 简单理解就是一种只增不减的计数器,它通常用于记录服务的请求数量,完成的任务数量,错误的发生数量
  • Timer 计时器 可以同时测量一个特定的代码逻辑块的调用(执行)速度和它的时间分布。简单来说,就是在调用结束的时间点记录整个调用块执行的总时间,适用于测量短时间执行的事件的耗时分布,例如消息队列消息的消费速率。
  • Summary 摘要)用于跟踪事件的分布。它类似于一个计时器,但更一般的情况是,它的大小并不一定是一段时间的测量值。在 micrometer 中,对应的类是 DistributionSummary,它的用法有点像 Timer,但是记录的值是需要直接指定,而不是通过测量一个任务的执行时间。

测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
public class UserController {

    static final Counter userCounter = Metrics.counter("user.counter.total","services","bobo");
    private Timer timer = Metrics.timer("user.test.timer","timer","timersample");
    private DistributionSummary summary = Metrics.summary("user.test.summary","summary","summarysample");

    @GetMapping("/hello")
    public String hello(){
        // Gauge
        Metrics.gauge("user.test.gauge",8);
        // Counter
        userCounter.increment(1);
        // timer
        timer.record(()->{
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        summary.record(2);
        summary.record(3);
        summary.record(4);
        return "Hello";
    }
}

访问 http://localhost:8080/hello 这个请求后在看 metrics 信息

多出了我们自定义的度量信息。

3.3 loggers

  loggers是用来查看当前项目每个包的日志级别的。

默认的是info级别。

修改日志级别:

发送POST请求到 http://localhost:8080/actuator/loggers/[包路径]

请求参数为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "configuredLevel":"DEBUG"
}

通过POSTMAN来发送消息

然后再查看日志级别发现已经变动了

控制台也可以看到

3.4 info

  显示任意的应用信息。我们可以在 properties 中来定义

访问:http://localhost:8080/actuator/info

4.自定义Endpoint

  如果我们需要扩展Endpoint,这时我们可以自定义实现,我们可以在类的头部定义如下的注解

@Endpoint @WebEndpoint @ControllerEndpoint @RestControllerEndpoint @ServletEndpoint

  再给方法添加@ReadOperation,@ WritOperation或@DeleteOperation注释后,该方法将通过JMX自动公开,并且在Web应用程序中也通过HTTP公开。

于方法的注解有以下三种,分别对应get post delete 请求

Operation

HTTP method

@ReadOperation

GET

@WriteOperation

POST

@DeleteOperation

DELETE

案例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 自定义Endpoint
 */
@Component
@Endpoint(id = "sessions")
public class MyHealthEndPoint  {

    /**
    * @Selector 获取传递的参数
    */
    @ReadOperation
    public Info get(@Selector String name){
        return new Info(name,"18");
    }
}

5.Actuator的两种监控形态

  • http
  • jmx [Java Management Extensions] Java管理扩展

放开jmx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 放开 jmx 的 endpoint
management.endpoints.jmx.exposure.include=*
spring.jmx.enabled=true

通过jdk中提供的jconsole来查看

6.监控系统

  SpringBoot可以收集监控数据,但是查看不是很方便,这时我们可以选择开源的监控系统来解决,比如Prometheus

  Prometheus在可视化方面效果不是很好,可以使用grafana来实现

6.1 Prometheus

  先来安装Prometheus:官网:https://prometheus.io/download/ 然后通过wget命令来直接下载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget https://github.com/prometheus/prometheus/releases/download/v2.28.1/prometheus-2.28.1.linux-amd64.tar.gz

然后配置Prometheus。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  - job_name: 'Prometheus'
    static_configs:
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    - targets: ['192.168.127.1:8080']
      labels:
        instance: Prometheus
  • job_name:任务名称
  • metrics_path: 指标路径
  • targets:实例地址/项目地址,可配置多个
  • scrape_interval: 多久采集一次
  • scrape_timeout: 采集超时时间

执行脚本启动应用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./prometheus --config.file=prometheus.yml

访问应用: http://ip:9090

然后在我们的SpringBoot服务中添加 Prometheus的端点,先添加必要的依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>

然后就会有该端点信息

Prometheus服务器可以周期性的爬取这个endpoint来获取metrics数据,然后可以看到

6.2 Grafana

  可视化工具:https://grafana.com/grafana/download

通过wget命令下载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget https://dl.grafana.com/oss/release/grafana-8.0.6-1.x86_64.rpm
sudo yum install grafana-8.0.6-1.x86_64.rpm

启动命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo service grafana-server start
sudo service grafana-server status

访问的地址是 http://ip:3000 默认的帐号密码 admin/admin

登录进来后的页面

添加数据源:

添加Dashboards https://grafana.com/grafana/dashboards 搜索SpringBoot的 Dashboards

找到Dashboards的ID

然后导入即可

点击Load出现如下界面

然后就可以看到对应的监控数据了

到此Actuator的相关内容就介绍完了!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/07/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
面试官:SpringBoot 服务监控怎么做?线程,JVM堆信息怎么收集?
今年面试了非常多的程序员,不少人简历中写着会 SpringCloud、SpringBoot。于是我问,你们的服务监控是用什么做的?不少人就当场露馅了,我自己都感觉很不好意思继续追问,感觉圆场。
架构师修炼
2021/09/10
9370
面试官:SpringBoot 服务监控怎么做?线程,JVM堆信息怎么收集?
Spring Boot Actuator监控使用详解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
程序新视界
2019/11/20
1.8K0
springboot研究:springboot自带监控actuator
springboot中自带监控工具actuator,在对监控要求不高的情况下,使用actuator就可以满足系统监控要求了。使用actuator,需要添加依赖
jinjunzhu
2020/08/20
7190
SpringBoot3 整合Prometheus + Grafana,实现可观测
确保可以访问到部署好的服务,http://192.168.254.129:8080/actuator/prometheus
鱼找水需要时间
2023/08/03
1.8K0
SpringBoot3 整合Prometheus + Grafana,实现可观测
树义带你学 Prometheus(六):Spring Boot Actuator 实现应用监控
前面的例子中,我们学习的都是 Prometheus 自身的内容,即监控的都是机器或者系统层面的指标。那么如果我们需要对 Java 应用做监控,例如:监控 JVM 的信息,监控 Spring Bean 的信息。那我们应该怎么实现呢?
陈树义
2020/10/27
1.7K0
树义带你学 Prometheus(六):Spring Boot Actuator 实现应用监控
Spring Boot Actuator解析
Actuator 是 SpringBoot 项目中一个非常强大一个功能,有助于对应用程序进行监视和管理,通过 Restful Api 请求来监管、审计、收集应用的运行情况。
Luga Lee
2021/12/09
9740
Spring Boot Actuator解析
Spring学习笔记(二十九)——SpringBoot Actuator指标监控
在项目上线后,或者未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。
不愿意做鱼的小鲸鱼
2022/09/26
1.1K0
Spring学习笔记(二十九)——SpringBoot Actuator指标监控
SpringBoot Actuator — 埋点和监控
监控机器环境的性能和业务流程或逻辑等各项数据,并根据这些数据生成对应的指标,那么我们就称为数据埋点。比如我们想知道某个接口调用的 TPS、机器 CPU 的使用率,这些都可以用到数据埋点
晚上没宵夜
2021/11/16
1.4K0
SpringBoot:模块探究之spring-boot-actuator
spring-boot-actuator 模块 是 spring-boot 用来查询或监控项目中各种组件、维度的度量指标(如:环境变量信息、日志级别、SpringBean 信息、组件(Redis、Mq、DB)健康状态)时使所用的模块。
栗筝i
2022/12/15
1.2K0
SpringBoot:模块探究之spring-boot-actuator
SpringBoot服务监控机制我悟了!
任何一个服务如果没有监控,那就是两眼一抹黑,无法知道当前服务的运行情况,也就无法对可能出现的异常状况进行很好的处理,所以对任意一个服务来说,监控都是必不可少的。
二哥聊运营工具
2022/07/11
5100
SpringBoot服务监控机制我悟了!
Spring Boot 2.X(十六):应用监控之 Spring Boot Actuator 使用及配置
Actuator 是 Spring Boot 提供的对应用系统的自省和监控功能。通过 Actuator,可以使用数据化的指标去度量应用的运行情况,比如查看服务器的磁盘、内存、CPU等信息,系统的线程、gc、运行状态等等。
朝雾轻寒
2019/11/14
1.8K0
Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!
前言 去年我们项目做了微服务1.0的架构转型,但是服务监控这块却没有跟上。这不,最近我就被分配了要将我们核心的微服务应用全部监控起来的任务。我们的微服务应用都是SpringBoot 应用,因此就自然而
搜云库技术团队
2020/02/19
9.1K0
聊聊Spring Boot Actuator
在本文中,我们将介绍Spring Boot Actuator。我们将首先介绍基础知识,然后详细讨论Spring Boot 1.x和2.x中的可用内容。
东溪陈姓少年
2020/08/06
1.2K0
Spring Boot 使用Actuator监控应用
今天是突然喵到这个知识点(Actuator)的,我以前确实不知道这个玩意可以这么玩,像是发现新大陆一样,整了会它,还学会了如何优雅的关闭SpringBoot应用😂。 很喜欢一句话:”八小时内谋生活,八小时外谋发展“ 我们:"待别日相见时,都已有所成” 看看小风景再继续哈 Spring Boot 使用Actuator监控应用 一、前言 1)概述: 2)分类: 3)主要接口: 二、快速开始 步骤: 导入依赖: 书写配置: 启动测试、命令解释: 1、actuator 2、health 3、i
宁在春
2022/10/31
7810
Spring Boot 使用Actuator监控应用
Spring Boot Actuator详解与深入应用(一):Actuator 1.x
Spring Boot Actuator提供了生产上经常用到的功能(如健康检查,审计,指标收集,HTTP跟踪等),帮助我们监控和管理Spring Boot应用程序。这些功能都可以通过JMX或HTTP端点访问。
aoho求索
2018/12/14
1.6K0
springboot 学习笔记(四) 初识actuator
Spring Boot包含许多附加功能,可帮助您在将应用程序投入生产时监视和管理应用程序。 您可以选择使用HTTP端点或JMX来管理和监控您的应用程序。 审计,健康和指标收集也可以自动应用于您的应用程序。
全栈程序员站长
2022/06/29
1K0
SpringBoot监控工具之《Actuator》
有句话怎么说呢?学的越多,不知道的就越多,现在感觉学的越来越废了,不学又不行,最近一直在钻研 SpringBoot相关的内容,准备先写一些基础的案例代码,后续研究的更加透彻,写一些有内涵的刨析文章发表出来,下面开始吧!
框架师
2021/11/22
1.7K0
SpringBoot监控工具之《Actuator》
Spring Boot Actuator 介绍-Spring Boot教程深入浅出系列
在本文中,我们介绍了 Spring Boot Actuator。我们将首先介绍基础知识,然后详细讨论 Spring Boot 2.x 与 1.x 中可用的内容。
jack.yang
2025/04/05
1210
聊聊Spring Boot服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!
来源:juejin.im/post/5e2179def265da3e152d2561
芋道源码
2021/09/06
1.7K0
Spring Boot Actuator
Spring Boot Actuator 在Spring Boot第一个版本发布的时候就有了,它为Spring Boot提供了一系列产品级的特性:监控应用程序,收集元数据,运行情况或者数据库状态等。
程序那些事
2020/07/07
6530
推荐阅读
相关推荐
面试官:SpringBoot 服务监控怎么做?线程,JVM堆信息怎么收集?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验