《Spring Boot开发:从0到1》第11章 Spring Boot应用监控

简介: 第11章 Spring Boot Actuator与应用监控Spring Boot的Actuator 将应用的很多信息暴露出来,如容器中的 bean,自动配置时的决策,运行时健康状态, metrics等等。

第11章 Spring Boot Actuator与应用监控

Spring Boot的Actuator 将应用的很多信息暴露出来,如容器中的 bean,自动配置时的决策,运行时健康状态, metrics等等。Actuator提供了三中方式获取这些信息:

HTTP Endpoints
Remote Shell
JMX (MBeans) 当然通过继承指定的类来自定义一些 actuator信息,暴露自己想要的信息。

11.1 使用Spring Boot Actuator监控应用

1.Spring boot Actuator Endpoints介绍

Actuator是Spring Boot提供的附加特性,来帮我们监控和管理生产环境下运行时的应用程序。我们可以通过HTTP endpoints、JMX或者SSH来监控和管理应用的健康状况、系统指标、参数信息、内存状况等等。

Spring Boot Actuator所提供的HTTP监控服务如下表:

上面的这些HTTP服务,我们就叫Endpoint。Endpoint允许对应用进行上述健康状况、系统指标、参数信息、内存状况等指标的监控和交互。Spring Boot提供了很多内置的Endpoint,同时支持定制Endpoint。

Endpoint被暴露的方式取决于采用的技术(HTTP、JMX、SSH等),大部分应用采用HTTP的方式, 暴露的方式即通过Endpoint的ID映射成一个URL,例如 id=health 的内置Endpoint映射到URL=/health, 提供应用基础健康检查信息, 为了安全起见,一般不暴露在应用服务端口上,而是暴露在专门的管理端口上。

其中,重点挑两个讲一下。

/health 提供应用程序的健康状态,或者是某个核心模块的健康状态。例如,
数据库连接,磁盘使用情况等指标。

/metrics,这个endpoint显示Metrics 子系统管理的信息。主要是一些度量的值,比如系统的吞吐量,堆栈信息,耗时(timer),接口被触发的次数(meter,count),对象大小(gauge)等。metrics的监控主要分以下几种类型:

2.开启Actuator
很简单,只需要引入官方提供的starter:

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

3.定制Endpoint

Endpoint可以通过application.properties配置文件中的配置项进行定制, 格式如下:

endpoints.[name].[property]

有三个通用的property:

id: id
enable: 开关
sensitive: 是否需要权限控制才可以看到
以health为例,/health暴露的监控信息是所有实现了HealthIndicator接口的Bean。

通过自定义HealthIndicator实现定制health endpoint

@Component
public class HealthCheck implements HealthIndicator {
    @Override
    public Health health() {
        int errorCode = check(); // perform some specific health check
        if (errorCode != 0) {
            return Health.down().withDetail("Error Code", errorCode).build();
        }
        return Health.up().build();
    }

    public int check() {
        // Your logic to check health
        return 0;
    }
}

输出类似如下格式:

{
    "status" : "DOWN",
    "myHealthCheck" : {
        "status" : "DOWN",
        "Error Code" : 1,
        "Description" : "You custom MyHealthCheck endpoint is down"
     },
     "diskSpace" : {
         "status" : "UP",
         "free" : 209047318528,
         "threshold" : 10485760
     }
}

4.创建新的Endpoint

一般通过继承AbstractEndpoint<T>抽象类创建一个新的Endpoint, 或者直接实现Endpoint<T>接口,AbstractEndpoint<T>抽象类也实现了Endpoint<T>接口。

@Component
public class CustomEndpoint implements Endpoint<List<String>> {

    public String getId() {
        return "customEndpoint";
    }

    public boolean isEnabled() {
        return true;
    }

    public boolean isSensitive() {
        return true;
    }

    public List<String> invoke() {
        // Custom logic to build the output
        List<String> messages = new ArrayList<String>();
        messages.add("This is message 1");
        messages.add("This is message 2");
        return messages;
    }
}

id=customEndpoint, 对应的URL为/customEndpoint

输出信息格式如下:

[ "This is message 1", "This is message 2" ]

11.2 Spring Boot远程Shell

相关文章
|
6月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
7105 89
|
6月前
|
前端开发 Java 应用服务中间件
《深入理解Spring》 Spring Boot——约定优于配置的革命者
Spring Boot基于“约定优于配置”理念,通过自动配置、起步依赖、嵌入式容器和Actuator四大特性,简化Spring应用的开发与部署,提升效率,降低门槛,成为现代Java开发的事实标准。
|
6月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
6月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
6月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
679 2
|
6月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
474 8
|
7月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
6240 2
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
存储 JSON Java
822 0
|
7月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
2487 0
|
6月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
1073 4
下一篇
开通oss服务