重学SpringBoot3-集成Spring Boot Actuator

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》
期待您的点赞👍收藏⭐评论✍

重学SpringBoot3-集成Spring Boot Actuator

  • 1. 什么是 Spring Boot Actuator?
  • 2. Spring Boot Actuator 的核心功能
  • 3. Spring Boot 3 中集成 Actuator
    • 3.1 添加依赖
    • 3.2 开启 Actuator 端点
    • 3.3 常用的 Actuator 端点
    • 3.4 健康检查 (Health Check)
    • 3.5 监控指标 (Metrics)
    • 3.6 应用信息 (Info)
    • 3.7 日志管理 (Loggers)
  • 4. 安全配置
  • 5. 总结

Spring Boot Actuator 是 Spring Boot 提供的一组内置功能,用于监控和管理应用程序。通过 Actuator,开发者可以轻松获取应用的运行时状态,执行健康检查,监控性能指标,甚至自定义端点来满足特定需求。本文将详细介绍如何在 Spring Boot 3 中整合 Spring Boot Actuator,并展示如何配置和使用 Actuator 提供的核心功能。

1. 什么是 Spring Boot Actuator?

Spring Boot Actuator 是一组能够帮助我们监控和管理 Spring Boot 应用的工具。它提供了很多有用的端点,用来查看应用的各种信息,如健康状况、Bean 信息、应用配置、日志级别等。Actuator 默认提供了一些内置的端点,但我们也可以根据需求自定义新的端点。

2. Spring Boot Actuator 的核心功能

Spring Boot Actuator 的核心功能主要包括:

  • 健康检查 (Health Check):检测应用及其依赖服务(如数据库、消息队列等)的健康状况。
  • 监控指标 (Metrics):收集和展示应用程序的运行指标,如内存使用、线程状态、GC 情况等。
  • 应用程序信息 (Info):展示应用程序的基本信息,如版本、环境变量等。
  • 审计 (Auditing):记录应用的安全事件。
  • HTTP 跟踪 (HTTP Tracing):跟踪 HTTP 请求和响应。
  • 日志级别管理 (Loggers):动态调整日志级别。

3. Spring Boot 3 中集成 Actuator

3.1 添加依赖

创建模块

在 Spring Boot 3 项目中使用 Actuator,首先需要在 pom.xml 文件中添加相关依赖:

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

在引入 spring-boot-starter-actuator 依赖后,Spring Boot 会自动配置 Actuator 并启用其默认端点。

3.2 开启 Actuator 端点

默认情况下,Spring Boot Actuator 只开启少量的端点。我们可以通过 application.propertiesapplication.yml 配置文件来自定义启用哪些端点。

application.yml 中,可以通过以下配置开启所有的 Actuator 端点:

management:
  endpoints:
    web:
      exposure:
        include: '*'

此配置会启用所有的 Actuator 端点。若仅希望启用部分端点,可以将 '*' 替换为具体的端点名,如:

management:
  endpoints:
    web:
      exposure:
        include: health,info

3.3 常用的 Actuator 端点

一些常用的 Actuator 端点包括:

  • /actuator/health:显示应用程序的健康状况。
  • /actuator/info:显示应用程序的基本信息。
  • /actuator/metrics:展示应用的监控指标。
  • /actuator/loggers:查看和修改应用程序的日志级别。
  • /actuator/env:显示应用程序的环境属性和配置信息。

可以通过浏览器或 HTTP 客户端访问 http://localhost:8080/actuator 展示出所有可以用的监控端点。

