什么是 Spring Boot Actuator?如何在 Spring Boot 中使用 Actuator?

news2024/11/25 22:47:11

当我们在开发和部署应用程序时,监控应用程序的健康状况和性能是非常重要的。Spring Boot Actuator 为我们提供了一组现成的端点(endpoints),可以让我们方便地监控和管理应用程序。在本文中,我们将了解 Spring Boot Actuator 的基本概念和使用方法,并演示如何使用 Actuator 来监控应用程序的健康状况和性能。

在这里插入图片描述

什么是 Spring Boot Actuator?

Spring Boot Actuator 是 Spring Boot 提供的用于监控和管理应用程序的模块。它提供了一组现成的端点,可以让我们方便地监控和管理应用程序。这些端点包括健康状况、性能指标、配置信息、日志等。通过这些端点,我们可以了解应用程序的运行状况,及时发现和解决问题,提高应用程序的可用性和可维护性。

Spring Boot Actuator 默认情况下已经集成在 Spring Boot 中,我们只需要在应用程序中添加依赖,并配置一些参数即可使用。下面是一个使用 Spring Boot Actuator 的示例。

如何在 Spring Boot 中使用 Actuator?

要在 Spring Boot 中使用 Actuator,我们需要在应用程序中添加 spring-boot-starter-actuator 依赖。可以在 Maven 或 Gradle 的构建文件中添加以下依赖:

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

在 Gradle 中,可以使用以下依赖:

implementation 'org.springframework.boot:spring-boot-starter-actuator'

添加依赖后,我们需要配置 Actuator 的一些参数。可以在 application.ymlapplication.properties 文件中添加以下配置:

management:
  endpoints:
    web:
      exposure:
        include: "*"

上面的配置将所有 Actuator 的端点都暴露出来,以便我们可以使用它们来监控应用程序的健康状况和性能指标。我们也可以选择只暴露一部分端点,以便控制访问权限和保护应用程序的安全性。

Actuator 端点的使用

在添加依赖和配置参数之后,我们就可以开始使用 Actuator 端点来监控应用程序的健康状况和性能指标了。Spring Boot Actuator 提供了多个端点,每个端点都提供了不同的功能。在下面的示例中,我们将演示如何使用一些常见的端点来监控应用程序的健康状况和性能指标。

健康状况端点

健康状况端点(health endpoint)用于获取应用程序的健康状况。它可以告诉我们应用程序是否正常运行,以及是否存在任何问题。默认情况下,健康状况端点返回一个简单的 JSON 响应,其中包含应用程序的健康状况信息。

为了访问健康状况端点,我们可以使用以下 URL:

http://localhost:8080/actuator/health

在默认情况下,健康状况端点返回的 JSON 响应如下所示:

{
  "status": "UP"
}

这表示应用程序的健康状况正常。如果应用程序存在问题,健康状况端点将返回其他状态,例如:

{
  "status": "DOWN",
  "details": {
    "database": {
      "status": "DOWN",
      "details": {
        "error": "java.sql.SQLException: Connection refused"
      }
    }
  }
}

上面的响应表示数据库连接失败,导致应用程序的健康状况为 DOWN。

除了默认的健康状况端点之外,Spring Boot Actuator 还提供了其他一些健康状况端点,例如 /actuator/health/liveness/actuator/health/readiness。这些端点可以用于检查应用程序的生命状态和准备状态,以便更好地处理应用程序的故障和问题。

信息端点

信息端点(info endpoint)用于获取应用程序的版本信息,以及其他自定义信息。默认情况下,信息端点返回一个 JSON 响应,其中包含应用程序的版本号和其他信息。

为了访问信息端点,我们可以使用以下 URL:

http://localhost:8080/actuator/info

在默认情况下,信息端点返回的 JSON 响应如下所示:

