微服务监控SpringBoot Actuator模块

Spring Boot Actuator

Spring Boot 包含许多附加功能,可帮助您在将应用程序投入生产时监控和管理应用程序。您可以选择使用 HTTP 端点或 JMX 来管理和监控您的应用程序。审核、运行状况和指标收集也可以自动应用于您的应用程序。

简介

Spring Boot Actuator模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP跟踪等,帮助我们监控和管理Spring Boot应用。这个模块是一个采集应用内部信息暴露给外部的模块,上述的功能都可以 通过HTTP 和JMX访问。

因为暴露内部信息的特性,Actuator也可以和一些外部的应用监控系统整合(Prometheus,Graphite,DataDog,Influx, Wavefront, New Relic等)。这些监控系统提供了出色的仪表板,图形,分析和警报,可帮助你通过一个统一友好的界面,监视和管理你的应用程序。

Actuator使用Micrometer与这些外部应用程序监视系统集成。这样一来,只需很少的配置即可轻松集成外 部的监控系统。

提供大量的监控端点(endpoints),主要作用是用于监控与管理(有效减少了监控代码的开发量)
快速应用

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

它提供了很多监控和管理你的spring boot应用的HTTP或者JMX端点,并且你可以有选择地开启和关闭部分功能。当你的spring boot应用中引入依赖之后,将自动拥有审计、健康检查、Metrics监控功能。
http://localhost:8080/actuator
在这里插入图片描述

监控端点(EndPoints)分类

Spring Boot提供了所谓的endpoints(下文翻译为端点)给外部来与应用程序进行访问和交互。

根据端点的作用的话,我们大概可以分为三大类:

  • 应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与Spring Boot应用密切相关的配置类信息。
  • 度量指标类:获取应用程序运行过程中用于监控的度量指标,比如:内存信息、线程池信息、HTTP请求统计等。
  • 操作控制类:提供了对应用的关闭等操作类功能。

需要注意的就是:

  • 每一个端点都可以通过配置来单独禁用或者启动
  • 不同于Actuator 1.x,Actuator 2.x的大多数端点默认被禁掉。Actuator
    2.x中的默认端点增加了/actuator 前缀。默认暴露的两个端点为/actuator/health和/actuator/info

概念

http://localhost:8080/actuator

/actuator/health: 健康检查,显示应用健康信息
.
/actuator/info: 应用信息,展示了关于应用的一般信息,这些信息从编译文件比如META-INF/build-info.properties或者Git文件比如git.properties或者任何环境的property中获取。

测试 http://localhost:8080/actuator/health

status值为UP说明应用是健康的,如果应用不健康,将会显示DOWN。
默认情况下,只有health和info 通过HTTP暴露出来,所以/actuator 只展示了health 和 info endpoints.
.
如何暴露其他的endpoints ?

常用的端点列表

在这里插入图片描述
在这里插入图片描述

端点(endpoints)暴露配置

我们可以通过以下配置,来配置通过JMX和HTTP 暴露的端点。

