SpringBoot actuator应用监控

news2024/9/24 21:18:35

文章目录

  • 引入依赖
  • 端点(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.coloradmin.cn/o/1324434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode刷题】--245.最短单词距离III

245.最短单词距离III class Solution {public int shortestWordDistance(String[] wordsDict, String word1, String word2) {int len wordsDict.length;int ans len;if(word1.equals(word2)){int prev -1;for(int i 0;i<len;i){String word wordsDict[i];if(word.equa…

Unity中Shader测试常用的UGUI功能简介

文章目录 前言一、锚点1、锚点快捷修改位置2、使用Anchor Presets快捷修改3、Anchor Presets界面按下 Shift 可以快捷修改锚点和中心点位置4、Anchor Presets界面按下 Alt 可以快捷修改锚点位置、UI对象位置 和 长宽大小 二、Canvas画布1、UGUI中 Transform 变成了 Rect Transf…

One Wire协议解析

引言 One Wire是一种串行扩展总线技术&#xff0c;由DALLAS公司推出。它采用一根信号线进行通信&#xff0c;既传输时钟信号又传输数据&#xff0c;而且能够进行双向通信。由于其节省I/O口线、资源结构简单、成本低廉、便于总线扩展和维护等诸多优点&#xff0c;One Wire在许多…

go语言指针变量定义及说明

go语言指针主要需要记住两个特殊符号&#xff0c; 一个是 & 用来获取变量对应的内存地址 另一个是 * 用来获取指针对应的变量值 下面是个最简单的go语言指针说明 package mainimport "fmt"//指针为内存地址func main() {var a string "指针对应的变量&…

2023数字化发展推动家庭教育走向科学评价

近年来,随着人工智能、大数据、区块链等新一代数字技术的教育应用,在实践探索中形成了无感式数据采集、智能化诊断分析、即时性精准反馈等新样态,为破解教育评价难题提供了新的可能。 过去,传统教育评价体系是学校以及家庭教育最核心的焦虑和压力来源之一。“唯分数论”以及“…

实验一传统的结构化的软件工程方法、实验二面向对象的软件工程、实验三软件测试

背景&#xff1a; 实验一 传统的结构化的软件工程方法 1实验目的 了解传统的软件工程方法的基本原理&#xff0c;掌握软件生命周期的全过程依次划分为需求分析、总体设计、详细设计、编码、测试、维护等几个重要阶段。每个阶段所要完成的任务以及提交的文档。 2实验内容 …

手把手教你在 windows 上安装 Docker

前言 大家好&#xff0c;我是潇潇雨声&#xff0c;今天为大家带来一篇关于在 Windows 环境下使用 Docker 的教程。对于 Docker&#xff0c;我们可以简单地将其看作一种方便的软件安装方式&#xff0c;而无需深入涉及其复杂的概念。选择使用 Docker 主要是为了省事&#xff0c;比…

爬虫请求指纹检测与绕过 TLS/JA3/Http2

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 一、什么是请求指纹检测&#xff1f; TLS/JA3、HTTP/2 指纹检测是一种网络流量分析技术&#xff0c;用于识别和分析网络通信中使用的加密…

阿里云k8s集群搭建

文章目录 一、安装前准备1.环境2.k8s集群规划 二、k8s 安装1. centos基础设置2. docker 安装3. k8s安装3.1 添加阿里云 yum 源3.2 安装 kubeadm、kubelet、kubectl3.3 部署 Kubernetes Master3.4 加入 Kubernetes Node3.5 部署 CNI 网络插件3.6 测试 kubernetes 集群 一、安装前…

MATLAB - 最优控制(Optimal Control)

系列文章目录 前言 - 什么是最优控制&#xff1f; 最优控制是动态系统满足设计目标的条件。最优控制是通过执行以下定义的最优性标准的控制律来实现的。一些广泛使用的最优控制方法有&#xff1a; 线性二次调节器 (LQR)/线性二次高斯 (LQG) 控制 模型预测控制 强化学习 极值…

管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜A/B

老规矩&#xff0c;看目录&#xff0c;平均3-5题 文章目录 A/B2023真题&#xff08;2023-19&#xff09;-A-选项特点&#xff1a;两个等号&#xff1b;-判断需联立的难易&#xff1a;难&#xff0c;看着感觉需要联立&#xff0c;所以判断联立需要有理论支撑&#xff0c;不然还…

【AI美图】第08期效果图,AI人工智能3D效果图,让创意和想象力在一张简单的底图上绽放!

让创意和想象力在一张简单的底图上绽放 探索未来&#xff0c;体验无限可能&#xff01;我们的AI技术可以将一张简单的底图转化为令人惊叹的3D效果图&#xff0c;让你瞬间拥有超凡的视觉体验。无论是房屋建筑、汽车设计、游戏开发&#xff0c;还是艺术创作&#xff0c;我们的AI…

LabVIEW开发振动数据分析系统

LabVIEW开发振动数据分析系统 自动测试系统基于LabVIEW平台设计&#xff0c;采用了多种高级硬件设备。系统的硬件组成包括PCB振动加速度传感器&#xff0c;这是一种集成了传统压电加速度传感器和电荷放大器的先进设备&#xff0c;能够直接与采集仪器连接。此外&#xff0c;系统…

漏洞复现-亿赛通任意文件读取漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

鸿蒙ArkTS语言介绍与TS基础法

1、ArkTS介绍 ArkTS是HarmonyOS主力应用开发语言&#xff0c;它在TS基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等响应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨端应用。 JS 是一种属于网络的高级脚本语言&#xff0c;已经被广泛用…

精通服务器远程管理:全面指南

引言 在当今数字化世界中&#xff0c;IT专业人员和管理员能够远程管理服务器的能力是无价之宝。远程服务器管理不仅提高了效率&#xff0c;而且在无法物理访问服务器的情况下确保了持续的运营。本指南将深入探讨远程管理的不同类型、远程桌面的使用方法&#xff0c;以及如何安全…

ie-tab插件平替插件IEability-Open in IE

ie-tab插件仅可试用两周&#xff0c;之后就要收费 IEability-Open in IE可以平替 IE tab 下载IEability.exe并进行安装 在浏览器的输入界面输入搜索内容&#xff0c;点击插件按钮即可进入IE模式

sectigo多域名通配符证书

多域名通配符SSL证书是一种特殊的SSL证书&#xff0c;它综合了多域名SSL证书和通配符SSL证书的特点&#xff0c;可以同时保护多个泛域名以及它的主域名&#xff0c;适合域名多&#xff0c;子域名也比较多的单个或多个站点使用。今天就随SSL盾小编了解Sectigo旗下的DV多域名通配…

Node.js 工作线程与子进程:应该使用哪一个

Node.js 工作线程与子进程&#xff1a;应该使用哪一个 并行处理在计算密集型应用程序中起着至关重要的作用。例如&#xff0c;考虑一个确定给定数字是否为素数的应用程序。如果我们熟悉素数&#xff0c;我们就会知道必须从 1 遍历到该数的平方根才能确定它是否是素数&#xff…

基于YOLOv8的结核病预测系统设计与实现

一、项目背景 本系统的目的是通过痰液图像来检测出结核杆菌的携带者&#xff0c;及时采取治疗措施&#xff0c;在病情早期对其进行相关治疗减少结核病的传播。程序使用的样本是经过染色处理可以使得结核杆菌在显微镜拍摄的医学图像&#xff0c;通过检测医学图像中的结核杆菌诊…