chapter15:springboot与监控管理
Spring Boot与监控管理视频
1. 简介
通过引入spring-boot-starter-actuator
, 可以使用SpringBoot为我们提供的准生产环境下的应用监控和管理功能。我们可以通过http, jmx, ssh协议来进行操作,自动得到审计、健康及指标信息等。
步骤:
- 引入
spring-boot-starter-actuator
; - 通过http方式访问监控端点;
- 可进行shutdown (post提交,此端点默认关闭);
监控和管理端点:
端点名 | 描述 |
---|---|
autoconfig | 所有自动配置信息 |
auditevents | 审计事件 |
beans | 所有Bean的信息 |
configprops | 所有配置属性 |
dump | 线程状态信息 |
env | 当前环境信息 |
health | 应用健康状况 |
info | 当前应用信息 |
metrics | 应用的各项指标 |
mappings | 应用的@RequestMapping映射路径 |
shutdown | 关闭当前应用(默认关闭) |
trace | 追踪信息(最新的http请求) |
http://localhost:8080/beans
http://localhost:8080/health
http://localhost:8080/trace
http://localhost:8080/metrics
http://localhost:8080/mappings
http://localhost:8080/info
2. shutdown端点的使用
首先在application中开启shutdown端点,默认是关闭的。
# 关闭认证
management.security.enabled=false
# 开启shutdown端点
endpoints.shutdown.enabled=true
启动应用后,使用postman发送post请求 : http://localhost:8080/shutdown
; 发现报跨域访问限制异常。
{"timestamp": 1691418900478,"status": 403,"error": "Forbidden","message": "Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.","path": "/shutdown"
}
什么是 CSRF ,这是一个 WEB 应用安全的问题,CSRF(Cross-site request forgery 跨站请求伪造,也被称为“One Click Attack” 或者Session Riding,攻击方通过伪造用户请求访问受信任站点。
因为我在应用中引入了spring-security
, 它引入了CSRF,默认是开启。CSRF和RESTful技术有冲突。CSRF默认支持的方法: GET|HEAD|TRACE|OPTIONS,不支持POST。
其实跨域攻击操作过程比较简单,就是如果你不采取任何限制的时候,对 POST 相对风险系数比较高的访问,用户可以伪造请求,然后对服务器进行攻击和修改。比如说通过伪造 POST 请求,然后能够将用户的数据删除。
参考: Spring security CSRF 跨域访问限制问题 - 知乎 (zhihu.com)
我们只需要禁用CSRF就可以了。http.csrf().disable();
@EnableWebSecurity
public class MySecurityConfig extends WebSecurityConfigurerAdapter {/*** 定制请求的授权规则** @param http the {@link HttpSecurity} to modify* @throws Exception*/@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/").permitAll()// VIP1角色的用户才能访问level1的页面,其他同理.antMatchers("/level1/**").hasRole("VIP1").antMatchers("/level2/**").hasRole("VIP2").antMatchers("/level3/**").hasRole("VIP3");// 开启自动配置的登录功能
// http.formLogin();http.formLogin().usernameParameter("uname").passwordParameter("pwd").loginPage("/userlogin").loginProcessingUrl("/userlogin");// 1. 如果没有访问权限,转发到/login请求来到登录页;// 2. 重定向到/login?error表示登录失败。 更多详细规定// 3. 默认post形式的/login代表处理登录提交// 4.如果定制loginPage,那么loginPage的post请求就是登录提交// 开启自动配置的注销功能, 访问/logout表示用户注销,清空session; 注销成功后来到首页;http.logout().logoutSuccessUrl("/");// 开启记住我的功能, 将cookie发给浏览器保存,以后登录带上这个cookie,只要通过服务器端的验证就可以免登录// 如果点击”注销“,也会删除这个cookie
// http.rememberMe();http.rememberMe().rememberMeParameter("remember");// 禁用csrfhttp.csrf().disable();}/*** 定制认证规则** @param auth the {@link AuthenticationManagerBuilder} to use* @throws Exception*/@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("zhangsan").password("123456").roles("VIP1", "VIP2").and().withUser("lisi").password("123456").roles("VIP2", "VIP3").and().withUser("wangwu").password("123456").roles("VIP1", "VIP3");}
}
再次访问,应用被关闭。使用 curl -X POST http://localhost:8080/shutdown 也可以。
{"message": "Shutting down, bye..."
}
3. 定制端点信息
- 定制端点一般通过endpoints + 端点名 + 属性名来设置;
- 修改端点id (endpoints.beans.id=mybeans);
- 开启远程应用关闭功能 (endpoints.shutdown.enabled=true);
- 关闭端点(endpoints.beans.enabled=false);
- 开启所需端点
- endpoints.enabled=false;
- endpoints.beans.enabled=true;
- 定制端点访问路径 management.context-path=/manage;
- 关闭http端点 management.port=-1;
management.security.enabled=false
info.app.id=springboot-security
info..app.version=1.0
#endpoints.metrics.enabled=false
#endpoints.autoconfig.enabled=false
endpoints.shutdown.enabled=true
# http://localhost:8080/bean
endpoints.beans.id=mybean
endpoints.beans.path=/bean
# http://localhost:8080/du
endpoints.dump.path=/du
# 关闭所有端点访问
endpoints.enabled=false
# 开启指定端点访问
endpoints.beans.enabled=true
# 所有端点访问根路径 http://localhost:8080/manage/bean
management.context-path=/manage
# 所有端点访问端口 http://localhost:8181/manage/bean
management.port=8181
4. 健康状态监控
开放health端点访问
endpoints.health.enabled=true
http://localhost:8181/manage/health 响应:
{status: "UP",diskSpace: {status: "UP",total: 362095308800,free: 336869535744,threshold: 10485760}
}
现在来模拟服务失败的场景,比如引入redis依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
然后配置reids主机地址
# redis
spring.redis.host=192.168.111.129
因为我虚拟机上的redis服务没有启动,应用是无法连接redis的。我们来查看health端点状态:
http://localhost:8181/manage/health
{status: "DOWN",diskSpace: {status: "UP",total: 362095308800,free: 336868065280,threshold: 10485760
},
redis: {status: "DOWN",error: "org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool"}
}
启动远程redis服务后,再次查看health端点, 其实是RedisHealthIndicator提供了监控支持。
{status: "UP",diskSpace: {status: "UP",total: 362095308800,free: 335793897472,threshold: 10485760
},
redis: {status: "UP",version: "6.2.6"}
}
5. 自定义健康状态指示器
编写一个指示器,实现HealthIndicator接口
@Component
public class MyAppHealthIndicator implements HealthIndicator {@Overridepublic Health health() {
// Health.up().build() 成功// 自定义检查,直接返回失败return Health.down().withDetail("msg", "服务异常").build();}
}
启动应用后,查看健康端点
http://localhost:8181/manage/health
{status: "DOWN",myApp: {status: "DOWN",msg: "服务异常"
},
diskSpace: {status: "UP",total: 362095308800,free: 335793758208,threshold: 10485760
},
redis: {status: "UP",version: "6.2.6"}
}
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
chapter15:springboot与监控管理
Spring Boot与监控管理视频 1. 简介 通过引入spring-boot-starter-actuator, 可以使用SpringBoot为我们提供的准生产环境下的应用监控和管理功能。我们可以通过http, jmx, ssh协议来进行操作,自动得到审计、健康及指标信息等。 步骤: 引入spring-boo…...
![](https://www.ngui.cc/images/no-images.jpg)
http历史版本
1,HTTP0.9 最早的http版本,后来才被定义为0.9版本。 这时候通信采用的是纯文本格式; 只支持get请求,且在服务器响应之后就关闭连接; 没有请求头的概念,功能比较简单。 2,HTTP1.0 这个版本增…...
![](https://img-blog.csdnimg.cn/img_convert/625ee134cdbe395a5d36d336585639e0.png)
【Go语言】Golang保姆级入门教程 Go初学者chapter2
【Go语言】变量 VSCode插件 setting的首选项 一个程序就是一个世界 变量是程序的基本组成单位 变量的使用步骤 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zuxG8imp-1691479164956)(https://cdn.staticaly.com/gh/hudiework/imgmain/image-20…...
![](https://img-blog.csdnimg.cn/7bc84c4a6f174eadaa317ba36a4523fb.png)
关于ETL的两种架构(ETL架构和ELT架构) qt
ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库…...
![](https://img-blog.csdnimg.cn/3c4061314360495db81621ba73e32739.png)
【Linux】进程间通信——管道
目录 写在前面的话 什么是进程间通信 为什么要进行进程间通信 进程间通信的本质理解 进程间通信的方式 管道 System V IPC POSIX IPC 管道 什么是管道 匿名管道 什么是匿名管道 匿名管道通信的原理 pipe()的使用 匿名管道通信的特点 拓展代码 命名管道 什么是命…...
![](https://img-blog.csdnimg.cn/8e895ec81a7d419da4b5f92fc9242199.png)
Element-plus中tooltip 提示框修改宽度——解决方案
tooltip 提示框修改宽度方法: 在element中,想要设置表格的内容,超出部分隐藏,鼠标悬浮提示 可以在el-table 上添加show-overflow-tooltip属性 同时可以通过tooltip-options配置提示信息 如下图代码 <el-tableshow-overflo…...
![](https://img-blog.csdnimg.cn/5b0934618da446a5809a75940234b39c.png)
java实现当前系统时间格式化
import java.text.SimpleDateFormat; import java.util.Date;public class DateTest {public static void main(String[] args) {Date date new Date();System.out.println("当前系统时间:" date);SimpleDateFormat simpleDateFormat new SimpleDateFo…...
![](https://www.ngui.cc/images/no-images.jpg)
篇十一:享元模式:共享细粒度对象
篇十一:“享元模式:共享细粒度对象” 设计模式是软件开发中的重要工具,享元模式(Flyweight Pattern)是结构型设计模式的一种。享元模式旨在通过共享细粒度的对象,减少内存消耗和提高性能。在设计模式学习中…...
![](https://img-blog.csdnimg.cn/d2dee03bca4848b49f7d12016555d920.png)
Dev控件 Gridcontrol,gridview 实现多选功能
在网上看了好多实现dev控件GridControl多选功能的方法,都很麻烦,其实GridControl有一个自带的实现多选功能的控件,很简单。 实现效果如下 无需代码代码,使用GridControl中自带的多选功能,在界面直接设置即可 1.找到要…...
![](https://img-blog.csdnimg.cn/img_convert/d57474be6ac57eddecf8bfd92b74d120.png)
内网穿透:如何通过公网访问本地Web服务器?
文章目录 前言1. 首先安装PHPStudy2.下载一个开源的网页文件3. 选择“创建网站”并将网页内容指向下载好的开源网页文件4. 打开本地网页5. 打开本地cpolar客户端6. 保存隧道设置 生成数据隧道 前言 随着科技进步和时代发展,计算机及互联网已经深深融入我们的生活和…...
![](https://img-blog.csdnimg.cn/2077ae62960c4ce8a30c1ce438b61214.png)
在qemu中挂载镜像文件
将镜像文件作为交换分区 创建镜像文件: dd if/dev/zero ofswap.img bs512 count131072 qemu-system-arm -nographic -M vexpress-a9 -m 64M -kernel arch/arm/boot/zImage -append "rdinit/linuxrc consolettyAMA0 loglevel8" -dtb arch/arm/boot/dts/…...
![](https://img-blog.csdnimg.cn/cf3ded6c7b57413794e9c925db009bfc.png)
报错注入(主键重复)攻击原理
基本原理 利用数据表中主键不能重复的特点,通过构造重复的主键,使得数据库报错,并将报错结果返回到前端。 SQL说明函数 以pet数据表为例进行说明 rond(): 返回[0,1)区间内的任意浮点数。 count(): 返回每个组的列行数。 如࿰…...
![](https://www.ngui.cc/images/no-images.jpg)
Golang基础教程
Golang基础教程 golang简介安装golanggolang开发工具go常用命令golang开发 vscode快捷键如何编写golang代码golang标识符、关键字、命名规则golang变量go语言常量go语言数据类型go语言布尔类型go语言数字类型golang字符串golang格式化输出golang运算符go语言中的流程控制golan…...
![](https://img-blog.csdnimg.cn/img_convert/a74208095bd1fad10b4fd1107f00fc04.jpeg)
ppt压缩文件怎么压缩最小?文件压缩技巧分享
在日常的工作和学习中,难免会遇到PPT太大,需要将其压缩变小的情况,但很多朋友还不知道怎么压缩PPT文件,下面就给大家分享几个简单的方法,分分钟缩小过大的PPT文件。 一、PowerPoint PowerPoint就是微软公司的演示文稿…...
![](https://img-blog.csdnimg.cn/73497a5c00864ac9ab1d52bd58439af9.png)
实例033 制作闪烁的窗体
实例说明 Windows系统中,当程序在后台运行时,如果某个窗口的提示信息需要用户浏览,该窗口就会不停的闪烁,这样就会吸引用户的注意。同样,如果在自己的程序中使某个窗口不停的闪烁就会吸引用户的注意。本例设计了一个闪…...
![](https://img-blog.csdnimg.cn/f847189b472c436caf5053fd96a8c8ea.png)
【JavaEE进阶】Spring创建与使用
文章目录 一. 创建 Spring 项目1.1 创建一个Maven项目1.2 添加Spring依赖1.4. 创建一个启动类 二. 将 Bean 对象存放至 Spring 容器中三. 从 Spring 容器中读取到 Bean1. 得到Spring对象2. 通过Spring 对象getBean方法获取到 Bean对象【DI操作】 一. 创建 Spring 项目 接下来使…...
![](https://img-blog.csdnimg.cn/img_convert/f876f16a0a39b1eeb5abdf8cd09cebbc.png)
PHP8的循环控制语句-PHP8知识详解
我们在上一节讲的是条件控制语句,本节课程我们讲解循环控制语句。循环控制语句中,主要有for循环、while循环、do...while循环和foreach循环。 在编写代码时,经常需要反复运行同一代码块。我们可以使用循环来执行这样的任务,而不是…...
![](https://www.ngui.cc/images/no-images.jpg)
第八次作业
一,.什么是数据认证,有什么作用,有哪些实现的技术手段? 数据认证是指保证数据的真实性、完整性和可信度,以确保数据不被篡改或伪造。其作用包括但不限于: 保护关键数据不被恶意篡改或损坏 提供数据来源的可靠性和安全…...
![](https://www.ngui.cc/images/no-images.jpg)
LeetCode //C - 290. Word Pattern
290. Word Pattern Given a pattern and a string s, find if s follows the same pattern. Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in s. Example 1: Input: pattern “abba”, s “dog c…...
![](https://img-blog.csdnimg.cn/334a300fd3d04f6f9bee541b7cbeed9f.png)
[保研/考研机试] 括号匹配问题 C++实现
题目描述: 在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来的字符串&am…...
![](https://img-blog.csdnimg.cn/56ce8601aa9b444fbdd699dfa8a66080.png)
springBoot集成caffeine,自定义缓存配置 CacheManager
目录 springboot集成caffeine Maven依赖 配置信息:properties文件 config配置 使用案例 Caffeine定制化配置多个cachemanager springboot集成redis并且定制化配置cachemanager springboot集成caffeine Caffeine是一种基于服务器内存的缓存库。它将数据存储在…...
![](https://img-blog.csdnimg.cn/521646f4450146939b60adc71609e4b9.png)
【瑞吉外卖】Git部分学习
Git简介 Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种: 本地仓库:开发人员自己电脑上的Git仓库 远程仓库:远程服务器上的Git仓库…...
![](https://www.ngui.cc/images/no-images.jpg)
如何阐述自己做了一个什么样的东西
线上qps2000,主要的性能瓶颈在于出现在数据库I/O上。另外,如果是一个正常部署的容器,qps能达到几百就不错了。资讯服务现在做了静态的底层页,所以热点新闻多数会命中底层页,即便没有命中底层页,也会走多层的…...
![](https://www.ngui.cc/images/no-images.jpg)
TC3XX - MCAL知识点(二十二):QSPI 同步与异步 Mcal配置及代码实战
目录 1、MCAL配置 1.1、配置目标 1.2、同步QSPI配置 1.2.1、SpiGeneral 1.2.2、SpiMaxChannel 1.2.3、SpiMaxJob...
![](https://img-blog.csdnimg.cn/img_convert/2222037583dfd54ac21fcf6c4bf006f6.png)
led台灯哪些牌子性价比高?推荐几款性价比高的护眼台灯
作为学龄期儿童的家长,最担心的就是孩子长时间学习影响视力健康。无论是上网课、写作业、玩桌游还是陪伴孩子读绘本,都需要一个足够明亮的照明环境,因此选购一款为孩子视力发展保驾护航的台灯非常重要。为大家推荐几款性价比高的护眼台灯。 …...
![](https://www.ngui.cc/images/no-images.jpg)
什么情况下容易发生锁表及如何处理
目录 什么情况下容易发生锁表发生锁表怎么解决 什么情况下容易发生锁表 在数据库中,当多个事务同时竞争访问同一个表的资源时,可能会发生锁表现象,导致性能下降甚至阻塞。以下情况容易导致锁表问题: 大事务操作:如果一…...
![](https://img-blog.csdnimg.cn/e90adc1f769748c99cbf640e205422c1.png)
elk开启组件监控
elk开启组件监控 效果: logstash配置 /etc/logstash/logstash.yml rootnode1:~# grep -Ev "^#|^$" /etc/logstash/logstash.yml path.data: /var/lib/logstash path.logs: /var/log/logstash xpack.monitoring.enabled: true xpack.monitoring.elasti…...
![](https://img-blog.csdnimg.cn/abec0da97bc4451fb1a2b975417dc32f.jpeg#pic_center)
Java Random 类的使用
Java中的Random类是用来生成伪随机数的工具类。它可以用来生成随机的整数、浮点数和布尔值。以下是Java Random类的一些常见用法: 创建Random对象: Random random new Random();生成随机整数: int randomNumber random.nextInt(); // 生…...
![](https://img-blog.csdnimg.cn/46aba8174d604ccc9a6d9eff62d2a7b2.png)
完美的分布式监控系统——Prometheus(普罗米修斯)与优雅的开源可视化平台——Grafana(格鲁夫娜)
一、基本概念 1、之间的关系 prometheus与grafana之间是相辅相成的关系。作为完美的分布式监控系统的Prometheus,就想布加迪威龙一样示例和动力强劲。在猛的车也少不了仪表盘来观察。于是优雅的可视化平台Grafana出现了。 简而言之Grafana作为可视化的平台ÿ…...
![](https://img-blog.csdnimg.cn/6c5b8e2f4b6347b4a5dffe9a65614b53.png)
pycharm的Terminal中如何设置打开anaconda3的虚拟环境
在pycharm的File -> Settings -> Tools -> Terminal下面,如下图所示 修改为红框中内容,然后关闭终端在重新打开终端,即可看到anaconda3的虚拟环境就已经会被更新...
![](/images/no-images.jpg)
制作 网站/百度快照优化排名推广怎么做
access总结 在access数据库管理系统中,数据库是一个基础,它主要用来存储数据库应用系统中的其他数据库对象,也就是说,构成数据库应用系统的其他对象都存储在数据库中。 access第二章书中介绍使用access创建数据库的各种方法以及数…...
做 网站 要专线吗/福州关键词优化平台
针对这个问题,网上有很多方法,但主要是python无法找到其他函数所在的.py文件。不同情况有不同的方法:假设A.py文件需要调用B.py文件内的P(x,y)函数情况一:假如在同一目录下,则需import Bif __name__ "__mian__&q…...
![](/images/no-images.jpg)
中国数学外国人做视频网站/百度搜索官方网站
oracle数据库中: 首先要区分,时间字段是日期格式,还是字符串 日期格式:trunc(sysdate - 1); 字符串格式:to_char(sysdate - 30, yyyy-mm-dd ) 选前1天数据: select * from 表where 日期>to_date(to_c…...
![](/images/no-images.jpg)
提供网站建设收费标准/小程序开发哪家好
目录 题目 思路 考点 Code 题目 特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。 车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。 统计停车场最少可以停多少辆车,返回具体的数目。 输入描述 整型字符串数组c…...
![](/images/no-images.jpg)
什么是电子商务网站/教你如何快速建站
今天,上线一个客户网站之后(使用的是广州新一代虚拟空间)发现在读取上传的pdf文件的时候读取错误,通过直接在浏览器输入文件地址的时候发现文件地址被重定向了(呵呵!),结果就是pdf文…...
![](/images/no-images.jpg)
百度外推代发排名/seo产品优化免费软件
C指向函数的指针定义方式为: 返回类型 (*指针名)(函数参数列表),例如 void (*p)(int)是指向一个返回值为void 参数为int类型的函数。 而若想定义一个指向类成…...