Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring学习笔记(二十九)——SpringBoot Actuator指标监控

Spring学习笔记(二十九)——SpringBoot Actuator指标监控

作者头像
不愿意做鱼的小鲸鱼
发布于 2022-09-26 10:11:24
发布于 2022-09-26 10:11:24
1.2K00
代码可运行
举报
文章被收录于专栏:web全栈web全栈
运行总次数:0
代码可运行

SpringBoot Actuator简介&使用

简介

在项目上线后,或者未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。

依赖坐标

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

SpringBoot Actuator 1.x与2.x的不同

如何使用

  • 引入场景
  • 访问 http://localhost:8080/actuator/
  • 暴露所有监控信息为HTTP
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management:
  endpoints:
    enabled-by-default: true #暴露所有端点信息
    web:
      exposure:
        include: '*'  #以web方式暴露
  • 测试引入是否成功
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://localhost:8080/actuator/beans
http://localhost:8080/actuator/configprops
http://localhost:8080/actuator/metrics
http://localhost:8080/actuator/metrics/jvm.gc.pause
http://localhost:8080/actuator/endpointName/detailPath

Actuator Endpoint指标端点

1. 最常使用的端点

最常用的Endpoint * Health:监控状况 * Metrics:运行时指标 * Loggers:日志记录

2、Health Endpoint

健康检查端点,我们一般用于在云平台,平台会定时的检查应用的健康状况,我们就需要Health Endpoint可以为平台返回当前应用的一系列组件健康状况的集合。

访问信息路径:http://localhost:8080/actuator/health

重要的几点: * health endpoint返回的结果,应该是一系列健康检查后的一个汇总报告 * 很多的健康检查默认已经自动配置好了,比如:数据库、redis等 * 可以很容易的添加自定义的健康检查机制

3. Metrics Endpoint

提供详细的、层级的、空间指标信息,这些信息可以被pull(主动推送)或者push(被动获取)方式得到; * 通过Metrics对接多种监控系统 * 简化核心Metrics开发 * 添加自定义Metrics或者扩展已有Metrics

访问信息路径:http://localhost:8080/actuator/metrics

4. 管理Endpoints

  1. 开启与禁用Endpoints

* 默认所有的Endpoint除了shutdown都是开启的。 * 需要开启或者禁用某个Endpoint。配置模式为 management.endpoint.<endpointName>.enabled = true

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management:
  endpoint:
    beans:
      enabled: true
  • 或者禁用所有的Endpoint然后手动开启指定的Endpoint
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management:
  endpoints:
    enabled-by-default: false
  endpoint:
    beans:
      enabled: true
    health:
      enabled: true
  1. 暴露Endpoints 支持的暴露方式

* HTTP:默认只暴露health和info Endpoint * JMX:默认暴露所有Endpoint * 除了health和info,剩下的Endpoint都应该进行保护访问。如果引入SpringSecurity,则会默认配置安全访问

开启Endpoints和暴露Endpoints可以做以下配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## management 是所有actuator的配置
## management.endpoint.端点名.xxxx 对某个端点的具体配置
management:
  endpoints:
    #默认开启所有监控端点
    enabled-by-default: true
    web:
      exposure:
        ## 以web方式暴露所有端点
        include: '*'

  endpoint:   #对某个端点的具体配置
    health:
      show-details: always
      enabled: true

    info:
      enabled: true

    beans:
      enabled: true

    metrics:
      enabled: true

定制 Endpoint端点

在开发中,如果需要自己定义指标端点用于监控某一项功能或者模块,我们就可以使用自己定制 Endpoint端点,来达到自定义数据统计和指标监控的效果。 尝试定制四类端点信息 1. 定制 Health 信息 2. 定制info信息 3. 定制Metrics信息 4. 定制Endpoint

目录结构如下

