您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

一文带你了解Spring Actuator

时间:2023-11-08 14:09:08  来源:微信公众号  作者:Java技术指北

服务监控

Spring Boot Actuator是一个用于监控和管理Spring Boot应用的子项目,它提供了一组REST端点和命令行工具, 用于查看应用的运行状态、性能指标和健康状况等。Actuator还支持应用度量数据的导出,以及自定义端点和安全控制等功能。通过使用Spring Boot Actuator,开发人员可以更加方便地了解应用的运行状况,及时发现和解决问题。

概述

随着微服务架构的普及,Spring Boot 已经成为JAVA开发人员的首选框架。然而,随着应用的规模不断扩大, 如何有效地监控和管理这些应用成为一个重要的问题。Spring Boot Actuator的出现,为开发人员提供了一个解决方案。本文将详细介绍Spring Boot Actuator的功能、工作原理、使用场景以及应用示例,帮助读者更好地理解和掌握这一工具。

功能简介

  • 应用度量数据的导出:Actuator 可以将应用的运行数据导出到各种不同的存储后端,例如 Prometheus、Datadog、New Relic 等。这样,开发人员可以方便地使用这些数据来监控应用的性能和健康状况。
  • REST 端点:Actuator 提供了一组 REST 端点,用于查看应用的运行状态、健康状况、度量数据等信息。开发人员可以通过 HTTP 请求来获取这些数据,并使用各种工具进行可视化展示。
  • 命令行工具:除了 REST 端点之外,Actuator 还提供了一些命令行工具,例如 spring-boot-cli 和 spring-boot-admin。这些工具可以让开发人员更方便地管理和监控应用。
  • 自定义端点:Actuator 支持自定义端点的开发,让开发人员可以根据自己的需求来暴露自定义的监控数据。这样可以更灵活地监控和管理应用。
  • 安全控制:Actuator 支持对监控端点的安全控制,例如限制访问权限、身份验证等。这样可以保护应用的敏感信息不被泄露。

Spring-Actuator

默认监控服务

服务端点

描述

auditevents

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

beans

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

caches

公开可用的缓存

conditions

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

configprops

显示所有@ConfigurationProperties的有序列表。

env

公开Spring的ConfigurableEnvironment中的属性

flyway

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

health

显示应用健康信息。

httptrace

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

info

显示任意应用信息。

integrationgraph

显示Spring集成图。

loggers

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

liquibase

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

metrics

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

mAppings

显示所有@RequestMapping路径的有序列表。

scheduledtasks

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

sessions

允许从Spring Session支持的会话存储中检索和删除用户会话。使用Spring Session对响应式Web应用程序的支持时不可用。

shutdown

允许应用程序正常关闭。

http://localhost:8080/actuator

  • 依赖
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
  • 配置
management:
  endpoints:
    web:
      exposure:
#        [health, info]
        include: "*"
  • 自定义监控

监控端点相关注解:

  • @Endpoint:定义一个监控端点,同时支持HTTP和JMX两种方式。
  • @WebEndpoint:定义一个监控端点,只支持HTTP方式。
  • @JmxEndpoint:定义一个监控端点,只支持JMX方式。
  • @ReadOperation:作用在方法上,可用来返回端点展示的信息(通过 Get 方法请求)。
  • @WriteOperation:作用在方法上,可用来修改端点展示的信息(通过 Post 方法请求)。
  • @DeleteOperation:作用在方法上,可用来删除对应端点信息(通过 Delete 方法请求)。
  • @Selector:作用在参数上,用来定位一个端点的具体指标路由。

自定义一个端点服务:

@Endpoint(id = "custom")
public class CustomEndpoint {
  /**
   * /actuator/custom
   */
  @ReadOperation
  public Map custom() {
    return new HashMap();
  }

  /**
   * /actuator/custom/{name}?value={value}
   */
  @ReadOperation
  public Map name(@Selector String name, @Nullable String value) {
    return new HashMap();
  }
}

Spring-Admin

Spring-Actuator主要实现数据的采集,以及提供REST API以及JMX的访问渠道,那么数据具体如何友好地显示出来?这时我们需要对应的UI,其中spring-boot-admin就是这样一款工具。

http://localhost:8080/applications

  • 服务端
<dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-server</artifactId>
    </dependency>
 
@EnableAdminServer
public class Application{   }
 
  • 客户端
 
<dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-client</artifactId>
        <version>2.6.2</version>
    </dependency>

客户端配置

spring:
  boot:
    admin:
      client:
        url: http://localhost:8080

Prometheus + Grafana

