031-从零搭建微服务-监控中心(一)

news2024/9/20 1:12:37

写在最前

如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。

源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心

源码地址(前端):mingyue-ui: 🎉 基于 Vue3 + TS + Vite + Element plus 等技术,适配 MingYue 后台微服务

文档地址:Wiki - Gitee.com

mingyue-visual

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。微服务是一种软件架构模式,它将大型应用程序拆分为小型、自治的服务,每个服务都有自己的特定功能。这种架构提供了很多好处,如增加开发速度、提高灵活性和可伸缩性,但同时也引入了一些挑战,特别是涉及到服务之间的通信和协调。

明月可视化模块将担任确保微服务之间的稳定性,实施健康检查和自愈机制,以监测和自动修复服务的问题。实施监控和日志记录,以及性能分析工具,以及时检测和解决问题。制定紧急计划和容错机制,以处理服务中断或失败时的情况。

明月可视化模块规划是存放监控中心,如 mingyue-monitor(监控中心 SpringBoot Admin)、Xxl-Job(分布式任务调度平台)、Sentinel(分布式系统的流量防卫兵)等微服务所需的第三方可视化应用,通过丰富该模块来健壮和拓展 mingyue,多个维度保护服务的稳定性。

Spring Boot Admin

Spring Boot Admin 是一个开源的社区项目,用于监控和管理 Spring Boot 应用程序。它提供了一个用户友好的 Web 界面,通过该界面,您可以查看和管理您的 Spring Boot 应用程序的各种运行时信息,包括健康状态、性能指标、日志、环境属性等。Spring Boot Admin 可以帮助您更容易地监控和管理多个 Spring Boot 应用程序,特别适用于微服务架构中的应用程序。

以下是 Spring Boot Admin 的一些主要特点和功能:

  1. 应用程序列表: Spring Boot Admin 提供了一个仪表板,用于显示注册的 Spring Boot 应用程序的列表,以及它们的健康状态和其他有用的信息。

  2. 健康检查: 它可以监测和报告应用程序的健康状态,如果应用程序出现问题,您可以立即看到并采取措施。

  3. 性能指标: Spring Boot Admin 可以收集和显示应用程序的性能指标,包括 CPU 使用率、内存使用率、线程数等。

  4. 日志查看: 您可以查看应用程序的日志文件,有助于故障排除和分析。

  5. 环境属性: Spring Boot Admin 可以显示应用程序的配置属性,这有助于查看应用程序的配置信息。

  6. 安全性: 您可以配置安全性,以确保只有授权用户可以访问 Spring Boot Admin 界面。

  7. 通知和警报: 您可以设置通知和警报,以在应用程序出现问题时及时收到通知。

Spring Boot Admin 可以作为一个单独的服务部署,也可以集成到您的应用程序中。它使用 Spring Boot Actuator 来收集应用程序的信息,因此您需要在要监视的 Spring Boot 应用程序中集成 Actuator。通过 Spring Boot Admin,您可以集中管理多个应用程序,轻松监控它们的状态,以确保它们保持健康和可靠。

新建监控中心

添加 mingyue-monitor 模块

添加依赖

<dependencies>
    <!-- SpringBoot Admin -->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-server</artifactId>
        <version>${spring-boot-admin.version}</version>
    </dependency>
​
    <!-- SpringCloud Alibaba Nacos -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
​
    <!-- SpringCloud Alibaba Nacos Config -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
​
    <!-- SpringCloud Alibaba Sentinel -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
​
    <!-- web容器 -->
    <dependency>
      <groupId>com.csp.mingyue</groupId>
      <artifactId>mingyue-common-web</artifactId>
    </dependency>
​
    <!-- Spring Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
​
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>

监控权限配置

@EnableWebSecurity
public class WebSecurityConfigurer {
    private final String adminContextPath;
​
    public WebSecurityConfigurer(AdminServerProperties adminServerProperties) {
        this.adminContextPath = adminServerProperties.getContextPath();
    }
​
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        successHandler.setDefaultTargetUrl(adminContextPath + "/");
​
        return httpSecurity
                .headers().frameOptions().disable()
                .and().authorizeRequests()
                .antMatchers(adminContextPath + "/assets/**"
                        , adminContextPath + "/login"
                        , adminContextPath + "/actuator/**"
                        , adminContextPath + "/instances/**"
                ).permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin().loginPage(adminContextPath + "/login")
                .successHandler(successHandler).and()
                .logout().logoutUrl(adminContextPath + "/logout")
                .and()
                .httpBasic().and()
                .csrf()
                .disable()
                .build();
    }
}

自定义事件通知处理

@Slf4j
@Component
public class CustomNotifier extends AbstractEventNotifier {
​
    protected CustomNotifier(InstanceRepository repository) {
        super(repository);
    }
​
    @Override
    @SuppressWarnings("all")
    protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
        return Mono.fromRunnable(() -> {
            // 实例状态改变事件
            if (event instanceof InstanceStatusChangedEvent) {
                String registName = instance.getRegistration().getName();
                String instanceId = event.getInstance().getValue();
                String status = ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus();
                log.info("Instance Status Change: [{}],[{}],[{}]", registName, instanceId, status);
            }
        });
    }