{
    "_links": {
        "self": {
            "href": "http://localhost:8080/actuator",
            "templated": false
        },
        "beans": {
            "href": "http://localhost:8080/actuator/beans",
            "templated": false
        },
        "caches-cache": {
            "href": "http://localhost:8080/actuator/caches/{cache}",
            "templated": true
        },
        "caches": {
            "href": "http://localhost:8080/actuator/caches",
            "templated": false
        },
        "health": {
            "href": "http://localhost:8080/actuator/health",
            "templated": false
        },
        "health-path": {
            "href": "http://localhost:8080/actuator/health/{*path}",
            "templated": true
        },
        "info": {
            "href": "http://localhost:8080/actuator/info",
            "templated": false
        },
        "conditions": {
            "href": "http://localhost:8080/actuator/conditions",
            "templated": false
        },
        "configprops": {
            "href": "http://localhost:8080/actuator/configprops",
            "templated": false
        },
        "configprops-prefix": {
            "href": "http://localhost:8080/actuator/configprops/{prefix}",
            "templated": true
        },
        "env": {
            "href": "http://localhost:8080/actuator/env",
            "templated": false
        },
        "env-toMatch": {
            "href": "http://localhost:8080/actuator/env/{toMatch}",
            "templated": true
        },
        "loggers": {
            "href": "http://localhost:8080/actuator/loggers",
            "templated": false
        },
        "loggers-name": {
            "href": "http://localhost:8080/actuator/loggers/{name}",
            "templated": true
        },
        "heapdump": {
            "href": "http://localhost:8080/actuator/heapdump",
            "templated": false
        },
        "threaddump": {
            "href": "http://localhost:8080/actuator/threaddump",
            "templated": false
        },
        "metrics-requiredMetricName": {
            "href": "http://localhost:8080/actuator/metrics/{requiredMetricName}",
            "templated": true
        },
        "metrics": {
            "href": "http://localhost:8080/actuator/metrics",
            "templated": false
        },
        "scheduledtasks": {
            "href": "http://localhost:8080/actuator/scheduledtasks",
            "templated": false
        },
        "mappings": {
            "href": "http://localhost:8080/actuator/mappings",
            "templated": false
        }
    }
}

例如,访问 http://localhost:8080/actuator/health 会返回应用程序的健康信息。

/actuator/health

3.4 健康检查 (Health Check)

/actuator/health 端点用于检查应用程序及其依赖服务的健康状况。Spring Boot Actuator 内置了一些常见服务的健康指示器,如数据库、消息队列等。

可以在 application.yml 中配置健康检查的详情:

management:
  endpoint:
    health:
      show-details: always

这将确保 /actuator/health 端点返回详细的健康检查信息。

 show-details: always

若需要自定义健康指示器,可以实现 HealthIndicator 接口:

package com.coderjia.boot3actuator.config;

import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;

/**
 * @author CoderJia
 * @create 2024/10/13 上午 10:33
 * @Description
 **/
@Component
public class CustomHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        // 自定义健康检查逻辑
        boolean serviceRunning = checkExternalService();
        if (serviceRunning) {
            return Health.up().withDetail("service", "running").build();
        } else {
            return Health.down().withDetail("service", "stopped").build();
        }
    }

    private boolean checkExternalService() {
        // 模拟外部服务的检查
        return true;
    }
}

访问 /actuator/health 时将会包含自定义健康检查的结果。

自定义健康检查

3.5 监控指标 (Metrics)

/actuator/metrics 端点可以显示应用程序的运行时指标,包括 JVM 内存使用情况、CPU 使用率、垃圾回收次数、线程信息等。

/actuator/metrics 端点

访问 /actuator/metrics 时,可以获取所有可用的监控指标。例如,要查看 JVM 内存使用情况,可以访问 /actuator/metrics/jvm.memory.used

查看 JVM 内存使用

Actuator 使用 Micrometer 来收集和导出这些指标,Micrometer 支持多种监控系统,如 Prometheus、Graphite 等。如果你需要将指标导出到外部监控系统,可以在 application.yml 中进行配置:

management:
  metrics:
    export:
      prometheus:
        enabled: true

3.6 应用信息 (Info)

/actuator/info 端点可以显示应用程序的基本信息,如版本号、构建时间等。这些信息可以通过 application.yml 文件进行配置:

management:
  endpoints:
    web:
      exposure:
        include: '*'
  info:
    env:
      enabled: true
info:
  app:
    name: My Spring Boot App
    version: 1.0.0
    description: This is a demo application

访问 /actuator/info 时将返回这些配置的信息。

/actuator/info 端点

3.7 日志管理 (Loggers)

/actuator/loggers 端点允许我们查看和动态调整应用程序的日志级别。访问 /actuator/loggers 将显示应用程序中所有的日志记录器及其当前日志级别。

/actuator/loggers 端点

可以通过发送 HTTP POST 请求来动态更改日志级别:

curl -X POST -d '{"configuredLevel": "DEBUG"}' http://localhost:8080/actuator/loggers/com.coderjia.boot3actuator.controller

此请求将 com.coderjia.boot3actuator.controller 这个包的日志级别设置为 DEBUG

image-20241013105721700

4. 安全配置

默认情况下,Actuator 端点只在本地开发时可用,生产环境通常需要添加安全机制。可以通过 Spring Security 为 Actuator 端点添加认证和授权。

首先,在 pom.xml 中添加 Spring Security 依赖:

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

接着,在 application.yml 中配置安全设置:

spring:
  # 配置登录springboot admin管理端的账号密码
  security:
    user:
      name: admin
      password: 123456
      roles: ADMIN