上面说到,Actuator除了采集指标,提供访问API外,还提供了“应用度量数据的导出”的功能,这样就能将我们采集到的指标输出到指定的存储服务或终端以便进一步分析。其中Prometheus就是这样一个应用。

  • Prometheus 时序数据库,用于存储数据,提供并提供查询,它存储了计算机系统在各个时间点上的监控数据
  • Grafana 仪表盘,提供监控指标可视化界面。
  • 依赖
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
  • 配置
 
management:
  endpoints:
    web:
      exposure:
        include: "*"
  metrics:
    export:
      prometheus:
        enabled: true
  prometheus:
    enabled: true
  • prometheus配置
scrape_configs:
  - job_name: 'spring-boot-actuator'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['localhost:8080'] # 使用你的Spring Boot应用程序的实际主机和端口替换
  • 启动
 
prometheus.exe --config.file=prometheus.yml

grafana-server.exe

由于篇幅有限,关于Grafana如何集成Prometheus,网上有很多具体实践,这里不重复赘述...

问题

  • 服务端点

由于项目使用spring-boot版本为2.3.7.RELEASE,而spring-boot-admin-starter-server版本设置设置为2.7.x版本时,UI相关配置一直无法加载,通过源码可以看到

在2.6.x版本中对应spring-boot-admin-server-ui存在META-INspring.factories文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=
  de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration

而在2.7.x版本中,spring.factories删除了且改为了 META-INFspringorg.springframework.boot.autoconfigure.AutoConfiguration.imports

de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration

因此如果需要使用2.7.x版本的spring-boot-admin,记得把spring-boot升级到2.7.x

  • 参数名称

参数名称被解析为arg0,导致请求匹配失败。通过下面的配置保证编译后的文件通过反射获取的参数名称不变

<plugin>
          <groupId>org.Apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.11.0</version>
          <configuration>
              <debug>false</debug>
              <!-- 防止方法参数名解析为arg0...  -->
              <compilerArgs>
                  <arg>-parameters</arg>
              </compilerArgs>
          </configuration>
      </plugin>

如果使用Idea,你可以在应用启动后,Actuator功能面板的Mappings中看到服务地址的变化

结束语

服务监控是为了更好的了解服务运行状况,及时发现服务可能出现的问题,并在出现故障时能够有效的定位问题产生的原因。更大层面解决系统运行过程中的维护 成本。关于监控相关的应用还有一些,比如SkyWalking、Zipkin、Elastic APM等等。



Tags:Spring   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  Search: Spring  点击:(52)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  Search: Spring  点击:(39)  评论:(0)  加入收藏
详解基于SpringBoot的WebSocket应用开发
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30  Search: Spring  点击:(9)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  Search: Spring  点击:(84)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19  Search: Spring  点击:(86)  评论:(0)  加入收藏
Spring Boot2.0深度实践 核心原理拆解+源码分析
Spring Boot2.0深度实践:核心原理拆解与源码分析一、引言Spring Boot是一个基于Java的轻量级框架,它简化了Spring应用程序的创建过程,使得开发者能够快速搭建一个可运行的应用...【详细内容】
2024-01-15  Search: Spring  点击:(93)  评论:(0)  加入收藏
SpringBoot3+Vue3 开发高并发秒杀抢购系统
开发高并发秒杀抢购系统:使用SpringBoot3+Vue3的实践之旅随着互联网技术的发展,电商行业对秒杀抢购系统的需求越来越高。为了满足这种高并发、高流量的场景,我们决定使用Spring...【详细内容】
2024-01-14  Search: Spring  点击:(90)  评论:(0)  加入收藏
Spring Boot 3.0是什么?
Spring Boot 3.0是一款基于Java的开源框架,用于简化Spring应用程序的构建和开发过程。与之前的版本相比,Spring Boot 3.0在多个方面进行了改进和增强,使其更加易用、高效和灵活...【详细内容】
2024-01-11  Search: Spring  点击:(131)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11  Search: Spring  点击:(124)  评论:(0)  加入收藏
Spring Boot虚拟线程的性能还不如Webflux?
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10  Search: Spring  点击:(115)  评论:(0)  加入收藏
▌简易百科推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(8)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(12)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(52)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(46)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(39)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(50)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(67)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(84)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(86)  评论:(0)  加入收藏
花 15 分钟把 Express.js 搞明白,全栈没有那么难
Express 是老牌的 Node.js 框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。Express 框...【详细内容】
2024-01-16  程序员成功  微信公众号  Tags:Express.js   点击:(86)  评论:(0)  加入收藏
站内最新
站内热门
站内头条