SpringBoot actuator应用监控

文章目录

  • 引入依赖
  • 端点(Endpoints)
    • 端点种类
    • 端点开启配置
    • 暴露端点
      • 手动暴露端点
    • 端点保护
      • 引入spring security依赖
      • 配置security
    • 端点响应缓存
    • 访问端点路径修改
    • CORS跨域支持
    • 健康信息(/actuator/health)
      • 自定义healthInfo
    • 应用信息(/actuator/info)
  • 监控信息可视化
    • 引入依赖
    • 配置
    • 查看配置

SpringBoot项目有很多参数,合理的利用便于我们观察项目的运行情况,以便即时发现问题进行修复。

引入依赖

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

端点(Endpoints)

端点种类

默认包含端点
在这里插入图片描述
web应用另外包含的端点
在这里插入图片描述

端点开启配置

上述端点默认都是开启的,只有shutdown没有开启,可通过配置(application.properties)设置开启状态

# 关闭所有默认设置
management.endpoints.enabled-by-default=false
# 手动开启info端点
management.endpoint.info.enabled=true
# 手动开启shutdown端点
management.endpoint.shutdown.enabled=true

暴露端点

端点默认暴露情况在这里插入图片描述
默认只有health和info暴露
所有都不配置,默认访问
在这里插入图片描述
在这里插入图片描述
表示应用在线

手动暴露端点

# 手动暴露指定端点
management.endpoints.web.exposure.include=mappings,metrics
# 手动暴露所有端点
management.endpoints.web.exposure.include=*

暴露全部端点,部分端点未打印出来,是因为项目里没有引入相应依赖

{"_links": {"self": {"href": "http://localhost:8080/actuator","templated": false},"beans": {"href": "http://localhost:8080/actuator/beans","templated": false},"caches": {"href": "http://localhost:8080/actuator/caches","templated": false},"caches-cache": {"href": "http://localhost:8080/actuator/caches/{cache}","templated": true},"health-path": {"href": "http://localhost:8080/actuator/health/{*path}","templated": true},"health": {"href": "http://localhost:8080/actuator/health","templated": false},"info": {"href": "http://localhost:8080/actuator/info","templated": false},"conditions": {"href": "http://localhost:8080/actuator/conditions","templated": false},"configprops-prefix": {"href": "http://localhost:8080/actuator/configprops/{prefix}","templated": true},"configprops": {"href": "http://localhost:8080/actuator/configprops","templated": false},"env-toMatch": {"href": "http://localhost:8080/actuator/env/{toMatch}","templated": true},"env": {"href": "http://localhost:8080/actuator/env","templated": false},"loggers": {"href": "http://localhost:8080/actuator/loggers","templated": false},"loggers-name": {"href": "http://localhost:8080/actuator/loggers/{name}","templated": true},"heapdump": {"href": "http://localhost:8080/actuator/heapdump","templated": false},"threaddump": {"href": "http://localhost:8080/actuator/threaddump","templated": false},"metrics-requiredMetricName": {"href": "http://localhost:8080/actuator/metrics/{requiredMetricName}","templated": true},"metrics": {"href": "http://localhost:8080/actuator/metrics","templated": false},"quartz": {"href": "http://localhost:8080/actuator/quartz","templated": false},"quartz-jobsOrTriggers-group": {"href": "http://localhost:8080/actuator/quartz/{jobsOrTriggers}/{group}","templated": true},"quartz-jobsOrTriggers": {"href": "http://localhost:8080/actuator/quartz/{jobsOrTriggers}","templated": true},"quartz-jobsOrTriggers-group-name": {"href": "http://localhost:8080/actuator/quartz/{jobsOrTriggers}/{group}/{name}","templated": true},"scheduledtasks": {"href": "http://localhost:8080/actuator/scheduledtasks","templated": false},"mappings": {"href": "http://localhost:8080/actuator/mappings","templated": false}}
}

端点保护

端点的部分信息我们不想展示给外部,可以通过security配置权限来控制

引入spring security依赖

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