1. 定制 Health 信息

  1. yml配置显示详细信息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management:
    health:
      enabled: true
      show-details: always #总是显示详细信息。可显示每个模块的状态信息
  1. 自定义健康组件 MyComHealthIndicator.java MyComHealthIndicator其中HealthIndicator是固定写法,必须要有,myCom 是该健康组件的名字
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.Status;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;
/**
 * @author tao
 * @date 2021-08-25 23:09
 * 概要:自定义健康组件
 */

//将组件放在容器中,其中 myCom 是该健康组件的名字
@Component
public class MyComHealthIndicator extends AbstractHealthIndicator {
    /**
     * 真实的检查方法
     *
     * @param builder
     * @throws Exception
     */
    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        //mongodb 获取连接进行测试
        Map<String, Object> map = new HashMap<>();
        //检查完成
        if (1 == 1) {
            //健康
            //builder.up();
            builder.status(Status.UP);
            map.put("count", 1);
            map.put("ms", 200);
        } else {
            //宕机
            builder.down();
            builder.status(Status.OUT_OF_SERVICE);
            map.put("err", "连接超时");
            map.put("ms", 5000);
        }
        builder.withDetail("code", 100).withDetails(map);
    }
}
  1. 测试结果 访问路径:http://localhost:8080/actuator/health

2. 定制info信息

常用两种方式 1、编写配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#定制监控的info信息
info:
  appName: @project.name@
  version: 2.0.1
  #使用@@可以获取maven的pom文件值,需要在pom文件里面添加配置信息
  mavenProjectName: @project.artifactId@
  mavenProjectVersion: @project.version@

注意: 使用@@可以获取maven的pom文件值,需要在pom文件里面添加配置信息 但是如果使用@@表达式报错或者没有提示时,可能时因为pom.mxl中没有打开@@获取pom文件信息 需要如下操作: * 在<build>标签下加入以下配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            <resources>
               <resource>
                  <directory>src/main/resources</directory>
                  <filtering>true</filtering>
               </resource>
            </resources>
  • 在<plugins>下加入以下配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--允许使用@@获取pom文件信息-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <delimiters>
                        <delimiter>@</delimiter>
                    </delimiters>
                    <useDefaultDelimiters>false</useDefaultDelimiters>
                </configuration>
            </plugin>

启用配置后就OK了。 2. 编写InfoContributor.java配置类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
 * @author tao
 * @date 2021-08-25 23:42
 * 概要:
 */
@Component
public class AppInfoContributor implements InfoContributor {
    @Override
    public void contribute(Info.Builder builder) {
        builder.withDetail("msg", "你好");
        builder.withDetail("hello", "如我西沉");
        Map<String, Object> map = new HashMap<>();
        map.put("phoneNum", "1205529635");
        map.put("QQ", "1205529635");
        map.put("name", "Nick");
        builder.withDetails(map);
    }
}
  1. 测试结果 访问路径:http://localhost:8080/actuator/info

3. 定制Metrics信息

  1. SpringBoot支持自动适配的Metrics >Micrometer 为 Java 平台上的性能数据收集提供了一个通用的 API,它提供了多种度量指标类型(Timers、Guauges、Counters等),同时支持接入不同的监控系统,例如 Influxdb、Graphite、Prometheus 等。我们可以通过 Micrometer 收集 Java 性能数据,配合 Prometheus 监控系统实时获取数据,并最终在 Grafana 上展示出来,从而很容易实现应用的监控。 > Micrometer 提供了如下几种不同类型的计量器:

* 计数器(Counter): 表示收集的数据是按照某个趋势(增加/减少)一直变化的,也是最常用的一种计量器,例如接口请求总数、请求错误总数、队列数量变化等。 * 计量仪(Gauge): 表示搜集的瞬时的数据,可以任意变化的,例如常用的 CPU Load、Mem 使用量、Network 使用量、实时在线人数统计等, * 计时器(Timer): 用来记录事件的持续时间,这个用的比较少。 * 分布概要(Distribution summary): 用来记录事件的分布情况,表示一段时间范围内对数据进行采样,可以用于统计网络请求平均延迟、请求延迟占比等。

