Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊聊springboot项目如何实现自定义actuator端点

聊聊springboot项目如何实现自定义actuator端点

原创
作者头像
lyb-geek
修改于 2021-09-22 03:08:19
修改于 2021-09-22 03:08:19
9480
举报
文章被收录于专栏:Linyb极客之路Linyb极客之路

前言

用过springboot的朋友,可能会知道springboot有四大神器:自动装配、starter、cli、actuator。其中actuator可帮助你在将应用程序推送到生产环境时监控和管理应用程序。你可以选择使用 HTTP 端点或 JMX 来管理和监控你的应用程序。 审计、健康和指标收集也可以自动应用于你的应用程序。

actuator默认为我们内置了以下端点

ID

描述

默认启用

默认公开

auditevents

公开当前应用程序的审计事件信息

Yes

No

beans

显示应用程序中所有Spring bean的完整列表

Yes

No

conditions

显示在配置和自动配置类上评估的条件以及它们是否匹配的原因

Yes

No

configprops

显示所有@ConfigurationProperties对照的列表

Yes

No

env

从Spring的ConfigurableEnvironment中公开属性

Yes

No

flyway

显示已应用的任何Flyway数据库迁移

Yes

No

health

显示应用程序健康信息

Yes

Yes

httptrace

显示HTTP跟踪信息(默认情况下,最后100个HTTP请求-响应交互)

Yes

No

info

显示任意应用程序信息

Yes

Yes

loggers

显示和修改应用程序中记录器的配置

Yes

No

liquibase

显示已应用的任何Liquibase数据库迁移

Yes

No

metrics

显示当前应用程序的“指标”信息

Yes

No

mappings

显示所有@RequestMapping路径对照的列表

Yes

No

scheduledtasks

显示应用程序中调度的任务

Yes

No

sessions

允许从Spring Session支持的会话存储中检索和删除用户会话

Yes

No

shutdown

让应用程序优雅地关闭

No

No

threaddump

执行线程转储

Yes

No

如果你的应用程序是一个web应用程序(Spring MVC、Spring WebFlux或Jersey),你可以使用以下附加端点

ID

描述

默认启用

默认公开

heapdump

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

Yes

No

jolokia

在HTTP上公开JMX bean(当Jolokia在类路径上时,WebFlux不可用)

Yes

No

logfile

返回日志文件的内容,支持使用HTTP Range header来检索日志文件内容的一部分

Yes

No

prometheus

公开指标,该格式可以被Prometheus服务器采集

Yes

No

注: actuator 在springboot 1.X 和springboot 2.X 存在较大的差异,本文以springboot 2.X 作为本文的讲解

通常情况下,actuator内置的端点就可以满足我们的日常需求了,但有时候我们需要自定义端点。下面就列举一下几种常用的自定义端点

自定义端点

自定义前置条件,在pom.xml引入

代码语言:txt
AI代码解释
复制
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

1、自定义health

当内置的health端点信息不满足用来判断我们项目是否健康时,我们可以自定义health

通过实现org.springframework.boot.actuate.health.HealthIndicator接口,形如

代码语言:txt
AI代码解释
复制
@Component
public class CustomHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        int errorCode = check();
        if (errorCode == 1) {
            return Health.down().withDetail("Error Code", errorCode).build();
        }
        return Health.up().build();
    }

    private int check() {
        // perform some specific health check
        return ThreadLocalRandom.current().nextInt(5);
    }

}

或者通过继承org.springframework.boot.actuate.health.AbstractHealthIndicator,形如

代码语言:txt
AI代码解释
复制
@Component("otherCustom")
public class CustomAbstractHealthIndicator extends AbstractHealthIndicator {
    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {

        int errorCode = check();
        if (errorCode == 1) {
            builder.down().down().withDetail("Error Code", errorCode).build();
            return;
        }
        builder.up().build();

    }

    private int check() {
        // perform some specific health check
        return ThreadLocalRandom.current().nextInt(5);
    }
}

