springboot actuator 常用接口

news2024/11/15 11:19:17
概述

微服务作为一项在云中部署应用和服务的新技术是当下比较热门话题,而微服务的特点决定了功能模块的部署是分布式的,运行在不同的机器上相互通过服务调用进行交互,业务流会经过多个微服务的处理和传递,在这种框架下,微服务的监控显得尤为重要。

而Actuator正是Spring Boot提供的对应用系统的监控和管理的集成功能,可以查看应用配置的详细信息,例如自动化配置信息、创建的Spring beans信息、系统环境变量的配置信以及Web请求的详细信息等。如果使用不当或者一些不经意的疏忽,可能造成信息泄露等严重的安全隐患。

Actuator使用

Actuator应用监控使用只需要添加spring-boot-starter-actuator依赖即可,如下:

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

可以在application.properties中指定actuator的访问路径,如指定路径为/monitor:

management.context-path=/monitor

此时,运行示例,访问/monitor/env即可查看系统环境变量的配置信息,之后再访问/monitor/trace即可查看所有Web请求的详细信息,包括请求方法、路径、时间戳以及请求和响应的头信息甚至cookie信息,如图:

Actuator监控分成两类:原生端点和用户自定义扩展端点,原生的主要有:

路径描述
/autoconfig提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过
/beans描述应用程序上下文里全部的Bean,以及它们的关系
/env获取全部环境属性
/configprops描述配置属性(包含默认值)如何注入Bean
/dump获取线程活动的快照
/health报告应用程序的健康指标,这些值由HealthIndicator的实现类提供
/info获取应用程序的定制信息,这些信息由info打头的属性提供
/mappings描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系
/metrics报告各种应用程序度量信息,比如内存用量和HTTP请求计数
/shutdown关闭应用程序,要求endpoints.shutdown.enabled设置为true
/trace提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)
安全措施

如果上述请求接口不做任何安全限制,安全隐患显而易见。实际上Spring Boot也提供了安全限制功能。比如要禁用/env接口,则可设置如下:

endpoints.env.enabled= false

如果只想打开一两个接口,那就先禁用全部接口,然后启用需要的接口:

endpoints.enabled = false
endpoints.metrics.enabled = true

另外也可以引入spring-boot-starter-security依赖

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

在application.properties中指定actuator的端口以及开启security功能,配置访问权限验证,这时再访问actuator功能时就会弹出登录窗口,需要输入账号密码验证后才允许访问。

management.port=8099
management.security.enabled=true
security.user.name=admin
security.user.password=admin
安全建议

在使用Actuator时,不正确的使用或者一些不经意的疏忽,就会造成严重的信息泄露等安全隐患。在代码审计时如果是springboot项目并且遇到actuator依赖,则有必要对安全依赖及配置进行复查。也可作为一条规则添加到黑盒扫描器中进一步把控。
安全的做法是一定要引入security依赖,打开安全限制并进行身份验证。同时设置单独的Actuator管理端口并配置不对外网开放。

参考:spring-boot-starter-actuator监控接口详解 - 简书

spring-boot-starter-actuator功能简介

根据应用依赖和配置自动创建出来的监控和管理端点。通过这些端点,我们可以实时获取系统应用的各项监控指标。

spring-boot-starter-actuator功能集成

第一步:添加相关jar包依赖

<!--srping-boot-actuator-->

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

第二步:application.properties 配置Spring-Boot-Actuator配置

#spring-boot-actuator配置

#开放所有的web Endpoints

management.endpoints.web.exposure.include=*

第三步:获取监控端点详细信息和效果展示

通过访问:http://localhost:8082/actuator,获取监控端点详细信息

字符串格式化:

{
        "_links":{
        "self":{
        "href":"http://localhost:8082/actuator",
        "templated":false
        },
        "archaius":{
        "href":"http://localhost:8082/actuator/archaius",
        "templated":false
        },
        "auditevents":{
        "href":"http://localhost:8082/actuator/auditevents",
        "templated":false
        },
        "beans":{
        "href":"http://localhost:8082/actuator/beans",
        "templated":false
        },
        "caches-cache":{
        "href":"http://localhost:8082/actuator/caches/{cache}",
        "templated":true
        },
        "caches":{
        "href":"http://localhost:8082/actuator/caches",
        "templated":false
        },
        "health":{
        "href":"http://localhost:8082/actuator/health",
        "templated":false
        },
        "health-component":{

        "href":"http://localhost:8082/actuator/health/{component}",

        "templated":true

        },

        "health-component-instance":{

        "href":"http://localhost:8082/actuator/health/{component}/{instance}",

        "templated":true

        },

        "conditions":{

        "href":"http://localhost:8082/actuator/conditions",

        "templated":false

        },

        "configprops":{

        "href":"http://localhost:8082/actuator/configprops",

        "templated":false

        },

        "env":{

        "href":"http://localhost:8082/actuator/env",

        "templated":false

        },

        "env-toMatch":{

        "href":"http://localhost:8082/actuator/env/{toMatch}",

        "templated":true

        },

        "info":{

        "href":"http://localhost:8082/actuator/info",

        "templated":false

        },

        "loggers":{

        "href":"http://localhost:8082/actuator/loggers",

        "templated":false

        },

        "loggers-name":{

        "href":"http://localhost:8082/actuator/loggers/{name}",

        "templated":true

        },

        "heapdump":{

        "href":"http://localhost:8082/actuator/heapdump",

        "templated":false

        },

        "threaddump":{

        "href":"http://localhost:8082/actuator/threaddump",

        "templated":false

        },

        "metrics-requiredMetricName":{

        "href":"http://localhost:8082/actuator/metrics/{requiredMetricName}",

        "templated":true

        },

        "metrics":{

        "href":"http://localhost:8082/actuator/metrics",

        "templated":false

        },

        "scheduledtasks":{

        "href":"http://localhost:8082/actuator/scheduledtasks",

        "templated":false

        },

        "httptrace":{

        "href":"http://localhost:8082/actuator/httptrace",

        "templated":false

        },

        "mappings":{

        "href":"http://localhost:8082/actuator/mappings",

        "templated":false

        },

        "refresh":{

        "href":"http://localhost:8082/actuator/refresh",

        "templated":false

        },

        "features":{

        "href":"http://localhost:8082/actuator/features",

        "templated":false

        },

        "service-registry":{

        "href":"http://localhost:8082/actuator/service-registry",

        "templated":false

        }

   }
}

spring-boot-starter-actuator模块生成的原生监控端点,分为三大类:

  1. 应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与SpringBoot应用密切相关的配置类信息;这类端点可以帮助我们获取一系列关于Spring应用配置内容的详细报告,比如自动化配置的报告、Bean创建的报告、环境属性的报告等。
  2. 度量指标类:获取应用程序运行过程中用于监控的度量指标,比如内存信息、线程池信息、HTTP请求统计等;
  3. 操作监控类:提供了对应用的关闭等操作类功能;

以上三类监控端点的详细信息,下面我们详细来说明。

第四步:监控端点信息描述