在SpringBoot集成的Actuator中,MeterRegistry提供的方法如下

2. 增加定制Metrics 场景: 在自己编写了一个查询所有用户的接口后,想统计这个接口被调用的次数,因此在Actuator增加一个定制的Metrics指标,来监控接口的使用情况。 步骤: * 定义一个计量器(Counter) * 在构造方法中传入MeterRegistry * 使用meterRegistry构造一个计量器(counter) * 使用计量器进行增加数据:counter.increment();

因此可以在Service层编写定制Metrics的逻辑。 实现代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @author tao
 * @date 2021-08-16 22:33
 * 概要:
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Autowired
    private UserMapper userMapper;
    private Counter counter;

    //在构造方法中传入MeterRegistry
    public UserServiceImpl(MeterRegistry meterRegistry) {
        counter = meterRegistry.counter("UserService.findAll.count");
    }

    @Override
    public List<User> findAll() {
        //增加数据
        counter.increment();
        return userMapper.selectList(null);
    }
}
  1. 测试效果

* 访问路径:http://localhost:8080/actuator/metrics 会发现多了一个指标

这个是定制的metrics * 可以访问:http://localhost:8080/actuator/metrics/UserService.findAll.count 拿到计量监控数据

* 调用几次接口后

4. 自定义Endpoint

  1. 可以通过下面路径查看所有的Endpoint http://localhost:8080/actuator
  1. 自定义Endpoint 场景:开发ReadinessEndpoint来管理程序是否就绪,或者LivenessEndpoint来管理程序是否存活;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.boot.actuate.endpoint.annotation.WriteOperation;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.Map;
/**
 * @author tao
 * @date 2021-08-26 0:45
 * 概要:自定义监控端点
 */
@Component
@Endpoint(id = "myService")
public class MyServiceEndpoint {
    @ReadOperation
    public Map getDockerInfo() {
        return Collections.singletonMap("info", "docker started...");
    }

    @WriteOperation
    private void stopDocker() {
        System.out.println("docker stop....");
    }
}

注意:@Spring Boot会去扫描@EndPoint注解下的@ReadOperation, @WriteOperation, @DeleteOperation注解,分别对应生成Get/Post/Delete的Mapping。注解中有个produces参数,可以指定media type, 如:application/json等。 3. 测试效果 配置好自定义EndPoint后,查看:http://localhost:8080/actuator 会发现已经出现有自己配置的EndPoint端点

SpringBoot Actuator指标监控可视化

SpringBoot提供了一个开源的SpringBoot Actuator指标监控可视化项目,可以点击下面链接进行下载学习,也可以拿到我文章末尾的代码源码。 https://github.com/codecentric/spring-boot-admin

搭建指标监控可视化项目

  1. 建立新SpringBoot工程
  2. 导入下面两个坐标依赖就可以
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
            <version>2.3.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
  1. 更改配置文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 应用名称
spring.application.name=springboot-adminserver
## 应用服务 WEB 访问端口
server.port=8888
  1. 在启动类东添加注解@EnableAdminServer运行启动AdminServer
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
@EnableAdminServer
public class SpringbootAdminserverApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootAdminserverApplication.class, args);
    }
}
  1. 直接启动项目
  2. 访问 http://localhost:8888/就可以进入指标监控可视化页面
  1. 需要在客户端那边配置上可视化项目的路径,才能获取到要监控项目的指标数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  boot:
    admin:
      client:
        url: http://localhost:8888
        instance:
          prefer-ip: true #使用IP将可视化项目注册进来
  1. 注册好之后就可以看到有应用数据进入可视化面板

可视化监控指标展示

  • 点击应用就可以进入监控数据面板
  • 可以看到将监控的数据都进行了可视化(包括自定义数据)
  • 也可以看到其他的一些信息

