【SpringBoot系列】- 四大核心之actuator(程序监控器)

news/2024/4/26 19:30:20/文章来源:https://blog.csdn.net/songjianlong/article/details/131999848

【SpringBoot系列】- 四大核心之actuator(程序监控器)

文章目录

  • 【SpringBoot系列】- 四大核心之actuator(程序监控器)
    • 一、概述
    • 二、Spring Boot Actuator应用
      • 2.1 在项目POM文件中导入Actuator
      • 2.2 application配置
      • 2.3 配置详解
        • 2.3.1 Sensor 类 endpoints
        • 2.3.2 Actuator 类 endpoints
        • 2.3.3 自定义应用的健康状态检查
    • 三、Actuator监控项
    • 四、Spring Boot Actuator应用扩展
      • 3.1 CrshAutoConfiguration 与 spring-boot-starter-remote-shell
      • 3.2 CrshAutoConfiguration 与 spring-boot-starter-remote-shell
      • 3.3 Auditing 与 Trace
    • 五、总结

一、概述

应用系统在开发完成以后,就投入实际生产中运营。在软件运行时,整个软件一个黑盒,如何在整个生命周期中准确的知道应用程序运行的健康状况,服务使用状态?我们需要对应用程序进行监控,从而了解应用的运行状态,并根据情况决定是否需要对其运行状态进行调整。

Spring Boot提供了Spring-Boot-Start-Actuator 自动配置模块用于支持 SpringBoot 应用的监控。Spring Boot Actuator模块提供了生产级别的功能,比如健康检查、审计、指标收集、HTTP跟踪等,帮助我们监控和管理Spring Boot应用程序。

这个模块是一个采集应用内部信息暴露给外部的模块,上述的功能都可以通过HTTP和JMX访问。因为是暴露内部信息的特性,Actuator也可以和一些外部的应用监控程序结合(Graphite、Prometheus、Zabbix、cAdvisor、Riemann等)更友好的提供仪表板、图形图表、分析与预警。可帮助你通过一个统一友好的界面,监视和管理你的应用程序。

二、Spring Boot Actuator应用

2.1 在项目POM文件中导入Actuator

<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>

2.2 application配置

需要在application配置文件中,配置具体的Actuator应用;

Spring boot 2.6以后的版本需要手动开启info配置,因为info默认值是false

server:port: 8080 #服务端口
info: application:name: "@project.name@" #从pom.xml中获取description: "@project.description@" version: "@project.version@"management:server:port: 8501 #指定监听端口,不能指定则与server端口一致。endpoints:   #启动所有监控web: exposure: include: '*'info: # spring-boot 2.6以后info默认值为false.需手动开启env:enabled: true

2.3 配置详解

spring-boot-starter-actuator 自动配置模块默认提供了很多 endpoint,虽然自动配置模块名为 spring-boot-starter-actuator,但实际上这些 endpoint 可以按照“监”和“控”划分为两类:

2.3.1 Sensor 类 endpoints

序号名称说明
1autoconfig这个 endpoint 会为我们提供一份 SpringBoot 的自动配置报告,告诉我们哪些自动配置模块生效了,以及哪些没有生效,原因是什么。
2beans给出当前应用的容器中所有 bean 的信息。
3configprops对现有容器中的 ConfigurationProperties 提供的信息进行“消毒”处理后给出汇总信息。
4info提供当前 SpringBoot 应用的任意信息,我们可以通过 Environment 或者 application.properties 等形式提供以 info. 为前缀的任何配置项,然后 info 这个 endpoint 就会将这些配置项的值作为信息的一部分展示出来。
5health针对当前 SpringBoot 应用的健康检查用的 endpoint。
6env关于当前 SpringBoot 应用对应的 Environment 信息。
7metrics当前 SprinBoot 应用的 metrics 信息。
8trace当前 SpringBoot 应用的 trace 信息。
9mapping如果是基于 SpringMVC 的 Web 应用,mapping 这个 endpoint 将给出 @RequestMapping 相关信息。

2.3.2 Actuator 类 endpoints

  • shutdown:用于关闭当前 SpringBoot 应用的 endpoint。
  • dump:用于执行线程的 dump 操作。

默认情况下,除了 shutdown 这个 endpoint(因为比较危险,如果没有安全防护,谁都可以访问它,然后关闭应用),其他 endpoints 都是默认启用的。