应用配置类:默认启用
  1. /autoconfig: 该端点用来获取应用的自动化配置报告,其中包括所有自动化配置的候选项,同时列举了每个候选项是否满足自动化配置的各个先决条件。该端点可以帮助我们方便地找到一些自动化配置为什么没有生效的具体原因。报告内容分为两部分,如下:
    (1)positiveMatches中返回的是条件匹配成功的自动化配置;
    (2)negativeMathches中返回的是条件匹配不成功的自动化配置。
  2. /beans: 该端点用来获取应用上下文中创建的所有Bean。包含的具体信息如下:
    (1)bean:Bean的名称;
    (2)scope: Bean的作用域;
    (3)type: Bean的Java类型;
    (4)resource: class文件的具体路径;
    (5)dependencies: 依赖的Bean的名称;
  3. /configprops: 该端点用来获取应用中配置的属性信息报告。我们可以通过该报告来看到各个属性的配置路径,比如我们要关闭端点,就可以使用endpoints.configprops.enabled=false来完成设置。
  4. /env: 该端点用来获取应用所有可用的环境属性报告,具体包括环境变量、JVM属性、应用的配置属性、命令行中的参数。通过该端点返回的信息,我们可以看到当前应用加载的配置信息,可以结合@ConfigurationProperties注解将它们引入到应用程序中使用。对于一些敏感属性信息,比如在属性名中包含password,secret,key这些关键词,在返回的时候会使用*来替换。
  5. /mappings: 该端点用来返回所有Spring MVC的控制器映射关系报告。返回的信息有:
    (1)bean属性: 标识该映射关系的请求处理器;
    (2)method属性:标识该映射关系的具体处理类和处理函数;
  6. /info:该端点用来返回一些应用自定义的信息。默认情况下,该端点只会返回一个空的JSON内容。我们可以在application.properties配置文件中设置一些以info为前缀的属性配置信息,就能看到效果。
度量指标类:默认启用
  1. /metrics: 该端点用来返回当前应用的各类重要度量指标,比如内存信息、线程信息、垃圾回收信息等。具体信息包含如下:
    (1)系统信息:包括处理器数量processors、运行时间uptime和instance.uptime、系统平均负载systemload.average;
    (2)mem.*: 内存概要信息,包括分配给应用的总内存数量以及当前空闲的内存数量,这些信息来自java.lang.Runtime;
    (3)heap.*: 堆内存使用情况。这些信息来自java.lang.management.MemoryMXBean接口中getHeapMemoryUsage方法获取的java.lang.management.MemoryUsage;
    (4)nonheap.*: 非堆内存使用情况。这些信息来自java.lang.management.MemoryMXBean接口中getNonHeapMemoryUsage方法获取java.lang.management.MemoryUsage;
    (5)threads.*: 线程使用情况,包括线程数、守护线程(daemon)、线程峰值(peak)等,这些信息来自java.lang.management.ThreadMXBean;
    (6)classes.*: 应用加载和卸载的类统计,这些信息来自java.lang.managemeng.ClassLoadingMXBean;
    (7)gc.*: 垃圾收集器的详细信息,包括垃圾回收次数gc.ps_scavenge.count、垃圾回收消耗时间gc.ps_scavenge.time、标记-清除算法的次数gc.ps_marksweep.count、标记-清除算法的消耗时间gc.ps_marksweep.time。这些信息来自java.lang.management.GarbageCollectorMXBean;
    (8)httpsessions.*: Tomcat容器的会话使用情况。包括最大会话数httpsessions.max和活跃会话数httpsessions.active。该度量指标信息仅在引入嵌入式Tomcat作为应用容器的时候才会提供;
    (9)gauge.*: HTTP请求的性能指标之一,它主要用来反映一个绝对值。
    (10)counter.*: HTTP请求的性能指标之一,它主要作为计数器来使用,记录了增加量和减少量。
    报告的具体内容如下:
  2. /health: 该端点用来获取应用的各类健康指标信息。在spring-boot-starter-actuator模块中自带实现了一些常用资源的健康指标检测器,这些健康指标检测器都是通过HealthIndicator接口实现,并且会根据依赖关系的引入实现自动化配置。常见的一些健康指标检测器如下:
    (1)DiskSpaceHealthIndicator: 低磁盘空间检测;
    (2)DataSourceHealthIndicator: 检测DataSource的链接是否成功;
    (3)MongoHealthIndicator: 检测Mongo数据库是否可用;
    (4)RabbitHealthIndicator: 检测Rabbit服务器是否可用;
    (5)RedisHealthIndicator: 检测Redis服务器是否可用;
    (6)SolrHealthIndicator: 检测Solr服务器是否可用;
    我们也可用通过实现HealthIndicator接口来自定义自己的健康指标检测器;
    报告的具体内容如下:
  3. /dump: 该端点用来暴露程序运行中的线程信息。它使用java.lang.management.ThreadMXBean的dumpAllThreads方法来返回所有含有同步信息的活动线程详情;
  4. /trace: 该端点用来返回基本的HTTP跟踪信息。默认情况下,跟踪信息的存储采用org.springframework.boot.actuate.trace.InMemoryTraceRepository实现的内存方式,始终保留最近的100条请求记录。