{
  "app": {
    "name": "My Application",
    "version": "1.0.0"
  },
  "java": {
    "version": "11.0.11",
    "vendor": "Oracle Corporation",
    "vmName": "OpenJDK 64-Bit Server VM",
    "vmVersion": "11.0.11+9-LTS",
    "uptime": "3 minutes",
    "startTime": "2023-05-24T08:00:00.000+0000"
  }
}

其中 app 对象包含应用程序的名称和版本号,java 对象包含 Java 运行时环境的信息。除了默认的信息端点之外,我们还可以通过自定义属性来添加其他信息,以便更好地了解应用程序的状态和性能。

度量指标端点

度量指标端点(metrics endpoint)用于获取应用程序的度量指标信息,例如 CPU 使用率、内存使用率、请求次数等。Spring Boot Actuator 提供了多个度量指标端点,例如 /actuator/metrics/system.cpu.usage/actuator/metrics/jvm.memory.used。您还可以自定义度量指标,以便更好地了解应用程序的性能和状态。

为了访问度量指标端点,我们可以使用以下 URL:

http://localhost:8080/actuator/metrics

在默认情况下,度量指标端点返回一个 JSON 响应,其中包含应用程序的度量指标信息。例如:

{
  "names": [
    "jvm.memory.max",
    "jvm.memory.committed",
    "jvm.memory.used",
    "jvm.buffer.memory.used",
    "jvm.buffer.total.capacity",
    "jvm.buffer.count",
    "logback.events",
    "process.start.time",
    "process.uptime",
    "system.cpu.count",
    "system.cpu.usage",
    "tomcat.sessions.active.current",
    "tomcat.sessions.active.max",
    "tomcat.sessions.alive.max",
    "tomcat.sessions.created",
    "tomcat.sessions.expired",
    "tomcat.sessions.rejected"
  ]
}

上面的响应包含了应用程序的度量指标信息列表。我们可以根据需要选择特定的度量指标进行监控和分析。

日志端点

日志端点(loggers endpoint)用于获取应用程序的日志信息。它可以告诉我们应用程序的日志级别、日志输出位置等信息。默认情况下,日志端点返回一个 JSON 响应,其中包含应用程序的日志信息。

为了访问日志端点,我们可以使用以下 URL:

http://localhost:8080/actuator/loggers

在默认情况下,日志端点返回的 JSON 响应如下所示:

{
  "levels": [
    "OFF",
    "ERROR",
    "WARN",
    "INFO",
    "DEBUG",
    "TRACE"
  ],
  "loggers": {
    "com.example": {
      "configuredLevel": "DEBUG",
      "effectiveLevel": "DEBUG"
    },
    "org.springframework": {
      "configuredLevel": "INFO",
      "effectiveLevel": "INFO"
    }
  }
}

上面的响应包含了应用程序的日志级别和日志器的配置信息。我们可以根据需要修改特定的日志级别或日志输出位置,以便更好地记录和分析应用程序的日志信息。

关闭应用程序端点

关闭应用程序端点(shutdown endpoint)用于关闭应用程序。默认情况下,关闭应用程序端点是禁用的,我们需要手动启用它才能使用。为了启用关闭应用程序端点,我们需要在配置文件中添加以下配置:

management:
  endpoint:
    shutdown:
      enabled: true

启用关闭应用程序端点后,我们可以使用以下 URL 来关闭应用程序:

POST http://localhost:8080/actuator/shutdown

使用这个端点需要注意,因为它会直接关闭应用程序,可能会导致数据丢失或其他问题。所以在生产环境中,我们应该对这个端点进行限制或保护,以防止误操作或攻击。

Actuator 的扩展和自定义

除了默认的 Actuator 端点之外,我们还可以扩展和自定义 Actuator 端点,以满足特定的需求。Spring Boot Actuator 提供了多个扩展点和接口,可以让我们方便地扩展和自定义 Actuator 端点。

自定义端点

要自定义一个 Actuator 端点,我们需要实现 Endpoint 接口,并注册到 Spring 容器中。下面是一个自定义的 Actuator 端点的示例:

