Spring Cloud微服务Actuator和Vue

目录

  • 前言
  • 一、引入Actuator依赖
  • 二、暴露Actuator端点
      • 1. 配置文件
      • 2. 监控端点
  • 三、自定义健康检查
      • 自定义健康检查类
  • 四、vue前端代码
  • 五、监控器的优势
  • 六、监控指标的可视化
      • 1. Grafana
      • 2. Prometheus
  • 七、安全性考虑
      • 安全配置示例
  • 八、总结

前言

随着微服务架构的流行,对系统运行状况的监控和管理变得至关重要。Spring Cloud提供了强大的监控工具Actuator,能够实时监控服务的运行状态、性能指标和健康状况。本文将介绍如何使用Spring Cloud的Actuator来实现微服务的监控。


一、引入Actuator依赖

首先,我们需要在项目中引入Spring Boot Actuator的依赖。

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

这样做会自动添加Actuator相关的端点,我们可以通过这些端点来获取系统的运行信息。


二、暴露Actuator端点

默认情况下,Actuator的端点是不对外暴露的,为了方便监控,我们需要手动配置来暴露这些端点。

1. 配置文件

yamlCopy codemanagement:endpoints:web:exposure:include: "*" # 暴露所有端点base-path: /monitor # 设置端点的根路径endpoint:health:show-details: always # 显示健康检查的详细信息shutdown:enabled: true # 启用关闭应用的端点

在上述配置中,我们通过 management.endpoints.web.exposure.include 指定了要暴露的端点,这里设置为 * 表示暴露所有端点。同时,我们将端点的根路径设置为 /monitor,方便统一管理。

2. 监控端点

Spring Boot Actuator提供了许多端点,包括 /health/info/metrics 等。这些端点可以提供关于应用程序运行状况的信息。

例如,访问 /monitor/health 端点可以获取应用程序的健康状况信息。


三、自定义健康检查

有时候,我们需要根据业务需求自定义健康检查逻辑。Spring Boot Actuator允许我们通过实现 HealthIndicator 接口来自定义健康检查。

自定义健康检查类

