springboot——四大核心之指标监控(actuator)(代码片段)

张起灵-小哥 张起灵-小哥     2023-02-01     638

关键词:

1.写在前面

首先肯定要说一下SpringBoot的四大核心了:

  • 自动装配:简单配置甚至零配置即可运行项目
  • 起步依赖:场景启动器
  • Actuator:指标监控
  • 命令行界面 :命令行

这篇文章呢,我来和大家聊聊指标监控这个东西。


2.SpringBoot Actuator

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

要开启指标监控功能,首先需要在pom文件种添加如下依赖:

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

然后在配置文件中先做如下配置:

server:
  port: 8080

# 暴露所有监控信息为HTTP
management:
  endpoints:
    enabled-by-default: true # 默认开启所有监控端点信息
    web:
      exposure:
        include: '*' # 以web方式暴露所有端点

然后启动项目,进行测试:

下图中测试得到的内容就是目前项目中可以监控到的各种指标参数信息。

在指标监控这个功能中,有一个经常提到的词叫:端点。那么常用常见的端点如下图:👇👇👇

上面我们访问指标监控的url是:http://localhost:8080/actuator/ 即可获取到所有端点信息。那么如果想要获取某个端点信息,url就应该是:

http://localhost:8080/actuator/endpointName/detailPath。


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

重要的几点:

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

提供详细的、层级的、空间指标信息,这些信息可以被pull(主动推送)或者push(被动获取)方式得到;

  • 通过Metrics对接多种监控系统
  • 简化核心Metrics开发
  • 添加自定义Metrics或者扩展已有Metrics

上面的这些测试结果就是我们根据当前项目,获取到某个端点的详细指标信息。


除此之外,我们也可以对这些端点进行手动开启或者禁用。(参见下面的配置文件)

server:
  port: 8080

# 暴露所有监控信息为HTTP
management:
  endpoints:
    enabled-by-default: false # 默认开启所有监控端点信息
    web:
      exposure:
        include: '*' # 以web方式暴露所有端点
# 需要开启或者禁用某个Endpoint
# 配置模式为 management.endpoint.<endpointName>.enabled = true/false
  endpoint:
    health:
      show-details: always # 总是显示health端点的详细信息
      enabled: true
    info:
      enabled: true
    beans:
      enabled: true

上面的测试截图就是我们手动的开启某些端点、同时关闭了某些端点之后的结果。



3.定制化Endpoint

3.1 定制health端点信息

以上的所有内容都是在使用SpringBoot为我们提供的官方的Endpoint,那么我们也是可以自定义Endpoint的(也即定制化Endpoint)。

有两种方式:①继承AbstractHealthIndicator抽象类(doHealthCheck(Health.Builder builder)方法);②实现HealthIndicator接口(重写health()方法)。我是用第一种方法简单做个测试吧。

package com.szh.boot.health;

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;

/**
 *
 */
@Component
public class MyComHealthIndicator extends AbstractHealthIndicator 

    /**
     * 真实的检查方法
     * @param builder
     * @throws Exception
     */
    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception 
        Map<String,Object> map = new HashMap<>();
        //模拟检查过程
        if (1 == 1) 
//            builder.up(); //健康
            builder.status(Status.UP);
            map.put("count",1);
            map.put("ms",100);
         else 
//            builder.down(); //宕机
            builder.status(Status.DOWN);
            map.put("error","连接超时");
            map.put("ms",3000);
        

        builder.withDetail("code",20001)
                .withDetails(map);
    

配置文件如下:👇👇👇

server:
  port: 8080

# 暴露所有监控信息为HTTP
management:
  endpoints:
    enabled-by-default: false # 默认开启所有监控端点信息
    web:
      exposure:
        include: '*' # 以web方式暴露所有端点
# 需要开启或者禁用某个Endpoint
# 配置模式为 management.endpoint.<endpointName>.enabled = true/false
  endpoint:
    health:
      show-details: always # 总是显示health端点的详细信息
      enabled: true

然后我们启动测试,访问路径:http://localhost:8080/actuator/health。从结果中看到有一个端点myCom就是我们自定义的(命名方式就是 MyComHealthIndicator 类去掉后面的 HealthIndicator)。

3.2 定制info端点信息

首先在配置文件中添加如下内容:(最后几行)

server:
  port: 8080

# 暴露所有监控信息为HTTP
management:
  endpoints:
    enabled-by-default: false # 默认开启所有监控端点信息
    web:
      exposure:
        include: '*' # 以web方式暴露所有端点
# 需要开启或者禁用某个Endpoint
# 配置模式为 management.endpoint.<endpointName>.enabled = true/false
  endpoint:
    health:
      show-details: always # 总是显示health端点的详细信息
      enabled: true
    info:
      enabled: true
    beans:
      enabled: true
info:
  appName: spring-boot-actuator-endpoint-info
  version: 2.0.0
  mavenProjectName: @project.artifactId@
  mavenProjectVersion: @project.version@

然后创建一个类,实现 InfoContributor 这个接口,并且重写接口中的 contribute(Info.Builder builder) 方法。

package com.szh.boot.info;

import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.stereotype.Component;

import java.util.Collections;

/**
 *
 */
@Component
public class ExampleInfoContributor implements InfoContributor 

    @Override
    public void contribute(Info.Builder builder) 
        builder.withDetail("example", Collections.singletonMap("key","value"));
    


最后我们启动测试一下,访问路径:http://localhost:8080/actuator/info。得到的数据就是我们上面通过代码写好的内容。

springboot——四大核心之指标监控(actuator)(代码片段)