management:
  endpoints:
    web:
      exposure:
        include: '*'  # 指定哪些端点公开
  security:
    enabled: true  # 启用安全性

然后,在 SecurityConfig 中配置基本认证:

package com.coderjia.boot3actuator.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

/**
 * @author CoderJia
 * @create 2024/10/13 上午 10:59
 * @Description
 **/
@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                .authorizeHttpRequests(auth -> auth
                        .requestMatchers("/actuator/**").hasRole("ADMIN") // 保护所有 Actuator 端点,只允许 ADMIN 角色访问
                        .anyRequest().permitAll() // 其他请求允许访问
                )
                .httpBasic(Customizer.withDefaults());
        return http.build();
    }
}

这样,访问 Actuator 端点时将需要提供用户名和密码,使用配置的 admin 和123456 登录即可。

登录

5. 总结

通过 Spring Boot 3 中的 Actuator,我们可以非常方便地监控和管理应用程序的运行时状态。Actuator 提供了丰富的内置端点,帮助我们查看应用的健康状态、运行时指标、日志级别等。同时,Actuator 还允许我们根据需求自定义健康检查和监控端点。结合 Spring Security,我们可以轻松地为 Actuator 端点添加认证和授权,保证生产环境的安全性。

Actuator 是开发人员和运维人员监控 Spring Boot 应用的得力工具,尤其是在复杂的生产环境中,Actuator 能帮助我们快速发现问题并及时处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/892064.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RBTree(红黑树)的介绍和实现

欢迎来到杀马特的主页&#xff1a;羑悻的小杀马特.-CSDN博客 目录 ​编辑 一红黑树介绍&#xff1a; 1.1红黑树概念&#xff1a; 1.2红黑树遵循的原则&#xff1a; 1.3红黑树效率分析&#xff1a; 二.红黑树的实现&#xff1a; 2.1红黑树结构&#xff1a; 2.2红黑树节点…

PAT甲级-1127 ZigZagging on a Tree

题目 题目大意 给出一棵树的中序和后序遍历&#xff0c;要求按层序输出这棵树&#xff0c;但是按照从左到右&#xff0c;再从右到左&#xff0c;再从左到右的顺序。 思路 由中序遍历和后序遍历可以构造出一棵二叉树。观察题目中要求的输出顺序&#xff0c;发现层数为奇数的都…

第十五章 RabbitMQ延迟消息之延迟插件

目录 一、引言 二、延迟插件安装 2.1. 下载插件 2.2. 安装插件 2.3. 确认插件是否生效 三、核心代码 四、运行效果 五、总结 一、引言 上一章我们讲到通过死信队列组合消息过期时间来实现延迟消息&#xff0c;但相对而言这并不是比较好的方式。它的代码实现相对来说比…

等保制度要求企业保障数据存储安全,天锐绿盾强大加密技术实现文档防泄密

网络安全等级保护&#xff08;等保&#xff09;制度是我国信息安全保障工作的基本制度和基本国策&#xff0c;是开展信息安全工作的基本方法&#xff0c;是促进信息化、维护国家信息安全的基本保障。等保不仅是对网络&#xff08;含信息系统、数据&#xff09;实施分等级保护、…

TypeScript数据类型限定(基本数据类型,void,数组,元组,枚举,any,unknown,never,函数,自定义数据类型,联合类型和交叉类型)

一、安装解析ts的工具包 node.js只认识js代码&#xff0c;不认识ts代码。 需要将ts代码转化为js&#xff0c;然后就可以在node.js中运行了。 安装步骤&#xff1a;打开终端&#xff0c;输入命令npm i -g typescript回车 typescript是用来解析ts的工具包。提供了tsc命令&…