生产环境下,如果没有启用安全防护(比如没有依赖 spring-boot-starter-security),那么,建议遵循 Deny By Default 原则,将所有的 endpoints 都关掉,然后根据具体情况单独启用某些 endpoint:

endpoints:enabled: truefalseendpoints:info:enabled: trueendpoints: health: enabled: true

所有配置项以 endpoints. 为前缀,然后根据 endpoint 名称划分具体配置项。大部分 endpoints 都是开箱即用,但依然有些 endpoint 提供给我们进一步扩展的权利,比如健康状态检查相关的 endpoint(health endpoint)。

2.3.3 自定义应用的健康状态检查

应用的健康状态检查是很普遍的监控需求,SpringBoot 也预先通过 org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration 为我们提供了一些常见服务的监控检查支持,比如:

  • DataSourceHealthIndicator
  • DiskSpaceHealthIndicator
  • RedisHealthIndicator
  • SolrHealthIndicator
  • MongoHealthIndicator

如果这些默认提供的健康检查支持依然无法满足我们的需要,SpringBoot 还允许我们提供更多的 HealthIndicator 实现,只要将这些 HealthIndicator 实现类注册到 IoC 容器,SpringBoot 会自动发现并使用它们。

三、Actuator监控项

HTTP方法路径描述授权
GET/autoconfig查看自动配置的使用情况true
GET/configprops查看配置属性,包括默认配置true
GET/beans查看bean及其关系列表true
GET/dump打印线程栈true
GET/env/{name}查看具体变量值true
GET/health查看应用健康指标true
GET/info查看应用信息(需要自己在application.properties)里头添加信息,false
GET/mappings查看所有url映射true
GET/metrics报告各种应用程序度量信息,比如内存用量和HTTP请求计数true
GET/metrics/{name}报告指定名称的应用程序度量值true
GET/shutdown关闭应用程序,要求endpoints.shutdown.enabled设置为truetrue
GET/trace提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)true

四、Spring Boot Actuator应用扩展

endpoints 属于 spring-boot-starter-actuator 提供的主要功能之一,除此之外,spring-boot-starter-actuator 还提供了更多针对应用监控的支持和实现方案。

3.1 CrshAutoConfiguration 与 spring-boot-starter-remote-shell

spring-boot-starter-actuator 提供了基于 CRaSH 的远程 Shell(Remote Shell)支持,这是一把双刃剑,不建议在生产环境使用,因为提供给自己便利的同时,也为黑客朋友们提供了便利。如果实在要用,请加强安全认证和防护。

不过,这里我们还是会为大家分析一下 spring-boot-starter-actuator 是如何提供针对 CRaSH 的支持的。

spring-boot-starter-actuator 提供了 org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration 自动配置类,该类会在 org.crsh.plugin.PluginLifeCycle 出现在 classpath 中的时候生效。

所以,只要将 CRaSH 作为依赖加入应用的 classpath 依赖就可以了,最简单直接的做法是让需要启用 CRaSH 的 SpringBoot 应用依赖 spring-boot-starter-remote-shell 自动配置模块,spring-boot-starter-remote-shell 的主要功效就是提供了针对 CRaSH 的各项依赖。

3.2 CrshAutoConfiguration 与 spring-boot-starter-remote-shell

SpringBoot 提供了一套自己的针对系统指标的度量框架,基本上,我们只需关注 org.springframework.boot.actuate.endpoint.PublicMetrics 即可,它可以理解为提供一组 Metric 的集合,我们既可以通过 PublicMetrics 来汇总和管理 Metric,也可以通过 MetricRepository 来存储和管理 Metric。

一旦使用了 spring-boot-starter-actuator,只要当前 SpringBoot 应用的 ApplicationContext 中存在任何 PublicMetrics 实例,EndpointAutoConfiguration 就会将这些 PublicMetrics 采集汇总到一起,然后通过 MetricsEndpoint 将它们开放出去。

spring-boot-starter-actuator 提供的 org.springframework.boot.actuate.autoconfigure.PublicMetricsAutoConfiguration 默认会把一个 SystemPublicMetrics 开放出来,用于提供系统各项指标的度量和状态采集,另外一个就是会把当前 SpringBoot 应用的 ApplicationContext 的 org.springframework.boot.actuate.metrics.repository.MetricRepository 实例中的所有 Metric 汇总并开放出去。

