Spring Boot 监控

news2024/11/29 10:46:38

目录

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.3.5.用于定位线上问题的端点

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 {

    @Override
    public 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;

    @Autowired
    public MyMetrics(MeterRegistry registry) {
    	//指标名my.counter
        myCounter = 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 {
    @Override
    public 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 的完全限定类名和是否为懒加载等信息。该端点主要用于应用程序调试和故障排除。

2.3.5.用于定位线上问题的端点

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

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

    @ReadOperation
    public String endpointCustomRead(String content) {
        return "请求的内容: " + content;
    }

    @WriteOperation
    public String endpointCustomWrite(String content) {
        return "写的内容: " + content;
    }

    @DeleteOperation
    public String endpointCustomDelete(String content) {
        return "删除的内容: " + content;
    }
}

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

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

相关文章

哈希表(HashTable)

哈希表&#xff08;HashTable&#xff09;1. 相关概念2. 哈希函数选择&#xff08;常用&#xff09;3. 哈希冲突&#xff08;常用&#xff09;开散列法/哈希桶法/链地址法&#xff1a;4. Set接口及实现类4.0 常用方法4.1 HashSet4.2 LinkedHashSet4.3 TreeSet4.4 例题1. 相关概…

第八章 Attention

目录8.1 Attention 的结构8.1.1 seq2seq 存在的问题8.1.2 编码器的改进8.1.3 解码器的改进 ①8.1.4 解码器的改进 ②8.1.5 解码器的改进 ③8.2 带 Attention 的 seq2seq 的实现8.2.1 编码器的实现8.2.2 解码器的实现8.2.3 seq2seq 的实现8.3 Attention 的评价8.3.1 日期格式转换…

【数据结构】6.5 红黑树(C++)

【数据结构】——6.5 红黑树 没有学过二叉搜索树&#xff08;也叫二叉排序树或二叉查找树&#xff09;的小伙伴们建议先学习一下&#xff0c;这样阅读会更轻松哦 点我学习二叉搜索树 目录一、红黑树的概念和性质二、红黑树的存储结构和声明三、红黑树的构建过程四、红黑树的实现…

淘宝客户失率高怎么办?什么因素会影响?

电商干货 商家开淘宝店铺的时候&#xff0c;很怕的是老客户流失了。或者说经常购买的人不买了&#xff0c;这是淘宝店铺的客户流失。 那么当我们遇到淘宝的客户流失率很高的时候该怎么办呢&#xff1f;有什么样的因素会造成影响呢? 淘宝客户流失率高怎么办 1、做好质量营销 质…

Trimble RealWorks处理点云数据(七)之点云导入3dmax

效果 背景 有时候我们需要通过点云数据来逆向建模,而建模软件常用的有3dmax,SketchUp等,那如何将点云数据导入3dmax来建模呢,下面我们来了解下 步骤 1、las导入Trimble RealWorks 2、对点云数据预处理 可以参考这篇文章 TrimbleRealWorks点云数据预处理 3、导出rcp格式…

语音芯片在射击游乐设备上的应用

射击打靶体验馆项目&#xff0c;产品设备仿真程度高、趣闻性强、外观逼真&#xff0c;现场体验是一种集体验&#xff0c;体育竞技为一体且室内外均可使用的游乐&#xff01; 在靶上能够看到击中目标的效果&#xff0c;而且会语音报环靶&#xff0c;通过低音炮&#xff0c;可以…

Pytorch基础 - 6. torch.reshape() 和 torch.view()

目录 1. torch.reshape(shape) 和 torch.view(shape)函数用法 2. 当处理的tensor是连续性的(contiguous) 3. 当处理的tensor是非连续性的(contiguous) 4. PyTorch中的contiguous 在本文开始之前&#xff0c;需要了解最基础的Tensor存储方式&#xff0c;具体见 Tensor数据类…

Spring常见面试题汇总

文章目录在Spring中&#xff0c;Bean的作用域有哪几个&#xff1f;SpringMVC的执行流程你知道吗&#xff1f;谈谈你对Spring IOC的理解&#xff1f;DI又是什么&#xff1f;谈谈你对Spring AOP的理解&#xff1f;Spring Bean的生命周期你能说出多少&#xff1f;Spring如何解决循…

sggJava基础第三天

运算符 运算符是一种特殊的符号&#xff0c;用以表示数据的运算、赋值和比较等。 算术运算符 赋值运算符 比较运算符&#xff08;关系运算符&#xff09; 逻辑运算符 位运算符&#xff08;这个几乎不使用&#xff0c;我们在讲解的时候了解一下即可&#xff0c;只不过…

敏捷团队如何在 PingCode 这类敏捷开发工具中管理 Scrum 开发管理流程

在本教程中&#xff0c;我们将在 PingCode 中介绍如何使用 Scrum 项目、创建产品待办列表和规划迭代、举行 Scrum 会议等详细流程。准备工作&#xff1a;已创建 PingCode 软件帐户 【免费注册通道】 什么是Scrum&#xff1f;Scrum 是国内外最热门的敏捷开发框架之一。Scrum 通…

【SpringBoot2】SpringBoot基础篇

SpringBoot基础篇 JC-1.快速上手SpringBoot ​ 学习任意一项技术&#xff0c;首先要知道这个技术的作用是什么&#xff0c;不然学完以后&#xff0c;你都不知道什么时候使用这个技术&#xff0c;也就是技术对应的应用场景。SpringBoot技术由Pivotal团队研发制作&#xff0c;功…

第三章 word2vec

目录3.1 基于推理的方法和神经网络3.1.1 基于计数的方法的问题3.1.2 基于推理的方法的概要3.1.3 神经网络中单词的处理方法3.2 简单的 word2vec3.2.1 CBOW模型的推理3.2.2 CBOW模型的学习3.2.3 word2vec的权重和分布式表示3.3 学习数据的准备3.3.1 上下文和目标词3.3.2 转化为o…

loki采集k8s日志

前言 loki 是轻量、易用的日志聚合系统。如果你的k8s集群规模并不大&#xff0c;推荐使用grafanaloki的方案来做微服务日志的采集&#xff1b; Loki组成 loki架构很简单&#xff0c;主要由3部分组成&#xff1a; loki&#xff1a;服务端&#xff0c;负责存储日志和处理查询&…

行程器,数显卡尺液晶驱动IC,VK1623段码LCD驱动芯片资料分享,封装LQFP100,QFP100,RAM映射48EGx8COM

永嘉微电/VINKA 型号&#xff1a;VK1623 封装形式&#xff1a;LQFP100/QFP100/DICE/COG KPP2609 概述 VK1623S是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大384点&#xff08;48EGx8COM&#xff09;的LCD屏。单片机可通过3/4线串行接口配置显示参数和发送显示数据…

Spring Cloud微服务网关Zuul的注解@EnableZuulProxy或@EnableZuulServer做了什么事情

一、Zuul的工作原理 Zuul 1.x的版本是由Servlet以及一系列的Filter组成的&#xff0c;各个组件之间协同合作完成功能&#xff0c;且易于扩展。参看官方的架构图我画了张图&#xff1a; Zuul声明周期&#xff1a; HTTP Request -> DispatcherServlet -> ZuulHandlerMappi…

动力节点老杜Vue3视频笔记——Vue程序初体验

目录 一、Vue程序初体验 1.1 下载并安装vue.js 1.2 第一个Vue程序 1.3 Vue的data配置项 1.4 Vue的template配置项 一、Vue程序初体验 可以先不去了解Vue框架的发展历史、Vue框架有什么特点、Vue是谁开发的&#xff0c;对我们编写Vue程序起不到太大的作用&#xff0c;…

代码随想录_二叉树_leetcode654 617

leetcode654 最大二叉树 654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 …

octave安装使用——吴恩达机器学习

下载octave 解压后双击octave.vbs进行安装 配置 pkg rebuildpkg list 使用基础命令 使用矩阵命令 移动数据 size&#xff1a;矩阵的行和列length&#xff1a;行和列的最大值 读取和存储数据 load&#xff1a;加载文件who&#xff1a;所有变量whos&#xff1a;更详细的变量…

界面开发框架Qt - 组合小部件映射器示例

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 Combo Widget Mappe…

人工智能实验二:约束满足问题

一、实验目的 求解约束满足问题&#xff1b;使用回溯搜索算法求解八皇后问题。 二、实验平台 课程实训平台https://www.educoder.net/paths/369 三、实验内容及步骤 实训内容&#xff1a;2-4 第六章 约束满足问题 1.问题描述 八皇后问题是指在一个 88 的棋盘上摆放八个皇…