Springboot Actuator 环境搭建踩坑
JMX和Springboot Actuator
JMX是Java Management Extensions,它是一个Java平台的管理和监控接口。
为什么要搞JMX呢?因为在所有的应用程序中,对运行中的程序进行监控都是非常重要的,Java应用程序也不例外。我们肯定希望知道Java应用程序当前的状态,例如,占用了多少内存,分配了多少内存,当前有多少活动线程,有多少休眠线程等等。如何获取这些信息呢?
为了标准化管理和监控,Java平台使用JMX作为管理和监控的标准接口,任何程序,只要按JMX规范访问这个接口,就可以获取所有管理与监控信息。
JMX把所有被管理的资源都称为MBean(Managed Bean),这些MBean全部由MBeanServer管理,如果要访问MBean,可以通过MBeanServer对外提供的访问接口,例如通过RMI或HTTP访问。
在生产环境中,需要对应用程序的状态进行监控。前面我们已经介绍了使用JMX对Java应用程序包括JVM进行监控,使用JMX需要把一些监控信息以MBean的形式暴露给JMX Server,而Spring Boot已经内置了一个监控功能,它叫Actuator。
如何使用Actuator
非常简单,只需要在一个正常的Springboot项目的pom.xml里面添加如下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
对于 Gradle,请使用以下声明:
dependencies {implementation 'org.springframework.boot:spring-boot-starter-actuator'
}
然后正常启动应用程序,Actuator会把它能收集到的所有信息都暴露给JMX。
此外,Actuator还可以通过URL/actuator/
挂载一些监控点,例如,输入http://localhost:8080/actuator/health
,我们可以查看应用程序当前状态
{"status": "UP"
}
许多网关作为反向代理需要一个URL来探测后端集群应用是否存活,这个URL就可以提供给网关使用。
Actuator默认把所有访问点暴露给JMX,但处于安全原因,只有health
和info
会暴露给Web。
Actuator提供的所有访问点均在官方文档列出,要暴露更多的访问点给Web,需要在Springboot里面的application.yml中加上配置:
management:endpoints:jmx:exposure:# exclude: '*'include: "*"web:exposure:include: ["health","info","beans","mappings","logfile","metrics","shutdown","env"]# include: "*"
gitee有个demo
配置Actuator
Actuator各个端点介绍都在:
- 官方文档:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#actuator
- https://blog.csdn.net/justry_deng/article/details/103308797
- https://www.cnblogs.com/jmcui/p/9820579.html
Actuator 接口文档:
- https://docs.spring.io/spring-boot/docs/2.5.4/actuator-api/htmlsingle/
Gateway配置:
- https://segmentfault.com/a/1190000019101829
部分踩坑
- Gateway和spring-boot-starter-web冲突问题(重要)
https://blog.csdn.net/nlcexiyue/article/details/112345499
https://www.jb51.net/article/217600.htm
可以说两者几乎水火不容,如果从starter-web排除tomcat会导致项目跑不起来,如果从gateway里面排除starter-web会直接导致gateway功能不可用
- IDEA打包报meta-inf/spring.factories not found
直接mvn命令打包
- IDEA直接运行能运行,但是打包成war或者jar报JMX找不到
org.springframework.boot:name=SpringApplication,type=Admin
原因:spring.application.admin.enabled=true是IDEA启动自己加上去的,java -jar运行的时候没有
在application.yml里面加上spring.application.admin.enabled=true
- dockers跑Spring项目跑不起来,报数据库连接失败
检查配置(用户密码之类的)是否正确,有种情况需要jar报错退出再跑一次jar(相当于连两次数据库)
漏洞学习
利用场景和exp:https://github.com/LandGrey/SpringBootVulExploit
讲的十分详细了
MySQL JDBC POC报错
其中MySQL JDBC deserialization的poc有点问题,解决方案如下:
https://github.com/0xJDow/rogue-mysql-server
Float Conversion
Due to this error:
Traceback (most recent call last):File "rogue-mysql-server.py", line 102, in <module>run_mysql_server()File "rogue-mysql-server.py", line 63, in run_mysql_server_payload_hex = str(hex(len(deserialization_payload)/2)).replace('0x', '').zfill(4)
TypeError: 'float' object cannot be interpreted as an integer
Updated these lines to use //
to do float division
_payload_hex = str(hex(len(deserialization_payload)//2)).replace('0x', '').zfill(4)
_data_hex = str(hex(len(deserialization_payload)//2 + 5)).
String and Byte Concatenation
deserialization_payload
is raw bytes and needs to be decoded into a str
before we can concatenate. This is to fix this traceback.
Traceback (most recent call last):File "rogue-mysql-server.py", line 102, in <module>run_mysql_server()File "rogue-mysql-server.py", line 67, in run_mysql_server_data += _data_length + '04' + '0131fc' + _payload_length + deserialization_payload
TypeError: can only concatenate str (not "bytes") to str
We change
_data += _data_length + '04' + '0131fc' + _payload_length + deserialization_payload
to
_data += _data_length + '04' + '0131fc' + _payload_length + deserialization_payload.decode()
相关文章:
Springboot Actuator 环境搭建踩坑
JMX和Springboot Actuator JMX是Java Management Extensions,它是一个Java平台的管理和监控接口。 为什么要搞JMX呢?因为在所有的应用程序中,对运行中的程序进行监控都是非常重要的,Java应用程序也不例外。我们肯定希望知道Java…...

Vue-3.3ESLint
ESLint代码规范 代码规范:一套写代码的约定规则。 JavaScript Standard Style规范说明https://standardjs.com/rules-zhcn.html 代码规范错误 如果你的代码不符合standard的要求,ESlint会跳出来提醒。 比如:在mian.js中随意做一些改动&a…...
STROBE-MR
Welcome to the STROBE-MR website! About: STROBE-MR stands for “Strengthening the Reporting of Observational Studies in Epidemiology using Mendelian Randomization”. Inspired by the original STROBE checklist, the STROBE-MR guidelines were developed to ass…...

Hive安装配置 - 内嵌模式
文章目录 一、Hive运行模式二、安装配置内嵌模式Hive(一)下载hive安装包(二)上传hive安装包(三)解压缩hive安装包(四)配置hive环境变量(五)关联Hadoop&#x…...
html中登录按钮添加回车键登录
原文链接有3种方法,其它2中不会弄,第二种方法成功,下面详细说说 原html的登录部分是 <button class"btn btn-success btn-block waves-effect waves-light" id"button" >登入</button> 在该html中增加 &…...
PCL 空间两平面交线计算
PCL 空间两平面交线计算 std::vector<float> LineInPlanes(std::vector<double> para1, std::vector<double> para2) {std::vector<float...
交替合并字符串
题目要求 给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 示例 示例 1: 输入:word1 …...

Linux考试复习整理
文章目录 Linux考试整理一.选择题1.用户的密码现象放置在哪个文件夹?2.删除文件或目录的命令是?3.显示一个文件最后几行的命令是?4.删除一个用户并同时删除用户的主目录5.Linux配置文件一般放在什么目录?6.某文件的组外成员的权限…...

基于geojson-vt和canvas的高性能出图
概述 本文介绍基于geojson-vt和canvas,实现node端高性能出图。 效果 实现 1. canvas绘图 import { createCanvas } from canvasconst tileSize 256; const canvas createCanvas(tileSize, tileSize) const ctx canvas.getContext(2d)2. 处理geojson const g…...

CTF是黑客大赛?新手如何入门CTF?
CTF是啥 CTF 是 Capture The Flag 的简称,中文咱们叫夺旗赛,其本意是西方的一种传统运动。在比赛上两军会互相争夺旗帜,当有一方的旗帜已被敌军夺取,就代表了那一方的战败。在信息安全领域的 CTF 是说,通过各种攻击手…...

电脑开不了机用U盘重装系统Win10教程
如果我们遇到了电脑开不起机的问题,这给我们的正常使用带来了很大的影响。这时候我们可以借助U盘重装系统的方法,轻松应对这一问题。下面小编给大家详细介绍关于用U盘给开不机的电脑重装Win10系统的教程步骤,操作后用户就能正常使用电脑了。 …...

四叉堆在GO中的应用-定时任务timer
堆作为必须掌握的数据结构之一,在众多场景中也得到了广泛的应用。 比较典型的,如java中的优先队列PriorityQueue、算法中的TOP-K问题、最短路径Dijkstra算法等,在这些经典应用中堆都担任着灵魂般的角色。 理论基础 binary heap 再一起回忆…...

Flow深入浅出系列之使用Kotlin Flow自动刷新Android数据的策略
Flow深入浅出系列之在ViewModels中使用Kotlin FlowsFlow深入浅出系列之更聪明的分享 Kotlin FlowsFlow深入浅出系列之使用Kotlin Flow自动刷新Android数据的策略 Flow深入浅出系列之使用Kotlin Flow自动刷新Android数据的策略 讨论在Android应用程序中使用Kotlin Flow高效加载…...

AC修炼计划(AtCoder Regular Contest 165)
传送门:AtCoder Regular Contest 165 - AtCoder 本次习题参考了樱雪猫大佬的题解,大佬的题解传送门如下:Atcoder Regular Contest 165 - 樱雪喵 - 博客园 (cnblogs.com) A - Sum equals LCM 第一题不算特别难 B - Sliding Window Sort 2 对…...
【Express】登录鉴权 JWT
JWT(JSON Web Token)是一种用于实现身份验证和授权的开放标准。它是一种基于JSON的安全传输数据的方式,由三部分组成:头部、载荷和签名。 使用jsonwebtoken模块,你可以在Node.js应用程序中轻松生成和验证JWT。以下是j…...

【微服务 SpringCloud】实用篇 · Ribbon负载均衡
微服务(4) 文章目录 微服务(4)1. 负载均衡原理2. 源码跟踪1)LoadBalancerIntercepor2)LoadBalancerClient3)负载均衡策略IRule4)总结 3. 负载均衡策略3.1 负载均衡策略3.2 自定义负载…...

zabbix-proxy代理服务器配置
下载zabbix源 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm 安装 yum -y install zabbix-proxy-mysql zabbix_get 查看相关文件路径 rpm -ql zabbix-proxy-mysql 创建数据库 mysq -uroot -proot mysql> create database…...

【python零基础入门学习】python进阶篇之OOP - 面向对象的程序设计
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...

中国xx集团信息技术工程师面试
进入面试间,坐着三位面试官,压力扑面而来,三位面试官先做了自我介绍,介绍了一下面试的流程后才开始面试。 一、自我介绍 不多说。 二、看你学过数据挖掘这门课,能简单介绍一下有哪些章节,学了些什么&…...

Jmeter接口自动化测试 —— Jmeter下载安装及入门
jmeter简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 下载 下载地址:Apache JMeter - Download Apache JMeter 安装 由于Jmeter是基于Java的…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...