@Component
public class MyEndpoint implements Endpoint<Map<String, Object>> {

    @Override
    public String getId() {
        return "myendpoint";
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

    @Override
    public boolean isSensitive() {
        return true;
    }

    @Override
    public Map<String, Object> invoke() {
        Map<String, Object> result = new HashMap<>();
        // do something
        return result;
    }
}

在上面的代码中,我们实现了 Endpoint 接口,并重写了其中的方法。getId() 方法返回端点的 ID,isEnabled() 方法返回端点是否启用,isSensitive() 方法返回端点是否敏感,invoke() 方法执行端点的逻辑,并返回结果。

在实现了自定义端点后,我们需要将其注册到 Spring 容器中,以便 Actuator 可以发现它并暴露出来。可以使用 @Component 注解将自定义端点注册到 Spring 容器中,例如:

@Component
public class MyEndpoint implements Endpoint<Map<String, Object>> {

    // ...

}

在注册了自定义端点后,我们可以通过以下 URL 来访问它:

http://localhost:8080/actuator/myendpoint

自定义健康状况指示器

要自定义健康状况指示器,我们需要实现 HealthIndicator 接口,并注册到 Spring 容器中。下面是一个自定义的健康状况指示器的示例:

@Component
public class MyHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        // do something
        return Health.up().build();
    }
}

在上面的代码中,我们实现了 HealthIndicator 接口,并重写了其中的方法。health() 方法实现了健康状况指示器的逻辑,并返回 Health 对象,表示应用程序的健康状况。在这个例子中,我们返回了一个健康状况为 UP 的 Health 对象。

在实现了自定义健康状况指示器后,我们需要将其注册到 Spring 容器中,以便 Actuator 可以发现它并使用它来计算应用程序的健康状况。可以使用 @Component 注解将自定义健康状况指示器注册到 Spring 容器中,例如:

@Component
public class MyHealthIndicator implements HealthIndicator {

    // ...

}

自定义信息贡献器

要自定义信息贡献器,我们需要实现 InfoContributor 接口,并注册到 Spring 容器中。下面是一个自定义的信息贡献器的示例:

@Component
public class MyInfoContributor implements InfoContributor {

    @Override
    public void contribute(Info.Builder builder) {
        // do something
        builder.withDetail("myinfo", "myvalue");
    }
}

在上面的代码中,我们实现了 InfoContributor 接口,并重写了其中的方法。contribute() 方法实现了信息贡献器的逻辑,并将自定义的信息添加到 Info.Builder 对象中。在这个例子中,我们添加了一个 key 为 “myinfo”,value 为 “myvalue” 的信息。

在实现了自定义信息贡献器后,我们需要将其注册到 Spring 容器中,以便 Actuator 可以发现它并使用它来生成应用程序的信息。可以使用 @Component 注解将自定义信息贡献器注册到 Spring 容器中,例如:

@Component
public class MyInfoContributor implements InfoContributor {

    // ...

}

结论

Spring Boot Actuator 是 Spring Boot 的一个重要特性,它提供了丰富的端点,可以用于监控和管理应用程序。在本文中,我们介绍了 Actuator 的基本使用方法,包括端点的配置、使用、安全性和扩展。希望本文可以帮助读者更好地使用 Spring Boot Actuator 监控和管理应用程序。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spark+Kafka构建实时分析Dashboard

SparkKafka构建实时分析Dashboard 说明一、案例介绍二、实验环境准备1、实验系统和软件要求2、系统和软件的安装&#xff08;1&#xff09;安装Spark&#xff08;2&#xff09;安装Kafka&#xff08;3&#xff09;安装Python&#xff08;4&#xff09;安装Python依赖库&#xf…

数据仓库hive本地/远程模式安装

文章目录 1.简述2.本地模式2.1安装包准备2.2解压安装mysql2.2.1 解压mysql安装包2.2.2 安装mysql相关组件2.2.3 修改my.cnf配置文件2.2.4 更改所属组2.2.5 启动mysql服务 2.3 hive解压安装及配置2.3.1 解压2.3.2 改名2.3.3 配置环境变量2.3.4 添加hive-site.xml配置文件2.3.5 放…