默认如果用户没有给出任何自定义的 MetricRepository,spring-boot-starter-actuator 会提供一个 InMemoryMetricRepository 实现,如果我们将 Dropwizard 的 Metrics 类库作为依赖加入 classpath,那么,Dropwizard Metrics 的 MetricRegistry 中所有的度量指标项也会通过 PublicMetrics 的形式开发暴露出来。

虽然 SpringBoot 提供的 metrics 框架也能帮助我们完成系统和应用指标的度量,但笔者更倾向于使用 Dropwizard 这种特定场景下比较完善的方案,从 metrics 的类型,到外围系统的集成,Dropwizard metrics 都更加成熟和完备。

3.3 Auditing 与 Trace

SpringBoot 的 Auditing 和 Trace 支持都遵循数据/事件+Repository 的设计。从设计上来说是很简单清晰的,也有很好的统一性,但实际应用过程中,我们依然会更加倾向于特定场景的方案选型。

我们可能只是通过打印日志时候的 Logger 名称来区分并记录 Audit 事件,然后通过日志采集通道汇总分析就可以了,而不用非要实现一个 LogFileBasedAuditEventRepository 或者 ElasticSearchBasedAuditEventRepository 之类的实现,对于 Trace 来说也是同样道理,我们可能直接使用完备的 APM 方案而不是单一或者少量 Trace 事件的记录。

五、总结

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

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

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

相关文章

怎么在线修改图片?分享一个图片修改工具

无论是在个人或商业领域&#xff0c;我们都需要使用高质量的图片来传达信息或提高品牌形象。大尺寸的图片也会占据大量的存储空间和带宽&#xff0c;影响网站的加载速度和用户体验。因此&#xff0c;我们需要一种高效的工具来解决这个问题。今天向大家介绍一款非常实用的图片处…

Android 开发代码规范

一. AndroidStudio开发工具规范 使用最新的稳定版本.统一文件的编码格式为utf-8. 清除每个类里面的无效的import导包.代码样式统一,比如&#xff0c;tab缩进4个空格&#xff0c;或者 tab size等如果没有特殊情况使用默认的配置即可。每行字数每行字符数不得超过 160 字符&…

C++--菱形继承

1.什么是菱形继承 单继承&#xff1a;一个子类只有一个直接父类时称这个继承关系为单继承 多继承&#xff1a;一个子类有两个或以上直接父类时称这个继承关系为多继承 菱形继承的问题&#xff1a;菱形继承有数据冗余和二义性的问题&#xff0c;数据冗余是由于创建多个相同类型的…

SpringBoot 如何进行 统一异常处理

在Spring Boot中&#xff0c;可以通过自定义异常处理器来实现统一异常处理。异常处理器能够捕获应用程序中抛出的各种异常&#xff0c;并提供相应的错误处理和响应。 Spring Boot提供了ControllerAdvice注解&#xff0c;它可以将一个类标记为全局异常处理器。全局异常处理器能…

Glow: Generative Flow with Invertible 1×1 Convolutions论文解析及实现(二)

Glow: Generative Flow with Invertible 11 Convolutions 代码github: https://github.com/rosinality/glow-pytorch添加链接描述 1 模型架构如下 1.1 左边图flow模型 Flow model ① ActNorm ② InvConv2dLU ③ AffineCoupling 1.2 右边模型结构Glow模型 Glow Model Block…

万年历【小游戏】(Java课设)

系统类型 Java实现的小游戏 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Idea或eclipse 运行效果 更多Java课设系统源码地址&#xff1a;更多Java课设系统源码地址 更多Java小游戏运行效果展示&#xff1a;更多Java小游戏运行效果展…

解决Font family [‘sans-serif’] not found问题

序言 以下测试环境都是在 anaconda3 虚拟环境下执行。 激活虚拟环境 conda activate test_python_env 或 source activate test_python_env工具&#xff1a; WinSCP Visual Studio Code 这里笔者使用 WinSCP 工具连接&#xff0c;编辑工具是 Visual Studio Code 一、字体…

mysql(六)读写分离

