Spring Boot 监控

news/2024/11/20 9:17:49/

目录

1.概述

2.使用

2.1.依赖

2.2.配置

2.2.1.默认

2.2.2.暴露端点

2.3.常用端点

2.3.1.health

2.3.2.metrics

2.3.3.loggers

2.3.4.beans 

2.4.自定端点


1.概述

Spring Boot Actuator提供了对Spring Boot应用进行监控的能力,其提供了4个方面的监控能力:

  1. 健康状况, 提供有关应用程序健康状况的信息。

  2. 指标 ,提供有关应用程序运行的量化数据,如内存使用情况、CPU使用情况等。

  3. 信息,提供有关应用程序的一般信息,例如应用程序名称、版本号等。

  4. 跟踪,提供有关应用程序请求的跟踪信息,例如请求的时间、响应时间等。

这4个方面的能力由多种端点来支撑实现:

  1. health:用于检查应用程序的健康状况。可以返回应用程序的健康状态、描述和详细信息等。

  2. info:用于获取应用程序的基本信息。可以返回应用程序的名称、版本、描述和其他相关信息等。

  3. metrics:用于获取应用程序的度量指标信息。可以返回应用程序的各种度量指标,例如请求响应时间、请求次数、JVM 内存使用情况等。

  4. beans:用于获取应用程序中的所有 Bean 的信息。可以返回应用程序中所有 Bean 的名称、类型和依赖关系等。

  5. env:用于获取应用程序的环境变量信息。可以返回应用程序的系统属性、配置属性和命令行参数等。

  6. configprops:用于获取应用程序中所有配置属性的信息。可以返回应用程序中所有配置属性的名称、类型和默认值等。

  7. mappings:用于获取应用程序的 URL 映射信息。可以返回应用程序中所有 URL 映射的路径、方法和处理器等。

  8. loggers:用于获取应用程序的日志信息。可以返回应用程序中所有日志记录器的名称、级别和配置信息等。

  9. trace:用于获取应用程序的请求跟踪信息。可以返回应用程序中最近的请求跟踪信息,包括请求时间、处理时间、状态码和请求参数等。

Spring Boot Actuator有多种访问端点的方式:

  1. HTTP端点访问:通过HTTP请求访问端点。

  2. JMX端点访问:通过Java Management Extensions(JMX)访问端点。

  3. SSH端点访问:通过SSH连接访问端点。

  4. WebSocket端点访问:通过WebSocket连接访问端点。

  5. Telnet端点访问:通过Telnet连接访问端点。

  6. RSocket端点访问:通过RSocket连接访问端点。

本文介绍的是以HTTP方式进行访问,Spring Boot Actuator的核心就是端点,弄清楚端点后访问方式都是可以平滑切换的。

2.使用

2.1.依赖

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

2.2.配置

2.2.1.默认

引入依赖后其实监控就已经可以使用了,使用ip:port/actuator就可以看到有哪些端点是开放的,如果没有配置监控的端口号,会默认使用应用的端口号:

 通过以下配置修改监控的端口号:

management.server.port=8081

通过以下配置可以修改Path前缀:

management.endpoints.web.base-path=/manage

配置成以上Path前缀后,访问地址将变为ip:port/manage/actuator/XXX

2.2.2.暴露端点

只有一些常用的端点会被暴露给 HTTP ,可以通过配置来指定哪些端点暴露或者不暴露,支持通配符*用来匹配所有。

指定哪些端点不暴露:

management.endpoints.web.exposure.exclude=health,info

指定哪些端点暴露:

management.endpoints.web.exposure.include=beans,configprops

shutdown是个特殊的端点,可以用于远程关闭应用程序。当您向该端点发送 POST 请求时,应用程序将优雅地关闭,即首先关闭所有正在处理的请求,然后关闭 Spring 应用程序上下文。暴露该端点需要单独配置:

management.endpoint.shutdown.enabled=true

2.3.常用端点

2.3.1.health

1.显示详细内容

health端点暴露后,默认只能访问到一个简短的状态信息:

 通过配置可以返回详细的健康信息:

management.endpoint.health.show-details=always

由于demo中没有使用任何中间件、数据库只返回了磁盘状态和详细信息,如果有用到中间件、数据库等,details内会包含相关内容:

  • diskSpace:磁盘空间的使用情况,包括总空间、已用空间和可用空间。

  • db:数据库的连接状态和性能指标,如连接池的使用情况、查询执行次数等等。

  • redis:Redis的连接状态和性能指标,如连接池的使用情况、key数量等等。

  • cassandra:Cassandra的连接状态和性能指标,如连接池的使用情况、节点状态等等。

  • elasticsearch:Elasticsearch的连接状态和性能指标,如连接池的使用情况、索引数量等等。

2.自定义health指标