基于SpringBoot+Vue+Uniapp微信小程序快递管理系统(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

量化策略交易之PTrade量化软件如何获取逐笔委托行情!get_individual_entrust

get_individual_entrust– 获取逐笔委托行情 get_individual_entrust(stocksNone, data_count50, start_pos0, search_direction1, is_dictFalse) 使用场景 该函数在交易模块可用 接口说明 该接口用于获取当日逐笔委托行情数据。 注意事项&#xff1a; 1、沪深市场都有逐…

C++,STL 033(24.10.15)

内容 queue容器&#xff08;队列&#xff09;的常用接口。 代码 #include <iostream> #include <string> #include <queue> // 注意包含queue容器&#xff08;队列&#xff09;的头文件using namespace std;class Person { public:string m_Name;int m_Age…

Android targetSdkVersion 升级为34 问题处理

原因是发布到GooglePlay遭到拒绝&#xff0c;需要最低API level为34。之前为31&#xff0c;感觉还挺高的&#xff0c;但是GooglePlay需要的更高。 记录下处理问题&#xff1a; 1.升级gradle版本为8.0.2 之前是&#xff1a; classpath com.android.tools.build:gradle:7.1.0-…

【C语言】数据类型

C语言常用数据类型 int 整型 4字节float 浮点型 4字节double 双精度浮点类型 8字节char 字符型 1字节构造类型&#xff1a;数组&#xff08;多个相同类型的变量组合&#xff09;构造类型&#xff1a;结构体&#xff08;多个不同类型的变量组合&#xff09; #include <stdi…

react18+react-transition-group实现路由切换过度

效果如下 官网安装对应的插件 创建对应的样式 .fade-enter {opacity: 0; } .fade-exit {opacity: 1; } .fade-enter-active {opacity: 1; } .fade-exit-active {opacity: 0; } .fade-enter-active, .fade-exit-active {transition: opacity 500ms; }const location useLoca…

Mysql—高可用集群MHA

1:什么是MHA&#xff1f; MHA&#xff08;Master High Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切…

【py】使用numpy读取文件,并统计

我们需要编写一个脚本来读取文本文件&#xff0c;然后进行字数统计和词频统计。 以下是一个简单的Python脚本&#xff0c;它使用numpy来处理数据。 首先&#xff0c;确保你已经安装了numpy库。如果没有安装&#xff0c;可以通过运行pip install numpy来安装。 然后&#xff0c…

Gin框架操作指南06:POST绑定(下)

官方文档地址&#xff08;中文&#xff09;&#xff1a;https://gin-gonic.com/zh-cn/docs/ 注&#xff1a;没用过Gin的读者强烈建议先阅读第一节&#xff1a;Gin操作指南&#xff1a;开山篇。 本节继续演示POST绑定&#xff0c;包括将request-body绑定到不同的结构体中&#x…

小猿口算辅助工具(nodejs版)

github 地址&#xff1a;https://github.com/pbstar/xyks-helper 实现原理 通过屏幕截图截取到题目区域的两个数字&#xff0c;然后通过 ocr 识别出数字&#xff0c;最后通过计算得出答案&#xff0c;并通过模拟鼠标绘制答案。 依赖插件 node-screenshots&#xff1a;屏幕截…

微知-Mellanox驱动中的iSCSI是什么?有哪三种网络存储有哪三种?iSER是什么?(iSCSI协议(总线),SAN 存储区域网络)

背景 本文根据Mellanox网卡驱动中关于iSCSI模块&#xff0c;来介绍iSCSI是什么&#xff1f;该技术发展演进背景&#xff1f; 关于iSCSI iSCSI是一种协议&#xff0c;SCSI是总线。比如常说的SAS&#xff08;Serial Attach SCSI&#xff09;存储盘对比与家用的SATA&#xff0…

Facebook上的隐私保护:如何加强个人数据的安全性?

在数字化时代&#xff0c;个人数据的保护已成为用户日益关注的话题&#xff0c;尤其是在社交媒体平台如Facebook上。用户在享受社交媒体带来的便利时&#xff0c;如何有效保护个人隐私&#xff0c;维护自身的数据安全&#xff0c;成为了一个亟需解决的问题。 Facebook的隐私保护…

算法备案不再难!一篇文章让你成为备案达人

随着互联网的迅猛发展&#xff0c;算法推荐已成为众多互联网信息服务的重要组成部分。然而&#xff0c;算法推荐技术的广泛应用也带来了一系列风险和挑战。为了保障公众利益&#xff0c;规范互联网信息服务算法推荐活动&#xff0c;相关部门出台了《互联网信息服务算法推荐管理…

Dubbo接口级和应用级注册,Dubbo消费者注册到Nacos

学习文档 视频学习 代码演示环境 Dubbo 3.2.9Nacos 2.3.0 一、什么是接口级和应用级 假设有一个服务A&#xff0c;里面提供了2个Dubbo接口XdxOneService、XdxTwoService&#xff0c;Dubbo生产者把服务注册到Nacos&#xff08;或其它的注册中心&#xff09; 以应用级别注册&a…

MySQL之Buffer Pool缓冲池详解

为什么要有 Buffer Pool&#xff1f; 虽然说 MySQL 的数据是存储在磁盘里的&#xff0c;但是也不能每次都从磁盘里面读取数据&#xff0c;这样性能是极差的。 要想提升查询性能&#xff0c;加个缓存就行了嘛。所以&#xff0c;当数据从磁盘中取出后&#xff0c;缓存内存中&am…