package cn.weizi.main.endpoint;import cn.weizi.main.pojo.R;
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.atomic.AtomicLong;@Service
@CrossOrigin
@RestController
@RequestMapping("/Custom")
public class CustomHealthIndicator extends AbstractHealthIndicator {private final AtomicLong lastRequestTime = new AtomicLong(System.currentTimeMillis());@Overrideprotected void doHealthCheck(Health.Builder builder) {long currentTime = System.currentTimeMillis();long timeSinceLastRequest = currentTime - lastRequestTime.get();try {if (timeSinceLastRequest <= 10000) {builder.up();} else {builder.down().withDetail("error", "10秒内没有请求");}} catch (Exception ex) {builder.down().withException(ex);}}@GetMapping("check")private R check() {// 处理实际的请求逻辑lastRequestTime.set(System.currentTimeMillis());// 这里可以放置其他处理逻辑return new R(true, "UP");}
}

在上述示例中,我们实现了一个自定义的健康检查类 CustomHealthIndicator,通过继承 AbstractHealthIndicator 并实现 doHealthCheck 方法来自定义健康检查逻辑。在这里,我们检查了最后一次请求的时间,如果超过10秒没有请求,将会返回一个健康状态为 DOWN 的信息。


四、vue前端代码

<template><div><van-notice-bar left-icon="volume-o" text="为了减少系统占用,此页面每5秒刷新一次,如果不想等待,可以下拉刷新"/><div v-if="loadingShow"><van-overlay :show="loadingShow"><div @click.stop><van-loading size="50px">加载中...</van-loading></div></van-overlay></div><div v-else><van-cell-group><van-cellv-for="(component, componentName) in data.components":key="componentName":title="componentName":label="getStatusTag(component.status)":value="component.status === 'DOWN' ? '查看异常' : '运行正常'"@click="handleCellClick(component)"/></van-cell-group><van-dialog v-model="dialogVisible" title="异常" theme="round-button"><p class="error-message">{{ currentComponentError }}</p></van-dialog></div></div>
</template><script>import request from "@/unilts/request";
import redirectToHome from "@/unilts/redirectToHome";export default {components: {},data() {return {dialogVisible: false,currentComponentError: '',loadingShow: false,data: {status: 'UP',components: {EVS: {status: 'UP',details: {error: 'null',},},},},};},created() {this.onDataInit();// 初始加载数据this.timer = setInterval(() => {this.onDataInit(); // 每隔一定时间重新加载数据}, 5000); // 5秒一次,可以根据需求调整时间间隔},destroyed() {clearInterval(this.timer); // 清除定时器,防止内存泄漏},methods: {async onDataInit() {this.loadingShow = true;await request.get("/SystemState/health").then((res) => {console.log(res.data)if (res.data.flag) {this.data = res.data.data;} else {this.data = res.data.data;}}).finally(() => {this.loadingShow = false;})},getStatusTag(status) {if (status === 'UP') {return <van-tag type="success">正常</van-tag>;} else {return <van-tag type="danger">异常</van-tag>;}},handleCellClick(component) {this.currentComponentError = '';if (component.status === 'DOWN') {this.currentComponentError = component.details.error;this.dialogVisible = true;}},},
};
</script>
<style>
.error-message {white-space: pre-line;word-wrap: break-word;max-width: 30ch; /* 可根据需要调整最大宽度 */margin: auto; /* 添加居中的样式 */text-align: center; /* 文本水平居中 */
}
</style>

五、监控器的优势

  1. 实时监控:Actuator提供了丰富的端点,能够实时监控系统的运行状况、性能指标和健康状况,帮助开发人员及时发现并解决问题。
  2. 可配置性:通过配置文件,我们可以灵活地控制哪些端点需要暴露,从而保证系统的安全性和稳定性。
  3. 自定义扩展:Actuator允许开发人员自定义健康检查逻辑,根据具体业务需求进行监控和管理,使得监控更加灵活和定制化。

六、监控指标的可视化

除了通过端点获取监控信息外,我们还可以将监控指标可视化,以便更直观地了解系统的运行状况。常见的可视化工具包括Grafana和Prometheus等。

1. Grafana

Grafana是一款开源的数据可视化工具,支持多种数据源,并提供丰富的图表和仪表盘功能。我们可以通过将Actuator的监控数据导入到Grafana中,实现监控指标的可视化展示。

2. Prometheus

Prometheus是一款开源的监控系统,可以实时收集并存储时间序列数据,支持多维度的查询和告警功能。我们可以将Actuator暴露的监控端点数据导入到Prometheus中,从而实现监控指标的存储和分析。

通过与Grafana或Prometheus等工具的集成,我们可以更直观地了解系统的运行情况,并及时采取措施应对潜在的问题,保证系统的稳定性和可靠性。


七、安全性考虑

在暴露Actuator端点时,我们需要考虑系统的安全性。默认情况下,Actuator的端点是不对外暴露的,我们需要手动配置来暴露这些端点,并且可以通过配置用户名和密码来保护这些端点。

安全配置示例

yamlCopy codespring:security:user:name: adminpassword: password
management:endpoints:web:exposure:include: "*"endpoint:health:show-details: alwaysshutdown:enabled: true

在上述配置中,我们通过 spring.security.user 配置了用户名和密码,用于保护Actuator端点。只有提供了正确的用户名和密码才能访问这些端点,从而确保系统的安全性。


八、总结

本文介绍了如何使用Spring Cloud的Actuator来实现微服务的监控,并介绍了监控指标的可视化、安全性考虑和监控告警机制等相关内容。Actuator作为微服务架构中不可或缺的监控工具,为开发人员提供了实时监控系统运行状况的便利,并帮助他们及时发现并解决问题,保证系统的稳定性和可靠性。

通过合理配置和使用Actuator,我们可以更好地管理和监控微服务,提高系统的可维护性和可靠性,为用户提供更好的服务体验。

在本文中,我们深入探讨了Actuator的配置和使用,以及与其他监控工具的集成,希望能够对读者在微服务监控领域的实践提供一些参考和帮助。 Actuator的强大功能和灵活性为微服务的监控和管理提供了便利,是现代软件开发中不可或缺的重要组件。

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

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

相关文章

官宣|阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会

摘要&#xff1a;本文整理自阿里云开源大数据平台徐榜江 (雪尽)&#xff0c;关于阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会&#xff0c;内容主要分为以下四部分&#xff1a; 1、Flink CDC 新仓库&#xff0c;新流程 2、Flink CDC 新定位&#xff0c;新玩法 3、Flin…

【嵌入式硬件】步进电机

1.步进电机简介 1.1步进电机基本原理 步进电机的英文是stepping motor。step的中文意思是行走、迈步。所以仅从字面上我们就可以得知,步进电机就是一步一步移动的电动机。说的官方一点儿,步进电机是一种将电脉冲信号转换成相应角位移或者线位移的电动机(直线电机)。下图为…

设计模式(十二):中介者模式(行为型模式)

Mediator&#xff0c;中介者模式&#xff1a;用一个中介对象封装一些列的对象交互。属于行为型模式 Facade&#xff0c;外观模式&#xff1a;为子系统中的一组接口提供一致的界面&#xff0c;facade 提供了一高层接口&#xff0c;这个接口使得子系统更容易使用。属于结构型模式…

灵境矩阵平台x百度---智能体(一)

什么是数据插件 大模型插件:大语言模型插件是随着大语言模型发展而诞生的全新插件。大语言模型插件的核心是Web API独立于大语言模型&#xff0c;插件开发过程不受大语言模型的约束&#xff0c;同时没有开发语言的限制&#xff0c;更加通用&#xff0c;只要WebAPI遵循RESTfuI相…

html5cssjs代码 034 自定义字体

html5&css&js代码 034 自定义字体 一、代码二、解释 这是一个带有自定义字体的网页&#xff0c;设置了页面背景颜色、文字颜色以及全局样式。它定义了三种自定义字体并通过font-face规则引入外部字体文件&#xff0c;并通过CSS类&#xff08;.f1, .f2, .f3&#xff09;…

Oracle AI Vector Search 支持使用 SQL 生成向量和计算向量相似度

Oracle AI Vector Search 支持使用 SQL 生成向量和计算向量相似度 0. 事情准备1. 使用 SQL 生成向量数据2. 使用 SQL 计算欧氏距离(Euclidean distance)3. 使用 SQL 计算余弦相似度(Cosine similarity)4. 使用 SQL 计算点积相似度 (Dot Product Similarity)5. 使用 SQL 计算曼哈…

第十二届蓝桥杯省赛CC++ 研究生组-路径

记录到每个结点的最短距离&#xff0c;以此为基础计算后续结点最优值 #include<iostream> #include<algorithm> using namespace std; typedef long long ll;ll gcd(int a, int b){if(!b) return a;return gcd(b, a % b); }int main(){ll dp[2022] {0};//dp[i]记…

如何打破SAST代码审计工具的局限性?

关键词&#xff1a;白盒测试&#xff1b;代码分析工具&#xff1b;代码扫描工具&#xff1b;静态代码检测工具&#xff1b; 在代码的世界里&#xff0c;安全问题如同潜伏的暗礁&#xff0c;随时可能让航行中的软件项目触礁沉没。SAST代码审计工具如同雷达一样&#xff0c;以其独…

inputStream.avaliable()方法网络操作读取不全BUG

一、问题描述 公司有个需求&#xff0c;就是调用方&#xff08;我&#xff09;需要把pdf文件转为Base64字符串作为参数传递为被调用方&#xff0c;以下是大致转换过程&#xff1a; URL url new URL("http://xxxx.pdf");HttpURLConnection uc (HttpURLConnection) …

docker入门(十)—— docker-compose详解

Docker Compose dockercompose官网&#xff1a;https://docs.docker.com/compose/ 什么是 docker compose Docker Compose 是用于定义和运行多容器应用程序的工具。 这是解锁简化和高效的开发和部署体验的关键。 Compose 简化了对整个应用程序堆栈的控制&#xff0c;让您能…

html js css如何使循环混播放视频时视频切换很平滑的过渡

1.html代码 <video id"video1" autoplay loop muted playsinline><source src"video1.mp4" type"video/mp4"> </video> <video id"video2" autoplay loop muted playsinline><source src"video2.mp4…

Chrome 114 带着侧边栏扩展来了

效果展示 manifest.json {"manifest_version": 3,"name": "ChatGPT学习","version": "0.0.2","description": "ChatGPT,GPT-4,Claude3,Midjourney,Stable Diffusion,AI,人工智能,AI","icons"…

全量知识系统 控制器-神经网络设计(设想及百度AI回复)

---备忘&#xff1a;权值、阈值和极值 在神经元的计算中&#xff0c;包括三种计算值&#xff1a;权值、阈值和极值。分别是为全量知识系统设计的三级神经网络中神经元不同层级的计算任务。其中权值 是全连接的性质&#xff0c;阈值是池化的性质&#xff0c;极值是卷积的性质。…

cocos 3.8开发 微信小游戏分包技巧压缩主包

Creator 版本&#xff1a; 3.8.2 目标平台&#xff1a;小游戏开发 压缩后 我不知道别人压缩几百kb是怎么做到的。不过哪个要钱。 我这个技巧不用花钱。 论坛有教程但是没有教详细怎么做。 开整&#xff01; 做一个空白的场景。然后写一个load脚本。load主场景。 从代码可…

数据结构知识总结

二叉树 满二叉树 特性 所有叶子结点都集中在二叉树的最下面一层上&#xff0c;而且结点总数为&#xff1a;2^n-1 (n为层数 / 高度&#xff09; 完全二叉树 特性 若设二叉树的高度为h&#xff0c;除第h层外&#xff0c;其他各层的节点数都达到最大个数&#xff0c;第h层有…

Http中Host,Referer,Origin和Access-Control-Allow-Origin

Http中Host&#xff0c;Referer&#xff0c;Origin和Access-Control-Allow-Origin 文章目录 Http中Host&#xff0c;Referer&#xff0c;Origin和Access-Control-Allow-OriginHost定义特性作用 Referer定义特性作用 Origin定义特性作用 Access-Control-Allow-Origin定义特性作用…

阐述Dubbo协议

1 Dubbo协议概述 Dubbo协议是建立在TCP&#xff08;传输层协议&#xff09;之上的一种应用程序协议。它参考了TCP协议栈中的协议&#xff0c;协议内容由header和body两部分组成。 2 协议头header的组成 协议头组成如下所示。 header格式bit序号0-78-1516-2324-3132-9596-127内…

C语言——指针练习:输出最大值与最小值

题目描述&#xff1a; 输出十个整数中的最大值与最小值。 输入&#xff1a; 十个整数。 输出&#xff1a; 最大值与最小值。 代码如下&#xff1a; #include<stdio.h>int main() {int a[10], i, max, min, *p;p a;for (i 0; i < 10; i)scanf("%d", p…

基于微信小程序的CMS内容管理系统开发笔记

背景调研 内容管理CMS小程序的帮助运营者创建和管理小程序内容&#xff0c;提供一个直观的操作界面&#xff0c;能够轻松地添加、编辑和发布内容&#xff0c;而无需了解复杂的编程知识。可以进行栏目管理&#xff0c;文章管理&#xff0c;编辑文章内容&#xff0c;包括文字、图…

React腳手架已經創建好了,想使用Vite作為開發依賴

使用Vite作為開發依賴 安裝VITE配置VITE配置文件簡單的VITE配置項更改package.json中的scripts在根目錄中添加index.html現在可以瀏覽你的頁面了 安裝VITE 首先&#xff0c;在現有的React項目中安裝VITE npm install vite --save-dev || yarn add vite --dev配置VITE配置文件 …