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 {
    // 配置密码加密
    @Bean
    PasswordEncoder passwordEncoder(){
        // 使用BCrypt强哈希函数,strength默认为10
        return new BCryptPasswordEncoder();
    }
    // 配置用户
    @Override
    protected 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");
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception{
        // 在自定义配置中禁用 csrf校验,否则 security会默认校验token,直调非get接口会提示403
        http.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;
    }
    @Override
    public Health health(){
        if(checkNetWork()){
            return Health.up().withDetail("msg", "网络连接正常...").build();
        }
        // 响应状态有DOWN、UP、OUT_OF_SERVICE、UNKNOWN
        return 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.mfbz.cn/a/258881.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

fastadmin自定义添加、修改弹窗大小

找到对应的js文件&#xff0c;添加&#xff1a; // 修改添加窗口的大小 $(".btn-add").data("area", ["50%", "60%"]); // 修改编辑窗口的大小 $(".btn-edit").data("area", ["50%", "60%"]…

2024Web自动化测试的技术框架和工具有哪些?

Web 自动化测试是一种自动化测试方式&#xff0c;旨在模拟人工操作对 Web 应用程序进行测试。这种测试方式可以提高测试效率和测试精度&#xff0c;减少人工测试的工作量和测试成本。在 Web 自动化测试中&#xff0c;技术框架和工具起着至关重要的作用。本文将介绍几种常见的 W…

数据库面试题

数据库面试题 Mysql Q&#xff1a;数据库索引有哪些&#xff1f;有什么作用以及优缺点&#xff1f; 普通索引 alter table table_name add index index_name (column) MySQL中基本索引类型&#xff0c;没有什么限制&#xff0c;允许在定义索引的列中插入重复值和空值&…

Swagger升级指南:Swagger2与Swagger3注解差异揭秘

在API开发的世界里&#xff0c;Swagger已经成为了一个不可或缺的工具&#xff0c;它让API的文档化和前后端的协作变得前所未有地简单。随着Swagger的进化&#xff0c;我们迎来了Swagger3&#xff0c;也被称为OpenAPI Specification 3.0。本篇博客将带大家深入了解Swagger2和Swa…

Swagger不显示接口注释

如果 Swagger 不显示接口注释&#xff0c;请检查以下两点&#xff1a; 1、缺少 XML 注释文件&#xff1a;Swagger 默认使用 XML 注释文件中的注释来生成接口文档。确保在项目的生成设置中启用了 XML 文档生成&#xff0c;并将生成的 XML 注释文件放置在与生成的 DLL 文件相同的…

计算机组成原理(复习题)

更多复习详情请见屌丝笔记 一、选择题 计算机系统概述 1、至今为止&#xff0c;计算机中的所有信息仍以二进制方式表示的理由是&#xff08; C &#xff09;。 A.运算速度快 B.信息处理方便 C.物理器件性能所致 D.节约元件 2、运算器的核心功能部件是&#xff08; D &am…

快速入门 — — 在Moonbeam上开发

访问熟悉的以太坊工具是一回事&#xff0c;获得顶级支持、拥有构建突破性跨链应用程序的资源是另一回事。 Moonbeam汇集了通过集成互操作性解决方案访问任何链的能力、具有完全以太坊兼容性的理想开发环境&#xff0c;以及使用Substrate在波卡上安全扩展的能力。 开始在Moonb…

Kafka为什么能高效读写数据

1&#xff09;Kafka 本身是分布式集群&#xff0c;可以采用分区技术&#xff0c;并行度高&#xff08;生产消费方并行度高&#xff09;&#xff1b; 2&#xff09;读数据采用稀疏索引&#xff0c;可以快速定位要消费的数据&#xff1b; 3&#xff09;顺序写磁盘&#xff1b; …

行业追踪,2023-12-20

自动复盘 2023-12-20 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

构建陪诊预约系统:技术实现与用户体验

在医疗服务不断创新的背景下&#xff0c;陪诊预约系统作为一种结合技术与人性化服务的应用&#xff0c;为患者提供了更为便捷和贴心的医疗体验。让我们通过简单的示例代码&#xff0c;了解一下如何构建一个基本的陪诊预约系统。 技术栈选择 在开始构建陪诊预约系统之前&…

蓝牙物联网开发与应用:五大核心应用场景!

蓝牙技术在物联网中的五大核心应用场景 1、智能家居 通过蓝牙连接智能家居设备&#xff0c;如智能灯泡、智能插座、智能恒温器等&#xff0c;可以实现远程控制、语音控制等功能&#xff0c;提高家居的智能化程度和便利性。 2、智能穿戴设备 蓝牙技术可以连接智能手表、智能手…

倒计数器:CountDownLatch

CountDownLatch 是 Java 中用于多线程编程的一个同步工具。 它允许一个或多个线程等待其他线程执行完特定操作后再继续执行。 CountDownLatch 通过一个计数器来实现&#xff0c; 该计数器初始化为一个正整数&#xff0c;每当一个线程完成了指定操作&#xff0c;计数器就会减一。…

MyBatis进行CRUD中添加数据实现主键回填

文章目录 MyBatis进行CRUD中添加数据实现主键回填1、创建一个mybatis项目2、实现添加数据时主键回填在MyBatisTest.java中添加下面方法在UserMapper.java中添加对应的属性在UserMapper.xml中添加sql语句如下运行结果如下(取消commit方法注释后就不会出现Rolling back回滚进行真…

谈思生物医疗直播|“靶向双硫死亡在肿瘤治疗中的应用”

细胞死亡是维持生物发育和内部环境稳态的生理过程。靶向细胞死亡相关通路杀死癌细胞是癌症治疗的一大方向。今年年初&#xff0c;有研究团队发现和鉴定了一种全新的细胞死亡类型——双硫死亡(Disulfidptosis)&#xff0c;为癌治疗开辟了新的可能性。 溶质载体家族成员 SLC7A11…

求奇数的和 C语言xdoj147

题目描述&#xff1a;计算给定一组整数中奇数的和&#xff0c;直到遇到0时结束。 输入格式&#xff1a;共一行&#xff0c;输入一组整数&#xff0c;以空格分隔 输出格式&#xff1a;输出一个整数 示例&#xff1a; 输入&#xff1a;1 2 3 4 5 0 6 7 输出&#xff1a;9 #inclu…

QEMU源码全解析 —— virtio(19)

接前一篇文章&#xff1a; 上回书继续讲解virtio_pci_driver的probe回调函数virtio_pci_probe()&#xff0c;在讲到第5段代码的时候&#xff0c; if (force_legacy) {rc virtio_pci_legacy_probe(vp_dev);/* Also try modern mode if we cant map BAR0 (no IO space). */if (r…

Java如何开发PC客户端(Windows,Mac,Linux)

项目编译工具&#xff1a;Gradle开发工具&#xff1a; Idea开发语言&#xff1a; 建议java17以上ui组件&#xff1a;openjfx (org.openjfx.javafxplugin)打包工具: jpackage (org.beryx.jlink) 一、如何解决打包问题 java 14以后&#xff0c;有了jpackage工具&#xff0c;能够…

【Axure高保真原型】中继器表格——移入显示详情卡片

今天和大家分享中继器表格——移入显示详情卡片的原型模板&#xff0c;鼠标移入员工姓名&#xff0c;会显示对应员工的详细卡片&#xff0c;那这个原型是用中继器制作的&#xff0c;所以使用也很方便&#xff0c;在中继器表格里维护对应的信息即可。预览时即可生成交互效果&…

Ansible自动化运维以及模块使用

ansible的作用 远程操作主机功能 自动化运维(playbook剧本基于yaml格式书写) ansible是基于python开发的配置管理和应用部署工具。在自动化运维中&#xff0c;现在是异军突起 ansible能够批量配置、部署、管理上千台主机。类似于Xshell的一键输入工具。不需要每次都切换主机…

ITIL® 4 Foundation​,12月23日即将开课~想了解点击查看

ITIL 4 Foundation即将开课~ 想报名的必须提前预约啦 &#x1f447;&#x1f447;&#x1f447; 培训地点&#xff1a; 远程直播&#xff1a;线上平台学习 开课时间&#xff1a; 周末班&#xff1a;12月23日、24日&#xff1b; 什么是ITIL&#xff1f; 信息技术基础架构…
最新文章