可以打开所有的监控点
management.endpoints.web.exposure.include=*也可以选择打开部分,"*"代表暴露所有的端点,如果指定多个端点,用","分开
management.endpoints.web.exposure.exclude=beans,traceActuator 默认所有的监控点路径都在/actuator/*,当然如果有需要这个路径也支持定制。
management.endpoints.web.base-path=/minitor
设置完重启后,再次访问地址就会变成/minitor/*.

在这里插入图片描述

*在 YAML 中具有特殊含义,因此如果要包含(或排除)所有端点,请务必添加引号。

如果您的应用程序公开暴露,我们强烈建议您也保护您的端点。

重点端点解析

/health端点

/health端点会聚合你程序的健康指标,来检查程序的健康情况。
如redis、rabbitmg、db等组件。当你的项目有依赖对应组件的时候,这些健康指示器就会被自动装配,继而
采集对应的信息。
端点公开的应用健康信息取决于:

management .endpoint .health.show-details=always
management:endpoints:web:exposure:include:'*'endpoint:health:show-details: always

该属性可以使用以下值之一进行配置:

属性值描述
never不展示详细信息,up或者down的状态,默认配置
when-authorized详细信息将会展示给通过认证的用户。授权的角色可以通过management .endpoint.health.roles 配置
always对所有用户暴露详细信息

按照上述配置,配置成always之后,我们启动项目,访问http://localhost:8080/actuator/health端口

/health 端点有很多自动配置的健康指示器:如redis、rabbitmg、db等组件。当你的项目有依赖对应组件的时候,这些健康指示器就会被自动装配,继而采集对应的信息。

当如上的组件有一个状态异常,应用服务的整体状态即为down。我们也可以通过配置禁用某个组件的健康监测。

management.health.redis.enabled: false

或者禁用所有自动配置的健康指示器:

management.health.defaults.enabled: false

在这里插入图片描述

/metrics端点

/metrics 端点用来返回当前应用的各类重要度量指标,比如:内存信息、线程信息、垃圾回收信息、 tomcat、数据库连接池等。

访问 metrics端点:

http://localhost:8080/actuator/metrics

在这里插入图片描述

Actuator在这个界面看不到具体的指标信息,只是展示了一个指标列表。为了获取到某个指标的详细信息,我们可
以请求具体的指标信息,像这样:

http://localhost:8080/actuator/metrics/{MetricName}

比如我访问/actuator/metrics/jvm.memory.max ,
在这里插入图片描述

/loggers 端点

/loggers 端点暴露了我们程序内部配置的所有logger的信息。我们访问/actuator/loggers 可以看到,

  • 1、例如:查看某一个组件服务或某一个应用的日志级别,并对其进行实时的变更。
  • 2、loggers endpoint同时提供了在应用运行时改变日志级别的能力,比如你想要改变
    com.netflix.discovery.DiscoveryClient的logger等级为DEBUG,可以发送一个POST请求,
  • 3、动态修改日志级别的功能对于日常排查问题,是一个有利支持。同时可以传递null給configuredLevel来重置 日志等级。
    在这里插入图片描述
    在这里插入图片描述

info端点

/info 端点可以用来展示你程序的信息。

info endpoint展示了应用的基本信息,它通过META-INF/build-info.properties来获取编译信息,通过git.properties来获取当前应用的Git版本信息。同时它可以展示任何信息,只要应用环境property中含有info key。 就是一些程序的基础信息。并且你可以按照自己的需求在配置文件application.yml 中个性化配置(默认情况下,该端点只会返回一个空的JSON内容)

例如一些常用信息配置,包含应用名称、应用描述、应用版本、编码格式、JDK版本等。

info:app:name: acturator-demojava: jdk1.8encoding: utf-8auther: guoweixin

/beans端点

/beans 端点会返回Spring容器中所有bean的别名、类型、是否单例、依赖等信息。
访问http://localhost:8080/actuator/beans,返回如下:
在这里插入图片描述

/heapdump 端点

访问:http://localhost:8080/actuator/heapdump会自动生成一个Jvm 的堆文件heapdump。我们可以使用JDK 自带的 Jvm监控工具VisualVM打开此文件查看内存快照。

返回一个GZIP压缩的JVM堆dump

问题:
开发大型Java应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化。
简介:
VisualVM是一款免费的性能分析工具。它通过jvmstat、JMX、SA(ServiceabilityAgent)以及Attach API等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。

VisualVM 的主要功能如何利用获得的数据进行性能分析及调优
VisualVM 是一个性能分析工具,自从JDK 6 Update 7以后已经作为Oracle JDK的一部分,位于JDK根目录的bin 文件夹下。VisualVM自身要在JDK6以上的版本上运行,但是它能够监控JDK1.4以上版本的应用程序

在JDK/bin目录下找到该文件jvisualvm.exe:
jvisualvm工具
导入http://localhost:8080/actuator/heapdump下载的堆文件
返回一个GZIP压缩的JVM堆dump(heapdump)将其后缀名改为: .hprof
jvisualvm工具
分析堆文件中的类占用内存情况和实例数
堆文件

/threaddump 端点

该端点方便我们在日常定位问题的时候查看线程的情况。主要展示了线程名、线程ID、线程的状态、是否等待锁资源、线程堆栈等信息。就是可能查看起来不太直观。访问
http://localhost:8080/actuator/threaddump返回如下:
/threaddump 端点

/shutdown 端点

这个端点属于操作控制类端点,可以优雅关闭Spring Boot应用。要使用这个功能首先需要在配置文件中开启:

management.endpoint.shutdown.enabled=true

由于 shutdown 接口默认只支持 POST 请求,我们启动项目,向http://localhost:8080/actuator/shutdown
发起 POST 请求。返回信息:

{
"message":"Shutting down, bye..."
}

Spring Security对端点进行安全校验

由于端点的信息和产生的交互都是非常敏感的,必须防止未经授权的外部访问。应用程序中引入Spring Security的依赖,则默认情况下使用基于表单的HTTP身份验证来保护端点。

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

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

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

相关文章

参数引入和全局变量引入实现-目标和

LCR 102. 目标和 - 力扣&#xff08;LeetCode&#xff09; 分析题意&#xff0c;画出决策树&#xff0c;其他的思路都跟前面讲过的类似&#xff1a; 全局变量引入实现&#xff1a; 全局变量的引入&#xff0c;需要手动处理回溯&#xff1b; class Solution {int ret; //…

智慧公厕:打造智慧城市的环卫明珠

在城市建设中&#xff0c;公共卫生设施的完善和智能化一直是重要环节。而智慧公厕作为智慧城市建设的重要组成部分&#xff0c;发挥着不可替代的作用。本文以智慧公厕源头实力厂家广州中期科技有限公司&#xff0c;大量精品案例现场实景实图&#xff0c;解读智慧公厕如何助力打…

SwiftUI 在 App 中弹出全局消息横幅(下)

功能需求 在 SwiftUI 开发的 App 界面中,有时我们需要在全局层面向用户展示一些消息: 如上图所示:我们弹出的全局消息横幅位于所有视图之上,这意味这它不会被任何东西所遮挡;而且用户可以点击该横幅关闭它。这是怎么做到的呢? 在本篇博文中,您将学到以下内容 功能需求…

自测-5 Shuffling Machine(python版本)

文章预览&#xff1a; 题目翻译算法python代码oj反馈结果 题目 翻译 shuffle是用于随机化一副扑克牌的过程。由于标准的洗牌技术被认为是薄弱的&#xff0c;并且为了避免员工通过不适当的洗牌与赌徒合作的“内部工作”&#xff0c;许多赌场使用了自动洗牌机。你的任务是模拟一…

探索Linux世界:初次接触和基本指令(文件操作)

文章目录 1.基本介绍和准备2.基本指令和Linux的基本操作3.几个重要基本指令3.1 ls - 列出文件和目录3.1.1文件的知识3.1.2 .和..文件 3.2pwd - 显示当前工作目录3.2.1路径知识 3.3 cd - 切换目录3.4 touch - 创建文件或更新时间戳3.5mkdir - 创建新目录3.6rm - 删除文件或目录3…

[技巧]Arcgis之图斑四至范围批量计算

ArcGIS图层&#xff08;点、线、面三类图形&#xff09;四至范围计算 例外一篇介绍&#xff1a;[技巧]Arcgis之图斑四至点批量计算 说明&#xff1a;如下图画出来的框&#xff08;范围标记不是很准&#xff09; &#xff0c;图斑的x最大和x最小&#xff0c;y最大&#xff0c;…

MySQL Strict Mode is not set for database connection ‘default‘

在使用 DJango 框架执行迁移文件的命令时&#xff0c;可以看到出现如下警告&#xff1a; (ll_env) D:\workspace\workspace-mengll\learning-log>python manage.py migrate System check identified some issues: WARNINGS: ?: (mysql.W002) MySQL Strict Mode is not set …

【动态规划专栏】

动态规划基础知识 概念 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;&#xff1a;用来解决最优化问题的算法思想。 动态规划是分治思想的延伸&#xff0c;通俗一点来说就是大事化小&#xff0c;小事化无的艺术。 一般来说&#xff0c;…

账单怎么记账软件下载,佳易王账单记账汇总统计管理系统软件教程

账单怎么记账软件下载&#xff0c;佳易王账单记账汇总统计管理系统软件教程 一、前言 以下软件以 佳易王账单记账汇总统计管理系统软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 软件特色&#xff1a; 1、功能实用&#xff0c;操作…

Vue之监测数据的原理(对象)

大家有没有想过&#xff0c;为什么vue可以监测到数据发生改变&#xff1f;其实底层借助了Object.defineProperty&#xff0c;底层有一个Observer的构造函数 让我为大家简单的介绍一下吧&#xff01; 我用对象为大家演示一下 const vm new Vue({el: "#app",data: {ob…

力扣hot100:42.接雨水

什么时候能用双指针&#xff1f; &#xff08;1&#xff09;对撞指针&#xff1a; ①两数和问题中可以使用双指针&#xff0c;先将两数和升序排序&#xff0c;可以发现规律&#xff0c;如果当前两数和大于target&#xff0c;则右指针向左走。 ②接雨水问题中&#xff0c;左边最…

基于STM32F4的FFT(快速傅里叶变换)求信号幅值,频率,相位差

基于STM32F4的FFT&#xff08;快速傅里叶变换&#xff09;求信号幅值&#xff0c;频率&#xff0c;相位差 一。FFT原理介绍 快速傅里叶变换&#xff08;Fast Fourier Transform&#xff0c;FFT&#xff09;是一种用于高效计算傅里叶变换的算法。傅里叶变换是一种信号处理技术…

动态规划|【双指针】|11.盛水最多的容器

题目 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xf…

发现了一个超级好用的上网神器!但是不知道在哪里有卖······随身WiFi好评推荐,随身WiFi好用吗?

这两天到一个小地方出差&#xff0c; 走到一个奶茶店附近&#xff0c; 突然老板打电话说一个紧急文件需要我处理&#xff0c; 说实话有点崩溃&#xff0c; 前不着村后不着店的&#xff0c; 我去哪里找网络办公 辛亏奶茶店的小姐姐听到了&#xff0c; 让我在她店里&#x…

LVS负载均衡服务器

简介: LVS (Linux Virtual Server):四层路由设备&#xff0c;是由中国人章文松研发的(阿里巴巴的副总裁)根据用户请求的IP与端口号实现将用户的请求分发至不同的主机。 工作原理: LVS工作在一台server上提供Directory(负载均衡器)的功能&#xff0c;本身并不提供服务&#xff…

【一起学习Arcade】(6):属性规则实例_约束规则和验证规则

一、约束规则 约束规则用于指定要素上允许的属性配置和一般关系。 与计算规则不同&#xff0c;约束规则不用于填充属性&#xff0c;而是用于确保要素满足特定条件。 简单理解&#xff0c;约束规则就是约束你的编辑操作在什么情况下可执行。 如果出现不符合规则的操作&#…

python实现有限域GF(2^8)上的乘法运算

有限域GF(2^8)上的乘法运算可以看成多项式的乘法 5e转换成二进制为0101 1110&#xff0c;对应的多项式为x^6x^4x^3x^2x 3f转换成二进制为0011 1111&#xff0c;对应的多项式为x^5x^4x^3x^2x1 将这两个多项式相乘再模多项式x^8x^4x^3x1得到结果为1110 0101&#xff0c;转换为…

C# 不可识别数据库格式问题

C#是一种流行的编程语言&#xff0c;用于开发各种类型的应用程序&#xff0c;包括与数据库交互的应用程序。然而&#xff0c;在处理数据库时&#xff0c;有时会遇到一些错误和问题。其中之一就是数据库格式不可识别的错误。 在C#中&#xff0c;我们通常使用ADO.NET来连接和操作…

Flink:动态表 / 时态表 / 版本表 / 普通表 概念区别澄清

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

使用query请求数据出现500的报错

我在写项目的时候遇到了一个问题&#xff0c;就是在存商品id的时候我将它使用了JSON.stringify的格式转换了&#xff01;&#xff01;&#xff01;于是便爆出了500这个错误&#xff01;&#xff01;&#xff01; 我将JSON.stringify的格式去除之后&#xff0c;它就正常显示了&…