推荐使用继承AbstractHealthIndicator 这种方式。在配置文件中作如下配置,可以查看详细的健康信息

代码语言:txt
AI代码解释
复制
management:
   endpoint:
      health:
        show-details: always

通过访问http://ip:port/actuator/health进行查看,形如下

从图片我们可以看出,我们自定义的health端点信息,如果@Component不指定name,形如CustomHealthIndicator ,默认是取custom作为自定义端点对象

2、自定义info

我们可以通过实现org.springframework.boot.actuate.info.InfoContributor接口,来暴露一些我们想展示的信息。形如

代码语言:txt
AI代码解释
复制
@Component
public class CustomInfoContributor implements InfoContributor {

    @Override
    public void contribute(Info.Builder builder) {
        builder.withDetail("customInfo", Collections.singletonMap("hello", "world"));
    }

}

通过访问http://ip:port/actuator/info进行查看,形如下

3、自定义endpoint

有时候我们需要自定义自己的端点,我们可以通过

@Endpoint注解 + @ReadOperation、@WriteOperation、@DeleteOperation注解来实现自定义端点。形如下

代码语言:txt
AI代码解释
复制
@Component
@Endpoint(id = "customEndpoint")
public class CustomEndpoint {

  // @ReadOperation 对应GET请求

  /**
   * 请求示例:
   * GET http://localhost:8080/actuator/customEndpoint/zhangsan/20
   * @param username
   * @param age
   *
   * @return
   */
  @ReadOperation
  public Map<String, Object> endpointByGet(@Selector String username,@Selector Integer age) {
    Map<String, Object> customMap = new HashMap<>();
    customMap.put("httpMethod", HttpMethod.GET.toString());
    customMap.put("username",username);
    customMap.put("age",age);
    return customMap;
  }


  // @WriteOperation 对应POST请求

  /**
   * 请求示例:
   * POST http://localhost:8080/actuator/customEndpoint
   *
   * 请求参数为json格式
   *
   * {
   *     "username": "zhangsan",
   *     "age": 20
   * }
   *
   * @param username 参数都为必填项
   * @param age 参数都为必填项
   * @return
   */
  @WriteOperation
  public Map<String, Object> endpointByPost(String username,Integer age) {
    Map<String, Object> customMap = new HashMap<>();
    customMap.put("httpMethod", HttpMethod.POST.toString());
    customMap.put("username",username);
    customMap.put("age",age);
    return customMap;
  }


  // @DeleteOperation 对应Delete请求