源码下载

链接:https://pan.baidu.com/s/1ZWzb3dNo-YnInyBdjTXRqw 提取码:50ap

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot3 整合Prometheus + Grafana,实现可观测
确保可以访问到部署好的服务,http://192.168.254.129:8080/actuator/prometheus
鱼找水需要时间
2023/08/03
1.8K0
SpringBoot3 整合Prometheus + Grafana,实现可观测
重学SpringBoot3-集成Spring Boot Actuator
Spring Boot Actuator 是 Spring Boot 提供的一组内置功能,用于监控和管理应用程序。通过 Actuator,开发者可以轻松获取应用的运行时状态,执行健康检查,监控性能指标,甚至自定义端点来满足特定需求。本文将详细介绍如何在 Spring Boot 3 中整合 Spring Boot Actuator,并展示如何配置和使用 Actuator 提供的核心功能。
CoderJia
2024/10/18
3980
重学SpringBoot3-集成Spring Boot Actuator
Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!
前言 去年我们项目做了微服务1.0的架构转型,但是服务监控这块却没有跟上。这不,最近我就被分配了要将我们核心的微服务应用全部监控起来的任务。我们的微服务应用都是SpringBoot 应用,因此就自然而
搜云库技术团队
2020/02/19
9.1K0
SpringBoot2---指标监控
未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。
大忽悠爱学习
2021/11/15
8070
SpringBoot Actuator — 埋点和监控
监控机器环境的性能和业务流程或逻辑等各项数据,并根据这些数据生成对应的指标,那么我们就称为数据埋点。比如我们想知道某个接口调用的 TPS、机器 CPU 的使用率,这些都可以用到数据埋点
晚上没宵夜
2021/11/16
1.4K0
SpringBoot - 构建监控体系02_定义度量指标和 Actuator 端点
SpringBoot - 构建监控体系01_使用 Actuator 组件实现及扩展系统监控 我们引入了 Spring Boot Actuator 组件来满足 Spring Boot 应用程序的系统监控功能,并重点介绍了如何扩展常见的 Info 和 Health 监控端点的实现方法。
小小工匠
2021/08/17
9840
SpringBoot - 构建监控体系02_定义度量指标和 Actuator 端点
SpringBoot掌握的差不多了,就剩下一个Actuator没搞定了,本文详细来介绍!!!
  通过前面的介绍我们明白了SpringBoot为什么能够很方便快捷的构建Web应用,那么应用部署上线后的健康问题怎么发现呢?在SpringBoot中给我们提供了Actuator来解决这个问题。