操作控制类:需要通过属性配置来开启操作

     1./shutdown: 该端点用来实现关闭应用的远程操作,需要配置属性endpoints.shutdown.enable=true才能实现。该操作非常危险,不建议使用。

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

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

相关文章

轻松驾驭!Prometheus 如何监控指标,快速定位故障

Prometheus 监控业务指标 在 Kubernetes 已经成了事实上的容器编排标准之下&#xff0c;微服务的部署变得非常容易。但随着微服务规模的扩大&#xff0c;服务治理带来的挑战也会越来越大。在这样的背景下出现了服务可观测性&#xff08;observability&#xff09;的概念。 在…

vue 记账清单

通过发送请求来从后台获取更改数据&#xff0c;需要用到钩子函数。 使用ECharts来渲染饼图。 在渲染函数中setOption动态更新饼图&#xff08;map&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" />&l…

linux-防火墙

目录 一、防火墙概念 1.软件防火墙 2.iptables默认规则 3.iptables的五链 4.iptables动作 5.四表五链 6.iptables实例 一、防火墙概念 linux下防火墙一般分为软件防火墙、硬件防火墙 硬件防火墙&#xff1a;在硬件的级别实现防火墙过滤功能&#xff0c;性能高&#xf…

360智慧生活旗舰产品率先接入“360智脑”能力实现升级

10月25日&#xff0c;360智慧生活秋季新品及视觉云方案发布会在深圳召开。360智能硬件产品&#xff0c;诸如 360可视门铃、360智能摄像机、360行车记录仪、360儿童手表和家庭防火墙等&#xff0c;都在各自的行业有着举足轻重得地位&#xff0c;而这次发布的系列新品&#xff0c…

使用Golang策略和最佳实践高效处理一百万个请求

有效处理一百万个请求的策略与最佳实践 在不断发展的Web应用程序领域&#xff0c;处理大规模请求的能力是成功的关键因素。作为一名全栈开发人员&#xff0c;您可能熟悉Golang的效率和性能。在本文中&#xff0c;我们将深入探讨如何利用Golang来优雅地处理处理一百万个请求的挑…

【ICLR23论文】Can CNNs Be More Robust Than Transformers?

文章目录 0 Abstract1 Introduction2 Related Works3 Settings3.1 CNN Block Instantiations3.2 Computational Cost3.3 Robustness Benchmarks3.4 Training Recipe3.5 Baseline Results 4 Component Diagnosis4.1 Patchief Stem4.2 Large Kernel Size4.3 Reducing Activation …

安装 tensorflow==1.15.2 遇见的问题

一、直接安装 命令&#xff1a;pip install tensorflow1.15.2 二、换 阿里云 镜像源 命令&#xff1a;pip install -i http://mirrors.aliyun.com/pypi/simple tensorflow1.15.2 三、换 豆瓣 镜像源 命令&#xff1a;pip install http://pypi.douban.com/simple tensorflow1…

Android Glide判断图像资源是否缓存onlyRetrieveFromCache,使用缓存数据,Kotlin

Android Glide判断图像资源是否缓存onlyRetrieveFromCache&#xff0c;使用缓存数据&#xff0c;Kotlin import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity…

“第五十天” 机组--数据的表示

数据的表示和运算&#xff1a; 进位计数制&#xff1a; 对于我们现在使用的如十进制计数法&#xff0c;二进制计数法等&#xff0c;符号反映权重&#xff0c;比如十进制的0~9&#xff0c;9这个符号的权重和0是不一样的&#xff0c;而且现在的计数法符号所在位置也反映权重&am…