actuator提供了自定义的健康状态检查信息的能力,可以通过实现`HealthIndicator`的接口来实现:

import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;@Component
public class MyHealthIndicator implements HealthIndicator {@Overridepublic Health health() {int errorCode = check(); // 自定义健康指标的实现逻辑if (errorCode != 0) {return Health.down().withDetail("Error Code", errorCode).build();}return Health.up().build();}private int check() {// 检查自定义健康指标的实现逻辑return 1;}
}

3.状态码

health指标有多种状态,因此在自定义的时候需要注意标准化:

  • UP:表示应用程序正在正常运行并且没有错误。
  •  DOWN:表示应用程序已经停止了服务或者发生了错误。
  • UNKNOWN:表示应用程序健康状况不确定,需要进一步检查才能确定问题所在。
  • OUT_OF_SERVICE:表示应用程序上下文不接受请求,因此服务处于禁用状态。
  • FATAL:表示应用程序出现了严重错误,无法继续处理请求。

可以通过配置来在返回中各指标根据状态来进行排序:

management.health.status.order=FATAL, DOWN, OUT_OF_SERVICE, UNKNOWN, UP

在做健康检查时,响应中的HTTP状态码反应了整体的健康状态,(例如,UP 对应 200, 而 OUT_OF_SERVICE`和 DOWN 对应 503)。可以为自定义的状态类型设置对应的HTTP状态码,例如,下面的配置可以将 FATAL`映射为 503(服务不可用):

management.health.status.http-mapping.FATAL=503

2.3.2.metrics

1.查看内容

查看有哪些指标:

 查看具体某个指标的内容:

/actuator/metrics/指标名

2.自定义指标

指标有四种基本数据类型:

  • Counter: 计数器,递增或递减的整数值
  • Gauge: 可以任意取值的数值,例如当前线程数、内存使用情况等
  • Timer: 计时器,可以测量一段代码的执行时间和调用次数
  • Distribution Summary: 统计数据分布的摘要,例如响应时间的分布情况

此处我们以创建一个计数器类型的指标为例,其它类型的可以同理类推。

创建指标:

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class MyMetrics {private final Counter myCounter;@Autowiredpublic MyMetrics(MeterRegistry registry) {//指标名my.countermyCounter = registry.counter("my.counter");}public void incrementCounter() {myCounter.increment();}
}

 调用:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {private final MyMetrics myMetrics;public MyController(MyMetrics myMetrics) {this.myMetrics = myMetrics;}@GetMapping("/my-api")public String myApi() {// 处理业务逻辑myMetrics.incrementCounter();return "success";}
}

在上述代码中,我们定义了一个名叫my.counter的指标,并在Controller的myApi()方法中调用incrementCounter()方法。这样,每次请求myApi()方法时,计数器的值都会递增1。

2.3.3.loggers

  • loggers端点可以帮助开发人员实时查看和管理应用程序的日志记录器。该端点提供了以下操作:获取日志记录器列表:使用HTTP GET请求访问/loggers端点,可以获取当前应用程序的所有日志记录器的名称列表。
  • 获取特定日志记录器的级别:使用HTTP GET请求访问/loggers/{logger-name}端点,可以获取指定日志记录器的当前级别。
  • 更改特定日志记录器的级别:使用HTTP POST请求访问/loggers/{logger-name}端点,并在请求体中提供所需的日志级别,可以将指定日志记录器的级别更改为所需级别。

对于第3点,需要在请求体中提供一个JSON对象,例如:

{
    "configuredLevel": "DEBUG"
}

其中,`configuredLevel`是日志级别,可以是`TRACE`、`DEBUG`、`INFO`、`WARN`、`ERROR`或`FATAL`。如果将级别设置为`null`,则将恢复使用默认级别。

info.app.name=actuator-test-demo
info.app.encoding=UTF-8
info.app.java.source=1.8
info.app.java.target=1.8

当然也可以通过代码来定义:

@Component
public class MyInfo implements InfoContributor {@Overridepublic void contribute(Info.Builder builder) {Map<String, String> info = new HashMap<>();info.put("name", "zou");info.put("email", "service@zou.com");builder.withDetail("author", info);}
}

2.3.4.beans 

beans端点用于获取应用程序上下文中所有可用的 Spring bean 列表。该端点返回的信息包括 bean 名称、bean 的完全限定类名和是否为懒加载等信息。该端点主要用于应用程序调试和故障排除。

用于定位线上问题的端点

在生产环境中,一般定位线上问题无非两个方面:

  • JVM信息
  • 线程信息

actuator支持我们通过端点获取到应用的以上两个方面的信息来方便我们进行线上问题的定位、处理。

1.heapdump

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

2.threaddump

`/actuator/threaddump` 端点用于获取应用程序中所有线程的堆栈跟踪信息,可用于分析和诊断线程相关的问题,比如死锁和线程阻塞等。

当访问 `/actuator/threaddump` 端点时,应用程序将返回一个JSON对象,其中包含了所有线程的详细信息,每个线程都有自己的ID,名称和状态等信息,以及它当前执行的堆栈跟踪信息。

2.4.自定端点

Spring Boot Actuator支持以注解的方式自定义端点,可以在Bean上使用 @Endpoint 、@JmxEndpoint 或 @WebEndpoint 编写 EndPoint。三个注解的不同见知意,各自的访问方式不同,@WebEndpoint 仅能通过HTTP访问,@JmxEndpoint 仅能通过JMX访问。

然后配套了三个方法注解用来定义对各类请求的响应:

  • @ReadOperation对应HTTP的GET请求
  • @WriteOperation对应HTTP的POST请求
  • @DeleteOperation对应HTTP的DELETE请求

通过ip:port/actuator/myEndPoint能访问到下面我们自定义的端点。

package com.eryi.bean;import org.springframework.boot.actuate.endpoint.annotation.DeleteOperation;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.boot.actuate.endpoint.annotation.WriteOperation;
import org.springframework.stereotype.Component;@Component
@Endpoint(id = "myEndPoint")
public class MyEndPoint {@ReadOperationpublic String endpointCustomRead(String content) {return "请求的内容: " + content;}@WriteOperationpublic String endpointCustomWrite(String content) {return "写的内容: " + content;}@DeleteOperationpublic String endpointCustomDelete(String content) {return "删除的内容: " + content;}
}

http://www.ppmy.cn/news/40903.html

相关文章

从零开始学习Java神经网络、自然语言处理和语音识别,附详解和简易版GPT,语音识别完整代码示例解析

&#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; 目录一、神经网络简介二、实现简单神经网络三、Java自然语言处理示例代码&#xff08;简易版GPT&#xff09;四、Java简易版语音识别示例代码五、结论神经网络是一种模仿人脑神经…

AI热潮的发展,既有机遇也有挑战!

目录 人生中第一次接触到 “人工智能” 的概念和产品是什么&#xff1f; 让你觉得 “人类做得东西的确有智能”&#xff1f; 在学习工作中碰到的最高级的 AI 是什么&#xff1f; 听说过最近的 GPT&#xff0c;new bing&#xff0c; bard&#xff0c;AI 绘画&#xff0c; AI …

[imx6ull]PWM编程-蜂鸣器控制

文章目录一、PWM概述二、PWM的参数三、驱动配置四、PWM应用测试1.应用程序2.makefile3.运行测试一、PWM概述 PWM(Pulse Width Modulation)&#xff0c;是脉冲宽度调制缩写&#xff0c;它是通过对一系列脉冲的宽度进行调制&#xff0c;等效出所需要的波形&#xff08;包含形状以…

使用树状图可视化聚类

一般情况下&#xff0c;我们都是使用散点图进行聚类可视化&#xff0c;但是某些的聚类算法可视化时散点图并不理想&#xff0c;所以在这篇文章中&#xff0c;我们介绍如何使用树状图&#xff08;Dendrograms&#xff09;对我们的聚类结果进行可视化。 树状图 树状图是显示对象…

探索网络世界的核心:TCPIP协议四层模型解析.md

前言 欢迎来到今天的每日一题&#xff0c;每日一提。今天要聊的是面试中经常会问到tcp协议 。相信在以往的面试中&#xff0c;一定碰到过这个问题吧&#xff1a;什么是TCP/IP协议&#xff1f;它包括哪些层次&#xff1f;。虽然在面试中脱口而出&#xff0c;有四层&#xff1a;应…

有无SSL证书,网站安全大不同

随着互联网时代的发展&#xff0c;用户信息数据量越来越大&#xff0c;同时数据泄露的风险也越来越大。随意搜索一下&#xff0c;用户信息数据泄露等安全问题的事件常有发生。 一些数据泄露的报道事件令大众对于自身数据安全这一块非常敏感&#xff0c;保护自己信息安全的意识…

「抖in新风潮·春夏上新」,新品激活潮流“大”生意

不同的时代风靡各异的潮流&#xff0c;而在当下&#xff0c;更多年轻人正以年轻鲜活的视野&#xff0c;无限放大“自我”的力量&#xff0c;塑造着属于个体的潮流表达。这种基于真我本色的塑造&#xff0c;在抖音又得以被无限地看到&#xff0c;从而无限地聚集同好、引发交流、…

科研热点|2023基金委首批科研不端案件处理结果通报~

2023年查处的不端行为案件处理结果通报&#xff08;第一批次&#xff09; 近期&#xff0c;经国家自然科学基金委员会监督委员会调查审议、国家自然科学基金委员会委务会议审定&#xff0c;国家自然科学基金委员会对相关科研不端案件涉事主体进行了处理。现将给予通报批评的有…