用户4919348
2021/09/08
1.6K0
SpringBoot掌握的差不多了,就剩下一个Actuator没搞定了,本文详细来介绍!!!
面试官:SpringBoot 服务监控怎么做?线程,JVM堆信息怎么收集?
今年面试了非常多的程序员,不少人简历中写着会 SpringCloud、SpringBoot。于是我问,你们的服务监控是用什么做的?不少人就当场露馅了,我自己都感觉很不好意思继续追问,感觉圆场。
架构师修炼
2021/09/10
9410
面试官:SpringBoot 服务监控怎么做?线程,JVM堆信息怎么收集?
Spring Boot整合 Prometheus
Micrometer 为 Java 平台上的性能数据收集提供了一个通用的 API,应用程序只需要使用 Micrometer 的通用 API 来收集性能指标即可。Micrometer 会负责完成与不同监控系统的适配工作。这就使得切换监控系统变得很容易。Micrometer 还支持推送数据到多个不同的监控系统。Micrometer类似日志系统中SLF4J。
BUG弄潮儿
2021/08/13
1.5K0
Prometheus + Grafana 监控 SpringBoot
Prometheus 是监控系统,可以从 Springboot 获取监控数据,以时序数据的形式存储,并提供了监控数据的查询服务。
dys
2020/02/19
2K0
springboot(十九):使用Spring Boot Actuator监控应用
微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个环节出现了问题? 在这种框架下,微服务的监控显得尤为重要。本文主要结合Spring Boot Actuator,跟大家一起分享微服务Spring Boot Actuator的常见用法,方便我们在日常中对我们的微服务进行监控治理。 Actuator监控 Spring Boot使用“习惯优于配置的理念”,采用包扫描和自动化配置的机制
纯洁的微笑
2018/04/18
1.3K0
Spring Boot Actuator解析
Actuator 是 SpringBoot 项目中一个非常强大一个功能,有助于对应用程序进行监视和管理,通过 Restful Api 请求来监管、审计、收集应用的运行情况。
Luga Lee
2021/12/09
9830
Spring Boot Actuator解析
SpringBoot监控工具之《Actuator》
有句话怎么说呢?学的越多,不知道的就越多,现在感觉学的越来越废了,不学又不行,最近一直在钻研 SpringBoot相关的内容,准备先写一些基础的案例代码,后续研究的更加透彻,写一些有内涵的刨析文章发表出来,下面开始吧!
框架师
2021/11/22
1.7K0
SpringBoot监控工具之《Actuator》
Spring Boot 使用Actuator监控应用
今天是突然喵到这个知识点(Actuator)的,我以前确实不知道这个玩意可以这么玩,像是发现新大陆一样,整了会它,还学会了如何优雅的关闭SpringBoot应用😂。 很喜欢一句话:”八小时内谋生活,八小时外谋发展“ 我们:"待别日相见时,都已有所成” 看看小风景再继续哈 Spring Boot 使用Actuator监控应用 一、前言 1)概述: 2)分类: 3)主要接口: 二、快速开始 步骤: 导入依赖: 书写配置: 启动测试、命令解释: 1、actuator 2、health 3、i
宁在春
2022/10/31
7840
Spring Boot 使用Actuator监控应用
Spring Boot Actuator监控使用详解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
程序新视界
2019/11/20
1.9K0
05. Springboot admin集成Actuator(一)
Spring Boot Actuator是Spring Boot提供的一个用于监控和管理应用程序的扩展模块。Actuator通过HTTP端点和JMX(Java Management Extensions)提供了一系列功能,包括查看应用程序的运行状况、度量指标、日志、追踪和应用信息。它为开发人员和运维人员提供了方便的手段来监控和管理Spring Boot应用。
有一只柴犬
2024/01/25
4500
05. Springboot admin集成Actuator(一)
Spring Boot (十九):使用 Spring Boot Actuator 监控应用
微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个环节出现了问题?
纯洁的微笑
2019/10/24
7770
Spring Boot Actuator 介绍-Spring Boot教程深入浅出系列
在本文中,我们介绍了 Spring Boot Actuator。我们将首先介绍基础知识,然后详细讨论 Spring Boot 2.x 与 1.x 中可用的内容。
jack.yang
2025/04/05
1510
Spring Boot 2.X(十六):应用监控之 Spring Boot Actuator 使用及配置
Actuator 是 Spring Boot 提供的对应用系统的自省和监控功能。通过 Actuator,可以使用数据化的指标去度量应用的运行情况,比如查看服务器的磁盘、内存、CPU等信息,系统的线程、gc、运行状态等等。
朝雾轻寒
2019/11/14
1.8K0
SpringBoot与监控管理(Actuator)
​ 通过引入 spring-boot-starter-actuator,可以使用 Spring Boot 为我们提供的准生产环境下的应用监控和管理功能。我们可以通过 HTTP, JMX, SSH 协议来进行操作,自动得到审计、健康及指标信息等 。
OY
2022/03/12
7920
SpringBoot与监控管理(Actuator)
推荐阅读
相关推荐
SpringBoot3 整合Prometheus + Grafana,实现可观测
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验