[转帖]总结:Springboot监控Actuator相关

总结,springboot,监控,actuator,相关 · 浏览次数 : 0

小编点评

**一、Introduction** 由于项目使用的是版本 1.5.6,本文基于此版本进行描述。 **二、Actuator使用** Actuator 是 Spring Boot 提供的监控和管理功能模块,可以查看应用程序配置信息。 **三、版本变化** * Spring Boot 2.0 中的 Actuator 发生重大变化,keys 的配置改变。 **四、代码相关参考** * Springboot Actuator 之七:actuator 中原生endpoint源码解析1 - 走看看 * 查看所有可配置的endpoints Actuator监控分成两类:原生端点和用户自定义扩展端点 **五、安全建议** * 在使用 Actuator 时,不正确的使用或一些不经意的疏忽可能会造成严重的信息泄露。 * 在代码审计时是springboot项目,遇到 Actuator依赖时,需进行安全复查。 * 设置单独的 Actuator 管理端口并配置不对外网开放。 **六、prometheus对应的endpoint** * `endpoints.prometheus.enabled=true` 设置prometheus 监控。 * `endpoint` 可以自定义,使用正常endpoint开启和关闭的方式进行配置。 **七、动态修改日志级别** * 可以通过修改 `endpoints.properties` 中的`log-level`属性来动态修改日志级别。

正文

一、介绍

由于项目中使用的仍然是比较老旧的1.5.6版本,所以本文是基于此版本进行描述。

二、Actuator使用

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

Actuator是Springboot提供的用来对应用系统进行自省和监控的功能模块,借助于Actuator开发者可以很方便地对应用系统某些监控指标进行查看、统计等。

Actuator 的核心是端点 Endpoint,它用来监视应用程序及交互,spring-boot-actuator 中已经内置了非常多的 Endpoint(health、info、beans、metrics、httptrace、shutdown等等),同时也允许我们自己扩展自己的 Endpoints。每个 Endpoint 都可以启用和禁用。要远程访问 Endpoint,还必须通过 JMX 或 HTTP 进行暴露,大部分应用选择HTTP。

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

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

如果请求接口不做任何安全限制,会有很大的安全隐患,审计也不过关。

一般我们的配置方式如下:

#先禁用所有endpoint

endpoints.enabled = false

#按需要开启部分endpoint

endpoints.metrics.enabled = true

endpoints.dump.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管理端口并配置不对外网开放。

三、2.x与1.x

需要注意的是,Spring Boot 2.0 相对于上个版本, Actuator 发生很多变化,keys 的配置改变如下:

四、源码相关

参考:Springboot Actuator之七:actuator 中原生endpoint源码解析1 - 走看看

五、查看所有可配置的endpoints

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

路径描述
/loggers

查看所有的日志级别,不同包的级别。默认的日志级别为INFO

另外,可动态修改日志的打印级别

/shutdown

关闭应用程序,要求endpoints.shutdown.enabled设置为true

需要关闭,否则可否以远程关闭服务

/env

获取全部环境属性,如操作系统信息(什么操作系统,什么版本等),虚拟机信息(名称、版本、厂商等),java版本,类路径,用户信息,系统域信息(容易暴露公司信息),第三方服务信息(如数据库连接地址,redis地址等,很敏感),IP地址(很敏感)。

总之一句话,env绝对要关闭

/configprops

描述配置属性(包含默认值)如何注入Bean。

容易暴露ip地址,eureka地址,endpoints哪些可访问等

需要关闭,否则可能基于此接口间接获取到其它的信息

/heapdump访问/heapdump 路径,返回 GZip 压缩 hprof 堆转储文件。在 Android studio 打开,会泄露站点内存信息,很多时候会包含后台用户的账号密码(包含漏洞的图片暂时没得,大家记住思路就好了..),通过泄露的账号密码,然后进入后台一番轰炸也不错的。
/trace

通过访问/trace路径,可获取用户认证字段信息,如token,cookie 等重要权限验证信息

需要关闭,否则可能暴露用户的token或cookie等权限验证信息

/dump获取线程活动的快照
/info

获取应用程序的定制信息,这些信息由info打头的属性提供

一般不配置为空

/health报告应用程序的健康指标,这些值由HealthIndicator的实现类提供
/mappings

描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系

非必要也不要打开,黑客可攻击写相关的接口(如果权限验证不当就惨了)

/metrics报告各种应用程序度量信息,比如内存用量和HTTP请求计数
/autoconfig提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过
/beans描述应用程序上下文里全部的Bean,以及它们的关系

六、prometheus对应的endpoint

endpoints.prometheus.enabled=true