配置security

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {// 配置密码加密@BeanPasswordEncoder passwordEncoder(){// 使用BCrypt强哈希函数,strength默认为10return new BCryptPasswordEncoder();}// 配置用户@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception{auth.inMemoryAuthentication().withUser("admin").password("$2a$10$RMuFXGQ5AtH4wOvkUqyvuecpqUSeoxZYqilXzbz50dceRsga.WYiq") // 123.roles("admin").and().withUser("sang").password("$2a$10$RMuFXGQ5AtH4wOvkUqyvuecpqUSeoxZYqilXzbz50dceRsga.WYiq") // 123.roles("user");}@Overrideprotected void configure(HttpSecurity http) throws Exception{// 在自定义配置中禁用 csrf校验,否则 security会默认校验token,直调非get接口会提示403http.csrf().disable();// 匹配所有的Endpoint,但不包括@RequestMapping注解http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests().anyRequest().hasRole("admin").and().httpBasic();}
}

再访问/actuator则需要登录,只有admin角色才能看到,user角色会提示403
在这里插入图片描述

端点响应缓存

对于不带参数的端点可以设置缓存

management.endpoint.beans.cache.time-to-live=100s

注意:如果配置了端点保护,缓存则不会生效,此时Principal会被视为端点的输入

访问端点路径修改

默认路径为/actuator或/actuator/xxx,可对其进行修改

management.endpoints.web.base-path=/actu
management.endpoints.web.path-mapping.health=healthcheck

在这里插入图片描述

CORS跨域支持

默认所有端点都不允许跨域访问

management.endpoints.web.cors.allowed-origins=http://localhost:8081
management.endpoints.web.cors.allowed-methods=GET,POST

健康信息(/actuator/health)

默认不展示详细信息,如果需要查看,需要配置

management.endpoint.health.show-details=when_authorized // nerver 默认,when_authorized 认证用户,always 展示给所有用户
management.endpoint.health.roles=admin // 设置admin角色才能查看management.health.defaults.enabled=false // 关闭所有配置

在这里插入图片描述
在这里插入图片描述

自定义healthInfo

需要实现HealthIndicator接口
自定义网络连接数据