目录 前言 一、概述 二、配置JAVA环境及安装阿米巴 三、配置阿米巴 四、测试 总结 前言 MySQL读写分离是一种常见的数据库架构设计模式&#xff0c;旨在提高系统的性能和可用性。它通过将读操作和写操作分离到不同的MySQL实例上来实现。 读写分离的原理是&#xff1a; 1. 主…

UE5.1.1 创建C++项目失败

因一直使用Unity开发环境&#xff0c;安装Unreal后&#xff0c;并未详细配置过其开发环境&#xff0c;默认创建蓝图工程无异常&#xff0c;但创建UE C项目时总共遇到两个错误&#xff1a; 错误一 Running /Epic/UE/UE_5.1/Engine/Build/BatchFiles/Build.bat -projectfiles -…

郑州主域名和多个子域名的泛域名https证书

随着网络的发展&#xff0c;一个站长往往会创建多个域名网站&#xff0c;为了与主站有联系&#xff0c;站长会选择主站域名的二级域名来创建网站&#xff0c;比如主站是www .***. com&#xff0c;那么新创建的网站的域名就是top .***. com、vip .***. com等。 1.在安装部署htt…

原生求生记:揭秘UniApp的原生能力限制

文章目录 1. 样式适配问题2. 性能问题3. 原生能力限制4. 插件兼容性问题5. 第三方组件库兼容性问题6. 全局变量污染7. 调试和定位问题8. 版本兼容性问题9. 前端生态限制10. 文档和支持附录&#xff1a;「简历必备」前后端实战项目&#xff08;推荐&#xff1a;⭐️⭐️⭐️⭐️…

利用小波包对一维信号进行降噪或压缩(MATLAB)

function [ output_args ] example4_12( input_args ) %EXAMPLE4_12 Summary of this function goes here % Detailed explanation goes here clc; clear; % 设置信噪比和随机数的初始值 snr 3; init 2055615866; % 生成一个原始信号xref和含高斯白噪声的信号x [xref,x] …

网络安全/信息安全(黑客技术)自学笔记

一、网络安全基础知识 1.计算机基础知识 了解了计算机的硬件、软件、操作系统和网络结构等基础知识&#xff0c;可以帮助您更好地理解网络安全的概念和技术。 2.网络基础知识 了解了网络的结构、协议、服务和安全问题&#xff0c;可以帮助您更好地解决网络安全的原理和技术…

2023年的深度学习入门指南(22) - 百川大模型13B的运行及量化

2023年的深度学习入门指南(22) - 百川大模型13B的运行及量化 不知道上一讲的大段代码大家看晕了没有。但是如果你仔细看了会发现&#xff0c;其实代码还是不全的。比如分词器我们就没讲。 另外&#xff0c;13B比7B的改进点也没有讲。 再有&#xff0c;对于13B需要多少显存我们…

记录每日LeetCode 141.环形链表 Java实现

题目描述&#xff1a; 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链…

【RTT驱动框架分析00】-应用层函数调用流程-串口为例

应用层函数调用流程分析以-串口为例 1. rt_device_find调用流程 RTT内部有一个全局变量数组rt_object_container数组的数量就是 rt_object_info_type 内核对象的种类&#xff0c;其中包含一个RT_USING_DEVICE (设备的数据类型)&#xff0c;数组内部的每一个变量包含一个链表&…

基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

C\C++内存管理

目录 1.C/C内存分布2.C语言中动态内存管理方式3.C中动态内存管理3.1new/delete内置类型3.2new和delete操作自定义类型 4.operator new与operator delete函数4.2重载operator new与operator delete&#xff08;了解&#xff09; 5.new和delete的实现原理5.1内置类型5.2 自定义类…

【动态规划part12】| 309.买卖股票的最佳时机含冷冻期、714.买卖股票的最佳时机含手续费

目录 &#x1f388;LeetCode309.最佳买卖股票时机含冷冻期 &#x1f388;LeetCode714.买卖股票的最佳时机含手续费 &#x1f388;LeetCode309.最佳买卖股票时机含冷冻期 给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计…

【计算机视觉中的 GAN 】如何稳定GAN训练(3)

一、说明 在上一篇文章中&#xff0c;我们达到了理解未配对图像到图像翻译的地步。尽管如此&#xff0c;在实现自己的超酷深度GAN模型之前&#xff0c;您必须了解一些非常重要的概念。如本文所提的GAN模型新成员的引入&#xff1a;Wasserstein distance&#xff0c;boundary eq…