endpoint是可以自定义的,springboot对接prometheus用的就是自定义endpoint的原理,如下:

 因此我们同样可以用正常endpoint开启和关闭的方式进行配置。

注意,如果我们配置了关闭endpoint,则需要显示配置去打开prometheus这个endpoint,配置方式如下:

七、动态修改日志级别

如下案例所示:

将com.iqiyi.hubble.auth.service.impl.UserAuthResServiceImpl类的日志级别修改成DEBUG

 

参考:

【spring cloud】【spring boot】网管服务-->配置文件添加endpoints.enabled = false,SpringBoot应用监控Actuator使用的安全隐患..._weixin_34206899的博客-CSDN博客

Springboot之actuator配置不当漏洞(autoconfig、configprops、beans、dump、env、health、info、mappings、metrics、trace)_墨痕诉清风的博客-CSDN博客_actuator dump

文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树首页概览10831 人正在系统学习中

与[转帖]总结:Springboot监控Actuator相关相似的内容:

[转帖]总结:Springboot监控Actuator相关

一、介绍 由于项目中使用的仍然是比较老旧的1.5.6版本,所以本文是基于此版本进行描述。 二、Actuator使用 ActuatorActuator是Spring Boot提供的对应用系统的监控和管理的集成功能,可以查看应用配置的详细信息,例如自动化配置信息、创建的Spring beans信息、系统

[转帖]总结:SpringBoot启动参数配置

一、背景 由于项目中加了bootstrap.properties文件,且文件中有变量,如spring.cloud.config.profile=${spring.profiles.active},而bootstrap.properties读取的优先级高于application.properties,

[转帖]SpringBoot配置SSL 坑点总结【密码验证失败、连接不安全】

文章目录 前言1.证书绑定问题2.证书和密码不匹配3.yaml配置文件问题3.1 解密类型和证书类型是相关的3.2 配置文件参数混淆 后记 前言 在SpringBoot服务中配置ssl,无非就是下载证书设置一下配置文件的问题,这里主要记录我在配置的过程中遇到的坑点。 如果是新手上道的话建议结合其他的

[转帖]总结:正则表达式

一、重要点整理 ^ 为匹配输入字符串的开始位置。 [0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个。[^…] 排除型字符组。 abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。 正则表达式由两种字符构成。一种是在正则表达式中具体特殊意义的“元字符

[转帖]总结:nginx502:Tomcat调优之acceptCount

问题背景:UI页面点击会偶尔返回error,检查调用日志,发现nginx报502报错,因此本文即排查502报错原因。 如下红框可知,访问本机个备机的服务502了,用时3秒左右(可见并不是超时) 先给出原因:是因为tomcat8默认的acceptCount是100,请求量大的时候,会将一些来不及处理的

[转帖]总结:协程与线程

一、介绍 本文主要梳理下进程,线程,协程的概念、区别以及使用场景的选择。 二、进程 我们知道,一切的软件都是跑在操作系统上,真正用来干活 (计算) 的是 CPU。早期的操作系统每个程序就是一个进程,知道一个程序运行完,才能进行下一个进程,就是 “单进程时代”。一切的程序只能串行发生。 早期的单进程操

[转帖]总结:Tomcat的IO模型

一、介绍 对于 linux 操作系统,IO 多路复用使用的是 epoll 方式,对于 windows 操作系统中 IO 多路复用使用的是 iocp 方式,对于 mac 操作系统 IO 多路复用使用的是 kqueue 方式。 由于对于 tomcat 服务器来说基本主要部署在 linux 操作系统上,所

[转帖]总结:记一次K8S容器OOM案例

一、背景 最近遇到个现象,hubble-api-open组件过段时间会内容占满,从而被K8S强制重启。 让我困惑的是,已经设置了-XX:MaxRAMPercentage=75.0,我觉得留有了一定的空间,不应该会占满,所以想深究下原因。 -XX:MaxRAMPercentage是设置JVM的最大堆内

[转帖]总结:Servlet

一、背景 开发了很久的web服务,使用了很多web框架,都忘记web技术最原始的模样了,今天来回顾下。 二、Servlet是什么? Servlet是sun公司提供的一门用于开发动态web资源的技术。我们普通的Java类实现了Servlet接口后,可将我们的服务部署在Web容器中,这样我们的服务就可以

[转帖]总结:shell中的if条件判断

一、if 的基本语法 if [ command ];then xxxelif [ command ];then xxxelse xxxfi 二、常见的一些写法案例 1、if [ "x${var}" = "x" ] 其实就是判断${var}是否为空的意思 2、if [ X"$?" == X"0" ]