  /**
   * 请求示例:
   * DELETE http://localhost:8080/actuator/customEndpoint
   *
   * @return
   */
  @DeleteOperation
  public Map<String, Object> endpointByDelete() {
    Map<String, Object> customMap = new HashMap<>();
    customMap.put("httpMethod", HttpMethod.DELETE.toString());

    return customMap;
  }

代码片段里面有比较详细的注释,这边就不在论述。这边有个细节就是,我们需要在yml作如下配置来暴露我们自定义的端点

通过

代码语言:txt
AI代码解释
复制
management:
  endpoints:
    web:
      exposure:
        include: customEndpoint

或者

代码语言:txt
AI代码解释
复制
management:
  endpoints:
    web:
      exposure:
        include: "*"

总结

本文仅介绍几种相对通用的自定义端点,更详细的端点介绍可以查看官网,链接如下

https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator

demo链接

https://github.com/lyb-geek/springboot-learning/tree/master/springboot-custom-actuator-endpoint

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
05. Springboot admin集成Actuator(一)
Spring Boot Actuator是Spring Boot提供的一个用于监控和管理应用程序的扩展模块。Actuator通过HTTP端点和JMX(Java Management Extensions)提供了一系列功能,包括查看应用程序的运行状况、度量指标、日志、追踪和应用信息。它为开发人员和运维人员提供了方便的手段来监控和管理Spring Boot应用。
有一只柴犬
2024/01/25
4660
05. Springboot admin集成Actuator(一)
Spring学习笔记(二十九)——SpringBoot Actuator指标监控
在项目上线后,或者未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。
不愿意做鱼的小鲸鱼
2022/09/26
1.2K0
Spring学习笔记(二十九)——SpringBoot Actuator指标监控
SpringBoot2---指标监控
未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。
大忽悠爱学习
2021/11/15
8110
聊聊Spring Boot Actuator
在本文中,我们将介绍Spring Boot Actuator。我们将首先介绍基础知识,然后详细讨论Spring Boot 1.x和2.x中的可用内容。
东溪陈姓少年
2020/08/06
1.2K0
SpringBoot2核心技术-指标监控
--------------- | ------------------------------------------------------------ | | auditevents | 暴露当前应用程序的审核事件信息。需要一个AuditEventRepository组件。 | | beans | 显示应用程序中所有Spring Bean的完整列表。 | | caches | 暴露可用的缓存。 | | conditions | 显示自动配置的所有条件信息,包括匹配或不匹配的原因。 | | configprops | 显示所有@ConfigurationProperties。 | | env | 暴露Spring的属性ConfigurableEnvironment | | flyway | 显示已应用的所有Flyway数据库迁移。 需要一个或多个Flyway组件。 | | health | 显示应用程序运行状况信息。 | | httptrace | 显示HTTP跟踪信息(默认情况下,最近100个HTTP请求-响应)。需要一个HttpTraceRepository组件。 | | info | 显示应用程序信息。 | | integrationgraph | 显示Spring integrationgraph 。需要依赖spring-integration-core。 | | loggers | 显示和修改应用程序中日志的配置。 | | liquibase | 显示已应用的所有Liquibase数据库迁移。需要一个或多个Liquibase组件。 | | metrics | 显示当前应用程序的“指标”信息。 | | mappings | 显示所有@RequestMapping路径列表。 | | scheduledtasks | 显示应用程序中的计划任务。 | | sessions | 允许从Spring Session支持的会话存储中检索和删除用户会话。需要使用Spring Session的基于Servlet的Web应用程序。 | | shutdown | 使应用程序正常关闭。默认禁用。 | | startup | 显示由ApplicationStartup收集的启动步骤数据。需要使用SpringApplication进行配置BufferingApplicationStartup。 | | threaddump | 执行线程转储。 |
yuanshuai
2022/08/22
5510
SpringBoot2核心技术-指标监控
Spring Boot Actuator 介绍-Spring Boot教程深入浅出系列
在本文中,我们介绍了 Spring Boot Actuator。我们将首先介绍基础知识,然后详细讨论 Spring Boot 2.x 与 1.x 中可用的内容。
jack.yang
2025/04/05
1900
SpringBoot应用监控解析:Actuator实现原理
在企业应用中除了要了解 Spring Boot 业务的单元测试、集成测试等功能使用外,在上线之后还需要对线上应用的各项指标(比如,CPU 利用率、内存利用率、数据库连接是否正常、用户请求数据等)进行监控和运维。
愿天堂没有BUG
2022/10/28
1.9K0
SpringBoot应用监控解析:Actuator实现原理
Spring Boot Actuator
Spring Boot Actuator 在Spring Boot第一个版本发布的时候就有了,它为Spring Boot提供了一系列产品级的特性:监控应用程序,收集元数据,运行情况或者数据库状态等。
程序那些事
2020/07/07
6570
SpringBoot 之Actuator.
    Actuator 是 SpringBoot 项目中一个非常强大一个功能,有助于对应用程序进行监视和管理,通过 restful api 请求来监管、审计、收集应用的运行情况。
JMCui
2018/11/07
9500
Spring Boot 从入门到实践系列教程(5)- SpringBoot执行器
在本文中,我们将介绍Spring Boot Actuator。我们将首先介绍基础知识,然后详细讨论Spring Boot 1.x与2.x中可用的内容。
王炸
2019/07/02
1.3K0
Spring Boot 从入门到实践系列教程(5)- SpringBoot执行器
springBoot Actuator 健康监测
spring boot 微服务作为一项在云中部署应用和服务的新技术是当下比较热门话题,而微服务的特点决定了功能模块的部署是分布式的,运行在不同的机器上相互通过服务调用进行交互,业务流会经过多个微服务的处理和传递,在这种框架下,微服务的监控显得尤为重要。我们知道,spring boot 在引入
chinotan
2019/04/03
3.4K0
springBoot Actuator 健康监测
SpringBoot3 整合Prometheus + Grafana,实现可观测
确保可以访问到部署好的服务,http://192.168.254.129:8080/actuator/prometheus
鱼找水需要时间
2023/08/03
1.9K0
SpringBoot3 整合Prometheus + Grafana,实现可观测
Springboot之Actuator服务监控
最近在项目当中,启动了多个微服务项目,想着如何监控启动的项目,然后就找到了Actuator这个东西!!!总结下自己学习到的知识点!!!
海加尔金鹰
2020/06/03
3.3K1
Springboot之Actuator服务监控
SpringBoot - 构建监控体系02_定义度量指标和 Actuator 端点
SpringBoot - 构建监控体系01_使用 Actuator 组件实现及扩展系统监控 我们引入了 Spring Boot Actuator 组件来满足 Spring Boot 应用程序的系统监控功能,并重点介绍了如何扩展常见的 Info 和 Health 监控端点的实现方法。
小小工匠
2021/08/17
9940
SpringBoot - 构建监控体系02_定义度量指标和 Actuator 端点
SpringBoot入门建站全系列(二十九)Actuator服务监控及SpringBootMonitor单机监控页面
Actuaotr是spring boot项目中非常强大的一个功能,有助于对应用程序进行监控和管理,通过restful api请求来监管、审计、收集应用的运行情况,针对微服务而言它是必不可少的一个环节。
品茗IT
2020/05/28
2.3K0
极简教程 | 使用Actuator 实现Spring Boot应用监控
我们知道Spring Boot 提供了Actuator组件,方便我们对应用程序进行监控和维护。接下来,就来介绍Actuator到底是什么?如何在Spring Boot项目中快速集成Actuator?
章为忠学架构
2023/03/23
1.7K0
极简教程 | 使用Actuator 实现Spring Boot应用监控
Spring Boot Actuator-Java快速入门教程
在本文中,我们将介绍Spring Boot Actuator。我们将首先介绍基础知识,然后详细讨论 Spring Boot 2.x 与 1.x 中可用的功能。
jack.yang
2025/04/05
1810
spring-boot-actuator中health的工作原理解析
最近在一个webflux项目中使用spring-boot-actuator提供的健康检查端点时出了点问题,故对spring-boot-actuator的项目构造,工作原理进行了全面的梳理,标题之所以写明health的工作原理,是因为spring-boot-actuator着实是个大工程,除了提供health端点,还包含了env,log,dump等诸多功能,下面会侧重health健康检查部分,详细探索下。
kl博主
2023/11/18
3.1K0
Spring Boot Actuator详解与深入应用(二):Actuator 2.x
本文系《Spring Boot Actuator详解与深入应用》中的第二篇。在上一篇文章:Spring Boot Actuator详解与深入应用(一):Actuator 1.x主要讲了Spring Boot Actuator 1.x的应用与定制端点。Spring Boot2.0的正式版已经发布有一段时间了,目前已经到了2.1.0.RELEASE。关于Spring Boot2.x的特性,在此不详细叙述了,但是其流行的趋势是显而易见的。
aoho求索
2018/12/17
2.5K0
Spring Boot 2.0 执行器端点(Actuator Endpoint)精简模式 顶
在基于Spring Boot的应用程序内通过Endpoint可以根据应用程序业务需求实现自定义的监控接口,但目前的版本中实现自定义Endpoint需要实现该接口内的以下几个方法, 代码稍显复杂:
Michael Chen
2018/09/05
1.8K0
相关推荐
05. Springboot admin集成Actuator(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档