去雨去雪去雾算法运行问题汇总记录

在进行去雨去雪去雾算法过程中&#xff0c;遇到了一个问题&#xff0c;这在先前的电脑运行是都没有出现过&#xff0c;但在博主新买的电脑上却出现了&#xff0c;讲道理是有点小抑郁的。 RuntimeWarning: invalid value encountered in scalar divideret ret.dtype.type(ret …

基于Or-Tools的线性规划问题求解

画出可行域如图所示&#xff1a; Python调用ortools求解 导入求解器 # 导入(或包含)or - tools线性求解器包装器&#xff0c;这是MIP求解器和线性求解器的接口&#xff0c;如下所示 from ortools.linear_solver import pywraplp声明线性规划求解器 MPsolver is a wrapper …

js双向绑定

题目来源&#xff1a; 双向绑定_牛客题霸_牛客网 (nowcoder.com) JS37 双向绑定 描述 请补全JavaScript代码&#xff0c;要求如下&#xff1a; 1. 监听对象属性的变化 2. 当"person"对象属性发生变化时&#xff0c;页面中与该属性相关的数据同步更新 3. 将输入框中…

【C++面向对象】8. 继承

文章目录 【 1. 基本原理 】【 2. 派生类的访问权限 】【 3. 派生类继承得到的成员的权限 】【 4. 多继承 】 继承允许我们依据另一个类来定义一个类&#xff0c;这使得创建和维护一个应用程序变得更容易。这样做&#xff0c;也达到了 重用代码功能 和 提高执行时间 的效果。当…

【Qt之QSetting】介绍及使用

概述 QSettings类提供了一种持久的、与平台无关的应用程序设置存储功能。 用户通常期望一个应用能在不同会话中记住其设置&#xff08;窗口大小和位置&#xff0c;选项等&#xff09;。在Windows上&#xff0c;这些信息通常存储在系统注册表中&#xff1b;在macOS和iOS上&…

MySQL数据库 #4

文章目录 一、MySQL外键基本概念1. 表与表之间的关系1.一对多的表关系2.多对多3.一对一注意事项 2.多表查询1.子查询2.数据准备3.连表查询&#xff08;重点&#xff09; 二、多表查询练习题1.习题试题的SQL文件2.Navicata可视化软件1.连接数据库2 操作数据库3.导入备份4.查询数…

01. 板载硬件资源和开发环境

一、板载硬件资源 STM32F4VGT6-DISCOVERY硬件资源如下&#xff1a; (1). STM32F407VGT6微控制器有1M的FLASH存储器&#xff0c;192K的RAM&#xff0c;LQFP100封装 (2). 板上的ST-LINK_V2可以使用选择的方式把套件切换成一个独立的ST-LINK/V2来 使用&#xff08;可以使用SWD…

UML中类之间的六种主要关系

UML中类之间的六种主要关系: 继承&#xff08;泛化&#xff09;&#xff08;Inheritance、Generalization&#xff09;, 实现&#xff08;Realization&#xff09;&#xff0c;关联&#xff08;Association)&#xff0c;聚合&#xff08;Aggregation&#xff09;&#xff0c;组…

Java架构师内功嵌入式技术

目录 1 导学2 嵌入式微处理体系结构3 微处理器分类4 多核处理器5 嵌入式软件6 嵌入式系统6.1 系统组成7 嵌入式实时操作系统8 嵌入式软件设计9 软件开发工具想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导学 嵌入式技术对软件架构的作用主要体现在以下几个方面: …

搜索二叉树实现(非递归版本)

目录 一&#xff0c;搜索二叉树是个啥&#xff1f; 二&#xff0c;搜索二叉树的实现 1.前期工作 2.方法实现 1.插入 2&#xff0c;查找 3.删除 三&#xff0c;实现二叉搜索树的全部代码 一&#xff0c;搜索二叉树是个啥&#xff1f; 话不多所&#xff0c;先给各位来一个…