​
}

监控中心启动类

@EnableAdminServer
@SpringBootApplication
public class MingYueMonitorApplication {
    public static void main(String[] args) {
        SpringApplication.run(MingYueMonitorApplication.class, args);
        System.out.println("(♥◠‿◠)ノ゙  监控中心启动成功   ლ(´ڡ`ლ)゙  ");
    }
}

启动配置

# Tomcat
server:
  port: 9100
​
# Spring
spring:
  application:
    # 应用名称
    name: mingyue-monitor
  profiles:
    # 环境配置
    active: @profiles.active@
​
--- # nacos 配置
spring:
  cloud:
    nacos:
      # nacos 服务地址
      server-addr: @nacos.server@
      discovery:
        # 注册组
        group: @nacos.discovery.group@
        namespace: ${spring.profiles.active}
      config:
        # 配置组
        group: @nacos.config.group@
        namespace: ${spring.profiles.active}
  config:
    import:
      - optional:nacos:application-common.yml
      - optional:nacos:${spring.application.name}.yml

接入监控中心

修改 mingyue-common-web

添加 actuator 模块

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

暴露监控端点

修改 application-common.yml 添加配置

management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: ALWAYS
    logfile:
      external-file: ./logs/${spring.application.name}/console.log

启动测试

依次启动 mingyue-gatewaymingyue-authmingyue-systemmingyue-pushmingyue-ossmingyue-monitor 测试监控中心

image-20231025110211833

监控中心搭建完成啦~~。可以测试启停项目,观察监控是否能检测到。

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

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

相关文章

正点原子嵌入式linux驱动开发——外置RTC芯片PCF8563

上一章学习了STM32MP1内置RTC外设&#xff0c;了解了Linux系统下RTC驱动框架。一般的应用场合使用SOC内置的RTC就可以了&#xff0c;而且成本也低&#xff0c;但是在一些对于时间精度要求比较高的场合&#xff0c;SOC内置的RTC就不适用了。这个时候需要根据自己的应用要求选择合…

Halcon 常用通道Scale灰度元操作整理

一、说明 我们将常见的,基于图层信号幅度的操作集中展现出来,以便以后见到相关的操作不会产生唐突。至于这些算子在项目中的灵活应用,我们将在项目中具体指定。 二、基于数量(Scale)的操作 2.1 亮度(Scale)调整 scale_image_max(Image:ImageScaleMax::)

微信批量添加好友,让你的人脉迅速增长

在这个数字化时代&#xff0c;微信作为中国最流行的社交平台之一&#xff0c;已经成为了人们生活中不可或缺的一部分。它的广泛使用为我们提供了无限的社交可能性。你是否曾为了扩大人脉圈子而犯愁&#xff1f;今天&#xff0c;我将向你揭示一个高效添加微信好友的秘密武器&…

Camtasia2024破解版百度云网盘下载

真的要被录屏软件给搞疯了&#xff0c;本来公司说要给新人做个培训视频&#xff0c;想着把视频录屏一下&#xff0c;然后简单的剪辑一下就可以了。可谁知道录屏软件坑这么多&#xff0c;弄来弄去头都秃了&#xff0c;不过在头秃了几天之后&#xff0c;终于让我发现了一个值得“…

居舍系列再续“异国的相遇2023”艺术项目

跨越四城感知艺术声浪&#xff0c;以科技与艺术探索旅行中的情绪共鸣 太古酒店集团旗下居舍系列再度开启两年一度的艺术项目“异国的相遇 2023”&#xff08;Encounters Across Cultures&#xff09;新篇章 — 当艺术与科技同频 &#xff0c;以艺术为媒介&#xff0c;将科技赋予…

16 用于NOMA IoT网络上行链路安全速率最大化的HAP和UAV协作框架

文章目录 摘要相关模型仿真实验仿真结果 摘要 优化无人机到HAP的信道分配、用户功率和无人机三维位置来研究上行安全传输解决非凸问题&#xff0c;采用K-means聚类算法&#xff0c;将成对的用户划分成不同的组&#xff0c;每个簇可以有相应的无人机服务&#xff0c;然后将构造…

NAT技术与代理服务器

目录 一、NAT与NAPT技术 1.NAT技术 2.NAPT技术 &#xff08;1&#xff09;四元组的唯一性 &#xff08;2&#xff09;数据的传输过程 &#xff08;3&#xff09;NAPT的缺陷 二、代理服务器 1.正向代理和反向代理 2.代理服务器的应用 &#xff08;1&#xff09;游戏加…

16、Python --案例实操:控制台打印【 菱形 】和 【 圆 】