《Spring Guides系列学习》guide6 - guide10

要想全面快速学习Spring的内容&#xff0c;最好的方法肯定是先去Spring官网去查阅文档&#xff0c;在Spring官网中找到了适合新手了解的官网Guides&#xff0c;一共68篇&#xff0c;打算全部过一遍&#xff0c;能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

VIBRO METER 带缓冲输出的机械监控系统接口套件

高质量、高可靠性的接口套件&#xff0c;用于现有机械监控系统的缓冲“原始”传感器输出信号。该接口套件支持多达25个通道&#xff0c;可以是动态或转速计(速度)信号。接口套件采用DIN导轨安装&#xff0c;通常安装在装有VM600或VibroSmart机械监控系统的外壳中。 特征 支持…

为 Kotlin 的函数添加作用域限制(以 Compose 为例)

前言 不知道各位是否已经开始了解 Jetpack Compose&#xff1f; 如果已经开始了解并且上手写过。那么&#xff0c;不知道你们有没有发现&#xff0c;在 Compose 中对于作用域&#xff08;Scopes&#xff09;的应用特别多。比如&#xff0c; weight 修饰符只能用在 RowScope 或…

docker快速部署hue+hue集成hive

首先需要安装hive&#xff0c;hive的安装在HIVE的安装与配置_EEEurekaaa&#xff01;的博客-CSDN博客 安装完成之后&#xff0c;使用脚本命令启动hdfs和hive的相关服务。 一、安装docker # 安装yum-config-manager配置工具 $ yum -y install yum-utils # 设置yum源 $ yum-co…

《俞军产品方法论》- 站在更高的角度来拓展产品经理的内涵和边界

关于作者 俞军&#xff0c;互联网产品大神级人物。他是早年百度唯一的产品经理&#xff0c;主持了百度搜索这款产品的无数次进化&#xff0c;并主持设计了百度贴吧、百度 知道等世界级创新产品&#xff0c;后来又成为滴滴出行的产品负责人。他的 “ 俞军产品经理十二条 ” &a…

TexSAW|2023|Cryptography&Misc|WP

Cryptography&#xff5c;Crack the crime 用 nc 连上后&#xff0c;直接得到第一题 是一个简单的base64加密&#xff0c;解密如下&#xff1a; Meet in dubai on Tuesday 填入之后可获得第二题 猜测是古典加密&#xff0c;随后经过N次尝试后发现是rot13加密&#xff0c;解密…

蓝牙耳机怎么选?蓝牙耳机哪些性价比高?2023年蓝牙耳机推荐,蓝牙耳机品牌排行榜,蓝牙耳机最全选购指南

蓝牙耳机怎么选&#xff1f;蓝牙耳机哪些性价比高&#xff1f;2023年蓝牙耳机推荐&#xff0c;蓝牙耳机品牌排行榜&#xff0c;蓝牙耳机最全选购指南 观前提醒&#xff0c;本文中你将会了解到&#xff1a; &#xff5c;蓝牙耳机抄作业环节 &#xff5c;蓝牙耳机基础知识 &a…

快速上手kettle

一、前言 最近由于工作需要&#xff0c;需要用到kettle工具进行数据迁移转换。特意找资料学习了一下&#xff0c;kettle基本操作算是学会了。 所学的也结合实际工作进行了验证。为了防止以后用到忘记了&#xff0c;便写了几篇文章记录一下。 二 、ETL简介 ETL ( Extract-Tran…

synchronized 关键字和 volatile 关键字有什么区别?

synchronized 关键字和 volatile 关键字有什么区别&#xff1f; 在 Java 中&#xff0c;synchronized 关键字和 volatile 关键字都可以用来实现线程安全&#xff0c;但是它们有不同的用途和实现方式。本文将介绍 synchronized 关键字和 volatile 关键字的区别&#xff0c;包括…