@Component
public class CustomHealth implements HealthIndicator {public static boolean checkNetWork(){String url = "www.google.com"; //要访问的URL地址,超时// String url = "www.baidu.com"; // 连接正常try (Socket socket = new Socket()) {InetAddress address = InetAddress.getByName(url);int timeout = 3000; //设置超时时间为3秒socket.connect(new InetSocketAddress(address, 80), timeout);socket.close();return true;} catch (Exception e){System.err.println("无法连接到网络或者连接超时");}return false;}@Overridepublic Health health(){if(checkNetWork()){return Health.up().withDetail("msg", "网络连接正常...").build();}// 响应状态有DOWN、UP、OUT_OF_SERVICE、UNKNOWNreturn Health.down().withDetail("msg", "网络断开...").build();}
}

连接www.google.com测试
在这里插入图片描述
连接www.baidu.com测试
在这里插入图片描述

应用信息(/actuator/info)

1、自定义信息,application.properties中的配置

info.author.name=star
info.aythor.address=beijing

2、git信息
3、项目构建信息

监控信息可视化

引入依赖

<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>2.7.3</version>
</dependency>
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId><version>2.7.3</version>
</dependency>

配置

项目启动类开启AdminServer

@EnableAdminServer // 开启AdminServer

application.properties中将client服务注册到AdminServer

spring.boot.admin.client.url=http://localhost:8080

查看配置

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS安装jdk

1、查看可安装版本 yum -y list java* 2、安装jdk1.8版本 yum -y install java-1.8.0-openjdk 3、查看版本 java -version 4、安装目录为&#xff1a; /usr/lib/jvm 5、卸载 yum -y remove java-1.8.0-openjdk

【python基础】-- yarn add 添加依赖的各种类型

目录 1、安装 yarn 1.1 使用npm安装 1.2 查看版本 1.3 yarn 淘宝源配置 2、安装命令说明 2.1 yarn add&#xff08;会更新package.json和yarn.lock&#xff09; 2.2 yarn install 2.3 一些操作 2.3.1 发布包 2.3.2 移除一个包 2.3.3 更新一个依赖 2.3.4 运行脚本 …

【Android Studio】各个版本下载地址

下载地址&#xff1a; https://developer.android.com/studio/archive?hlzh-cn

LeetCode刷题--- 子集

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题【 http://t.csdnimg.cn/yUl2I 】【C】 【 http://t.csdnimg.cn/6AbpV 】数据结构与算法【 http://t.csdnimg.cn/hKh2l 】 前言&#xff1a;这个专栏主要讲…

【大数据实训】python石油大数据可视化(八)

2014到2020年石油加工产品产量数据处理分析 一、任务描述 石油是工业的命脉。 一直到2020年&#xff0c;我国原油产量基本处于平稳的状态&#xff0c;大部分原油来自国外进口&#xff1b;中国原油加工产量在华东、东北地区占比较大&#xff0c;华南地区相对较少。原油的加工…

融云观察:给 ChatGPT 加上声音和脸庞,AI 社交的多模态试验

&#xff08;&#x1f446;点击获取行业首款《社交泛娱乐出海作战地图》&#xff09; 如果将短剧的爆火简单粗暴地归因为剧情上头、狗血反转和精妙卡点&#xff0c;那 GenAI 世界这一年来可以说是一部短剧 Live Show。关注【融云全球互联网通信云】了解更多 这厢 Open AI 宫斗…

2023年全球架构师峰会(ArchSummit北京站2023)-核心PPT资料下载

一、峰会简介 ArchSummit聚焦业界强大的技术成果&#xff0c;秉承“实践第一、案例为主”的原则&#xff0c;展示先进技术在行业中的典型实践&#xff0c;以及技术在企业转型、发展中的推动作用。旨在帮助技术管理者、CTO、架构师做好技术选型、技术团队组建与管理&#xff0c…

Spring Cloud+SpringBoot b2b2c:Java商城实现一件代发设置及多商家直播带货商城 免 费 搭 建

【saas云平台】打造全行业全渠道全场景的saas产品&#xff0c;为经营场景提供一体化解决方案&#xff1b;门店经营区域化、网店经营一体化&#xff0c;本地化、全方位、一站式服务&#xff0c;为多门店提供统一运营解决方案&#xff1b;提供丰富多样的营销玩法覆盖所有经营场景…

静态路由及动态路由

文章目录 静态路由及动态路由一、静态路由基础1. 静态路由配置2. 负载分担3. 路由备份4. 缺省路由5. 静态路由实操 二、RIP 动态路由协议1. RIP 协议概述2. RIP 协议版本对比2.1 有类路由及无类路由 3. RIP 路由协议原理4. RIP 计时器5. 度量值6. 收敛7. 示例 静态路由及动态路…

【大数据面试】Flink面试题附答案

目录 ✅Flink介绍、特点、应用场景 ✅Flink与Spark Streaming的区别 ✅Flink有哪些部署模式 ✅Flink架构 ✅怎么设置并行度&#xff1f; ✅什么是算子链&#xff1f; ✅什么是任务槽&#xff08;Task Slots&#xff09;&#xff1f; ✅任务槽和并行度的关系 ✅Flink作…

Java 中单例模式的常见实现方式

目录 一、什么是单例模式&#xff1f; 二、单例模式有什么作用&#xff1f; 三、常见的创建单例模式的方式 1、饿汉式创建 2、懒汉式创建 3、DCL&#xff08;Double Checked Lock&#xff09;双检锁方式创建 3.1、synchronized 同步锁的基本使用 3.2、使用 DCL 中存在的疑…

论文学习——泰森多边形法在小流域面雨量计算中的应用

文章目录 0 摘要00 引言1 研究区域概况2 泰森多边形的建立3 流域多年面降雨量分析4 典型降雨场次面雨量分析5 典型降雨日面雨量分析6 结论7 个人总结0 摘要 研究泰森多边形算法,在小流域面雨量计算中的适用性。选取3种不同降雨量实例,流域多年面降雨量、典型场次、典型日面雨…