目录 控制台打印菱形控制台打印圆 控制台打印菱形 # 控制台打印菱形# 层数 num 8 # 打印上半部分 for i in range(num):# 第一行if i 0:print( * (num - 1 - i) *)else:print( * (num - 1 - i) * (i * 2 - 1) * *)# 打印下半部分 for i in range(num - 1):if i num …

Qt重定向QDebug,Qt/C++开源作品39-日志输出增强版V2022

Qt重定向QDebug&#xff0c;自定义一个简易的日志管理类 Chapter1 Qt重定向QDebug&#xff0c;自定义一个简易的日志管理类0.前言1.最简单的操作运行结果2.实现一个简易的日志管理类 Chapter2 Qt::Qt Log日志模块Qt Log日志模块官方解释官方Demo思路 Chapter3 QT日志模块的个性…

Vue3 创建项目

1 桌面打开 CMD窗口&#xff0c;使用vue create 项目名创建项目。 2 选择Manually select features 自定义配置 3 选择配置&#xff1a;使用空格确认/取消&#xff0c;回车确定&#xff1a; Babel 降级处理 CSS Pre-processors CSS预处理器 Linter/Formatter 代码检查 4 选择vu…

「滚雪球学Java」:基础程序设计(章节汇总)

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

Vue3:将表格数据下载为excel文件

需求 将表格数据或者其他形式的数据下载为excel文件 技术栈 Vue3、ElementPlus、 实现 1、安装相关的库 下载xlsx 和 file-saver 库 npm install -S file-saver npm install -S xlsx引入XLSX库和FileSaver库 import XLSX from xlsx; import FileSaver from file-saver;…

华为OD机考算法题:高效的任务规划

题目部分 题目高效的任务规划难度难题目说明 你有 n 台机器编号为 1 ~ n&#xff0c;每台都需要完成一项工作&#xff0c; 机器经过配置后都能独立完成一项工作。 假设第 i 台机器你需要花 分钟进行设置&#xff0c; 然后开始运行&#xff0c; 分钟后完成任务。 现在&#x…

虹科培训 | 虹科携手PLCopen开展IEC 61131-3国际工程师培训

文章来源&#xff1a;虹科工业控制 阅读原文&#xff1a;https://mp.weixin.qq.com/s/MLYhBWiWx7qQSApx_3xhmA &#xff08;一&#xff09;课程背景 什么是IEC 61131-3&#xff1f; IEC 61131-3 是工业自动化行业唯一得到大量应用的组态编程语言国际标准&#xff1b;主导制定…

安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)

技术背景 实时位置&#xff08;MobilePosition&#xff09;订阅和上报&#xff0c;对GB28281设备接入终端尤其重要&#xff0c;如移动单兵设备、执法记录仪、智能安全帽、车载终端等&#xff0c;Android国标接入设备通过获取到实时经纬度信息&#xff0c;按照一定的间隔上报到…

引入二维码技术,易点易动全员盘点方案助力高效海量资产盘点

固定资产是企业重要的财务资源之一&#xff0c;而高效准确地进行海量固定资产盘点一直是企业管理的重要挑战。为了解决盘点过程中的繁琐和错误问题&#xff0c;易点易动固定资产管理系统引入了先进的二维码技术&#xff0c;并采用全员盘点方案。本文将详细介绍易点易动固定资产…

单目3D目标检测[基于深度辅助篇]

基于深度辅助的方法 1. Pseudo-LiDAR Pseudo-LiDAR from Visual Depth Estimation: Bridging the Gap in 3D Object Detection for Autonomous Driving康奈尔大学https://zhuanlan.zhihu.com/p/52803631 首先利用DRON或PSMNET从单目 (Monocular)或双目 (Stereo)图像获取对应的…

海外公司注册推广的9个实用技巧建议-华媒舍

在全球化的时代背景下&#xff0c;海外市场的开发对于企业来说是非常重要的战略决策。海外公司注册是进入海外市场的第一步&#xff0c;通过注册在海外的公司&#xff0c;企业可以获得更多的商业机会和巨大的价值。本篇文章将为您介绍海外公司注册推广的9个实用建议&#xff0c…

干洗店预约下单管理系统收衣开单拍照必备软件

随着生活水平的提高和节奏的加快&#xff0c;商务人士的衣物越来越多&#xff0c;但精力和时间却越来越少。于是&#xff0c;干洗店应运而生&#xff0c;在中国&#xff0c;几乎所有的中心城市干洗店都门庭若市。若每人每月需要干洗一套服装&#xff0c;一个城市每月则需干洗50…

Postgresql在jdbc处理bit字段的解决方案

问题&#xff1a; bit如果长度为1&#xff0c;则会默认为布尔型&#xff08;1-true 0-false&#xff09;&#xff1b; bit如果长度大于1&#xff0c;则会默认为bit类型&#xff0c;但是代码中以前常用的两种set方式&#xff0c;会报错 第一种方式&#xff1a; ps.setObject(i1,…