二肽二氨基丁酰苄基酰胺二乙酸盐/Dipeptide Diaminobutyroyl Benzylamide Diacetate/SYN-AKE

作用机理----二肽二氨基丁酰苄基酰胺二乙酸盐 类蛇毒三肽通过松弛面部肌肉而作为有效的平滑和祛皱活性产品, 该活性三肽作用方式与 Temple Viper 毒蛇毒液的神经肌肉阻断化合物Waglerin 1 一致。类蛇毒三肽作用于突触后膜, 是肌肉烟碱乙酰胆碱受体(nmAChR)可逆转的拮抗剂。类蛇…

docker安装单机nacos、rocketmq、reids、xxl-job、minio、elasticsearch、kibana

启动容器报错 直接删除那个name后边的就可以 安装nacos 首先需要拉取对应的镜像文件&#xff1a;docker pull nacos/nacos-server 挂载目录&#xff1a; mkdir -p /mydata/nacos/logs/ #新建logs目录mkdir -p /mydata/nacos/init.d/ vim /myda…

使用 Kotlin 的 Opt-in (选择加入)功能注解API提示当前非稳定API

前言 之前在给公司项目封装库的时候&#xff0c;领导告诉我封装的漂亮一点&#xff0c;等以后公司发展起来了可能需要把这个库提供给第三方接入使用。 此时&#xff0c;就有这么一个问题&#xff1a;某些功能函数使用条件比较苛刻&#xff0c;直接使用可能会出现意想不到的后…

Mock.js 的语法规范学习

Mock.js 有一套完整的语法规范,可以好好学学。 Mock.js 的语法规范包括两部分&#xff1a; 数据模板定义规范&#xff08;Data Template Definition&#xff0c;DTD&#xff09; 数据占位符定义规范&#xff08;Data Placeholder Definition&#xff0c;DPD&#xff09; 数…

【mediasoup】12: ChannelRequest控制指令

rust 是把worker 当做lib 调用的。node是当做一个进程每一个ChannelRequest 就是一个外部发给worker的控制指令worker要负责处理。控制指令的处理实际是worker做的,worker可能立即执行,可能交给对应的handler去处理 worker根据指令id 来处理 处理完毕后才发消息ack 给控制侧 …

# Spring Boot 中如何使用 Spring Cloud Sleuth 来实现分布式跟踪?

Spring Boot 中如何使用 Spring Cloud Sleuth 来实现分布式跟踪&#xff1f; 在微服务架构中&#xff0c;通常会有多个服务相互协作&#xff0c;为了方便排查问题&#xff0c;我们需要对服务之间的调用进行跟踪。Spring Cloud Sleuth 是 Spring Cloud 生态中的分布式跟踪解决方…

charles使用

charles​ 一、概念​ charles是一款非常优秀的抓包工具&#xff0c;全平台支持&#xff0c;在mac&#xff0c;windows&#xff0c;linux上都可以使用&#xff0c;既可以抓 取web端的包&#xff0c;也可以抓app端的包。 ​ charles主要的功能包括如下几点&#xff1a; ​ 截取…

Linux网络服务:SSH远程访问及控制2

目录 一、理论 1.构建密钥对验证的SSH体系 2.TCP Wrappers访问控制 二、实验 1.ecdsa免密连接 2.rsa免密连接 一、理论 1.构建密钥对验证的SSH体系 &#xff08;1&#xff09;免密连接原理 ① 手动添加客户端的公钥到服务端 ② 服务端收到客户端的公钥后使用客户端公钥…

C++——引用

引用的概念 初步理解&#xff1a;引用相当于给变量取了一个别名&#xff0c;它和引用的变量共用同一块空间。 就好比孙悟空有很多外号&#xff0c;例如孙行者&#xff0c;齐天大圣&#xff0c;斗战胜佛&#xff0c;但是它们所指都是孙悟空。同样的&#xff0c;如果齐天大圣大…