1.写在前面首先肯定要说一下SpringBoot的四大核心了:自动装配:简单配置甚至零配置即可运行项目起步依赖:场景启动器Actuator:指标监控命令行界面:命令行这篇文章呢,我来和大家聊聊指标监控这个东... 查看详情

springboot四大核心之actuator

参考技术A四大核心1、Actuator:springboot程序监控器2、自动装配:简单配置甚至零配置即可运行项目3、starter:jar包的引入,解决jar版本冲突问题4、CLI:命令行actuator这是springboot程序的监控系统,可以实现健康检查,info信息等。... 查看详情

springboot——springboot四大核心之自动装配(源码解析)(代码片段)

...配原理            5.总结1.开始首先肯定要说一下SpringBoot的四大核心了:自动装配:简单配置甚至零配置即可运行项目起步依赖࿱ 查看详情

springboot——springboot四大核心之起步依赖(自定义starter)(代码片段)

...目录:1.开始2.聊聊起步依赖3.自定义starter3.1新建一个SpringBoot普通项目3.2在这个项目的pom文件添加依赖3.3自定义一个XXXProperties属性配置类3.4自定义一个Service3.5自定义一个XXXAutoConfig自动配置类3.6重点:spring.factories配置文... 查看详情

springboot2核心功能---指标监控(代码片段)

一、SpringBootActuator1.1、简介未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。&l... 查看详情

全栈性能实施之性能监控分析

品课学院全栈性能之监控课程主要围绕四大主题:一是推动性能理论认知与技术能力持续提升;二是应对理念多样化、力量多极化的认知世界;三是消除技术认知和问题分析等误入分歧;四是塑造灵活的测试技术治理!!!操作... 查看详情

springboot2.0之监控管理

Springboot监控中心: 针对微服务的服务状态,服务器的内存变化(内存、线程、日志管理等)检测服务配置连接地址是否有用(有些懒加载的情况下,用的时候发现卧槽不能用)模拟访问,懒加载。统计有多少个bean(Spring容器... 查看详情

springboot健康检查度量指标监控,一文搞定!(代码片段)

...微服务应用全部监控起来的任务。我们的微服务应用都是SpringBoot 查看详情

springboot服务监控,健康检查,线程信息,jvm堆信息,指标收集,运行情况监控等!

...微服务应用全部监控起来的任务。我们的微服务应用都是SpringBoot应用,因此就自然而然的想到了借助SpringBoot的Actuator模块。本篇是我在完成这个工单之后,对SpringBootActuator模块学习应用的总结。在本篇文章中,你可以学习到:1... 查看详情

springboot四大核心组件(代码片段)

前言先透露一下,四大组件分别是:starter,autoconfigure,CLI以及actuator。下面我们就来详细介绍一些他们有什么用。一、SpringBootStarter1.1Starter的应用示例<dependency>    <groupId>org.springframework.boot</groupId& 查看详情

监控利器prometheus——prometheus+grafana监控springboot项目业务指标监控(代码片段)

Prometheus+Grafana监控SpringBoot项目业务指标监控1、SpringBoot项目配置2、prometheus添加配置3、Grafana配置1、SpringBoot项目配置(1)maven依赖<dependency><groupId>org.springframework.boot</groupId>&l 查看详情

监控利器prometheus——prometheus+grafana监控springboot项目业务指标监控(代码片段)

Prometheus+Grafana监控SpringBoot项目业务指标监控1、SpringBoot项目配置2、prometheus添加配置3、Grafana配置1、SpringBoot项目配置(1)maven依赖<dependency><groupId>org.springframework.boot</groupId>&l 查看详情

千万日活级产品人必备:数据监控后台之数据指标怎么选?

通过核心业务驱动是快速搭建数据监控指标体系的不二法则!一.为什么要有数据监控后台?随着创业大潮的兴起,市场中很多初创公司在初期为了快速上线,往往选择只进行功能开发,而认为数据后台在初期没有太多作用,觉... 查看详情

springboot2.x(十六):应用监控之springbootactuator使用及配置

Actuator简介Actuator是SpringBoot提供的对应用系统的自省和监控功能。通过Actuator,可以使用数据化的指标去度量应用的运行情况,比如查看服务器的磁盘、内存、CPU等信息,系统的线程、gc、运行状态等等。Actuator通常通过使用HTTP和... 查看详情

springboot四大神器之auto-configuration

SpringBoot自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @ConfigurationProperties 等几个注解来进行自动配置完成的。@EnableAutoConfiguration 开启自动配置 查看详情

springboot2---指标监控(代码片段)

指标监控1、SpringBootActuator1、简介2、1.x与2.x的不同3、如何使用2、ActuatorEndpoint1、最常使用的端点最常用的Endpoint2、HealthEndpoint3、MetricsEndpoint4、管理Endpoints1、开启与禁用Endpoints2、暴露Endpoints(监控端点)定制Endpoint1、定制一个组件... 查看详情

mybatis四大核心对象之parameterhandler

参考技术AParameterHandler是MyBatis四大核心对象之一,ParameterHandler相比于其他的组件就简单很多了,ParameterHandler译为参数处理器,负责为PreparedStatement的sql语句参数动态赋值,这个接口很简单只有两个方法:MyBatis为ParameterHandler只提... 查看详情

springboot度量指标监控与健康检查和可视化监控应用springbootadmin

...            使用可视化监控应用SpringBootAdmin  使用步骤:    SpringBootAdmin的使用是需要建立服务端和客户端的    服务端:独立的项目,会将收集到的数据在自己的图形界面中展示   查看详情