微服务如何做好监控

大家好,我是苍何。

在脉脉上看到这条帖子,说阿里 P8 因为上面 P9 斗争失败走人,以超龄 35 被裁,Boss 上找工作半年,到现在还处于失业中。

脉脉上截图

看了下沟通记录, 沟通了 1000 多次,但没有一个邀请投递简历的,大受震撼。因为早年在阿里待过,所以对阿里 P8 这个 title 的含金量还是知道的,先不说是很高 P,但能升到 P8 这个段位的,多少还是有点能力的。

当然了无论是做 PPT 的能力还是处理问题的能力,最起码都属于一种区别于普通人的能力嘛。按理说这个级别出来工作应该是随便找,不至于找半年没找到一份工作。

于是有网友认为,有点儿扯,说到了 P8 这个级别不应该会因为上级的派系斗争被搞走,而且对其艰难找工作不大相信。

网友说P8找不到工作有点扯

但也有人从这件事上分析原因觉得,因为这个 P8 处于 35 岁年龄高危人群,是个传话筒,薪酬高,竞争力有待考证。

有人说P8处于高危人群

抛去别的不说,我觉得不至于没有一个公司给他发简历投递邀请,但这件事我觉得从侧面反映出一个问题,那就是以前互联网那套玩法行不通了,即使在大厂,该被裁还是得被裁,出来后,能接住这么高的工资的公司除了另外一个大厂基本没有,小公司和国企是很难给到他们原先在大厂工资的。

我跟很多大厂的朋友经常聊天,谈起裁员这个话题,虽说他们对现在的环境愤愤不平,但又无能为力。但我经常和他们分享我自己的观点:不管在哪儿,一定要有自己的一点小生意

在大厂可能负责的是一个大平台里面的一小处螺丝,然后就自以为创造了很多的价值,加班加点的 coding,最后甚至连平台到底吸引什么样的用户?市场在哪里?ARR 表现如何?实际带来什么样的价值都没搞明白就稀里糊涂的被裁了。

建立自己的小生意,业余时间做一点点小而美的事情,不仅仅限于 coding,从市场、营销、产品等多角度来思考这个小生意创造的价值。

我也一直在践行这个理念,包括最近业余时间投身的开源项目,也是属于小而美的事情。而且我也会持续做这方面的分享,build in public,一起成长。

今天分享的是微服务改造过程中,监控中心的搭建要领和流程。

什么是服务监控

服务监控概念

在说概念前,其实可以借助一下生活中的一个例子来理解:

想象你是一位餐馆经理。你的餐馆里有很多员工在不同岗位工作:厨师在做饭,服务员在端菜,收银员在结账。如果你想让餐馆顺利运营,你需要知道每个员工的工作状态。如果某个岗位出现问题,比如厨师突然生病了,你需要及时知道并做出调整,以确保餐馆正常运作,不会影响顾客体验。

服务监控示例图

服务监控就像是餐馆经理对员工工作状态的监视。它包括以下几个方面:

  1. 系统应用状态: 就像经理需要知道每个员工在做什么,服务监控需要知道每个系统应用在做什么,是否正常运行。
  2. 内存和线程: 就像餐馆需要确保有足够的食材和员工,系统也需要足够的内存和线程来处理任务。监控这些可以确保系统不会因为资源不足而崩溃。
  3. 堆栈: 就像经理需要知道每道菜的制作流程,监控堆栈信息可以帮助了解程序的执行流程,找出哪里出了问题。
  4. 日志: 就像经理需要记录每天的销售和反馈,系统日志记录了所有的操作和错误信息,方便追踪和排查问题。

服务监控的主要目的是在问题发生或即将发生时,能准确快速地发现问题,从而减小影响范围。就像餐馆经理能及时发现并处理员工的问题,以避免影响整个餐馆的运营。

服务监控在微服务改造过程中的重要性不言而喻,没有强大的监控能力,改造成微服务架构后,就无法掌控各个不同服务的情况,在遇到调用失败时,如果不能快速发现系统的问题,对于业务来说就是一场灾难。

服务常用技术栈

1、Spring Boot Actuator

Spring Boot Actuator 提供了一系列内置的端点,用于监控和管理 Spring Boot 应用程序。它可以暴露健康检查、应用信息、环境变量、JVM 指标、HTTP 请求追踪等。

适用于使用 Spring Boot 构建的微服务应用,集成简单,功能强大。

以下是一些常见端点:

地址描述
/beans显示所有的Spring bean列表
/caches显示所有的缓存相关信息
/scheduledtasks显示所有的定时任务相关信息
/loggers显示所有的日志相关信息
/configprops显示所有的配置信息
/env显示所有的环境变量信息
/mappings显示所有控制器相关信息
/info显示自定义用户信息配置
/metrics显示应用指标相关信息
/health显示健康检查状态信息,up表示成功 down表示失败
/threaddump显示程序线程的信息

2、Micrometer

Micrometer 是一个用于 JVM 应用程序的应用指标度量库。它提供与多种监控系统的集成,如 Prometheus、Graphite、JMX、New Relic、Datadog 等。需要在 Spring Boot 之外的 JVM 应用中进行指标监控,或者需要集成到多种监控系统中。优势是其有统一的 API,便于扩展和集成。

3、Dropwizard Metrics

Dropwizard Metrics 提供了一组用于度量 JVM 应用程序性能的工具,包括计数器、计时器、仪表等。它可以与多种后端系统集成,如 Graphite、Ganglia、Prometheus 等。需要在非 Spring Boot 应用中实现详细的性能度量。优势:轻量级,易于集成,功能全面。

如何做好监控

我本次使用的是利用 Spring Boot Actuator 配合 Admin-Ui,整合 Nacos,来做的各个微服务的系统监控。以下是具体的步骤:

新建监控中心微服务

监控中心一定是单独部署的一个微服务,不要和其他微服务做藕和,其中建微服务系统其实就是 4 步:

  • 建 Module
  • 改 pom
  • 加 yml
  • 启动类启动

在 idea 中右键项目新建 Module 命名 monitor,建监控中心微服务:

监控中心 Module

一个微服务就建好了,接下来需要添加必要的依赖和配置。

添加依赖

因为需要整合 Nacos,以及配合 web ui 和登录认证,故引入以下 jar:

<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><!-- Spring Cloud Config Client,用于配置的动态刷新 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency><!-- SpringCloud Alibaba Sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!-- SpringBoot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Security --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency></dependencies>

添加配置

配置有独立服务配置和 Nacos 共享配置以及微服务 Nacos 配置,三份配置共同作用于微服务系统,其中优先级顺序是Nacos 共享配置>微服务 Nacos 配置>独立服务配置

对于每个微服务都需要的配置放在共享配置中,本次这部分不做改动,另外是微服务的 Nacos 配置和本地配置如下:

本地配置:bootstrap.yml

# Tomcat
server:port: 端口# Spring
spring: application:# 应用名称name: monitorprofiles:# 环境配置active: devcloud:nacos:discovery:# 服务注册地址server-addr: 127.0.0.1:端口config:# 配置中心地址server-addr: 127.0.0.1:端口# 配置文件格式file-extension: yml# 共享配置shared-configs:- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

Nacos 配置:monitor-dev.yml

# spring
spring:security:user:name: web页面中的用户名password: 密码boot:admin:ui:title: 服务状态监控

通过以上步骤直接访问微服务地址即可直接访问,这里监控中心的微服务没有直接走网关,而是直接暴露出来,因为其内部自己做了鉴权处理,就不走网关通用鉴权了。

监控有用功能

web ui 页面

在 UI 页面上可以清晰的看出服务系统的情况,方便直观,而且耦合性比较低。以下是我项目的监控情况:

服务监控应用墙

点进去每一个微服务可看到具体监控信息:

单个微服务监控详情

登录认证

配合 admin,加上 Spring security 权限控制,我们只需要按照步骤配置一下账户和密码即可。权限配置类:

/*** 监控权限配置* * @author ruoyi*/
@EnableWebSecurity
public class WebSecurityConfigurer
{private final String adminContextPath;public WebSecurityConfigurer(AdminServerProperties adminServerProperties){this.adminContextPath = adminServerProperties.getContextPath();}@Beanpublic 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();}
}

这样,每次登录 UI 页面就需要进行账号密码登录鉴权,其走的不是网关统一鉴权所以需要单独配置。

实时日志

Spring Boot Admin提供了基于Web页面的方式实时查看服务输出的本地日志,前提是服务中配置了logging.file.name。

需要在单个微服务的 bootstrap.yml配置logging.file.name配置:

logging:file:name: logs/${spring.application.name}/info.log

实时日志查询

对于单独差某个微服务信息来说,实时日志还是挺方便的。

监控通知

当微服务监控检查没通过,或者服务上线、离线或者服务发生未知异常,希望发送通知到制定的人,就可以直接通过如下配置即可:

/*** @author canghe* @description 通知发送配置* @create 2024-05-16-17:32*/
@Component
public class PmHubStatusChangeNotifier extends AbstractStatusChangeNotifier {public PmHubStatusChangeNotifier(InstanceRepository repository) {super(repository);}@Overrideprotected Mono<Void> doNotify(InstanceEvent event,de.codecentric.boot.admin.server.domain.entities.Instance instance) {return Mono.fromRunnable(() -> {if (event instanceof InstanceStatusChangedEvent) {String status = ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus();switch (status) {// 健康检查没通过case "DOWN":System.out.println("发送 健康检查没通过 的通知!");break;// 服务离线case "OFFLINE":System.out.println("发送 服务离线 的通知!");break;// 服务上线case "UP":System.out.println("发送 服务上线 的通知!");break;// 服务未知异常case "UNKNOWN":System.out.println("发送 服务未知异常 的通知!");break;default:break;}}});}
}

通过以上步骤,微服务系统中的服务监控就简单集成了,对于监控中的业务逻辑,比如通知消息等就可以自己去实现他。

以上是今天的分享,感谢您的阅读!

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

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

相关文章

基于深度学习的表情识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着人工智能技术的快速发展&#xff0c;表情识别成为了人机交互领域的一个研究热点。表情识别技术旨…

【四、性能测试】Linux stress 压力模拟测试工具

在做 CPU 问题解析之前&#xff0c;需要先了解一下压力模拟工具&#xff0c;可以将 CPU、MEM、IO 等进行压力模拟&#xff0c;可以在模拟压力的过程中进行问题解析 一、STRESS 模拟对CPU、Memory、IO、磁盘进行压力测试。可以使用 stress 工具&#xff0c;它是专门针对 linux…

如何将Docker容器打包并在其他服务器上运行

如何将Docker容器打包并在其他服务器上运行 我会幻想很多次我们的相遇&#xff0c;你穿着合身的T恤&#xff0c;一个素色的外套&#xff0c;搭配一条蓝色的牛仔裤&#xff0c;干净的像那天空中的云朵&#xff0c;而我&#xff0c;还是一个的傻傻的少年&#xff0c;我们相识而笑…

【无标题】(网络原理(中)TCP机制)

网络原理&#xff08;中&#xff09;TCP机制 拥塞控制延迟应答&#xff08;效率机制&#xff09;TCP协议段格式&#xff1a;滑动窗口&#xff08;效率机制&#xff09;流量控制 拥塞控制 TCP拥塞控制这样的过程&#xff0c;就好像 热恋的感觉&#xff0c;指数增长的过程就是热恋…

2024-5-23 石群电路-14

2024-5-23&#xff0c;星期四&#xff0c;22:20&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。今天没有什么重要的事情发生&#xff0c;心情一如既往的平静&#xff0c;距离返校假期还有两天~~~。 今天观看了石群老师电路基础课程的第23/24个视频&#xff0…

适用于Windows 电脑的最佳视频恢复软件和方法

毫无疑问&#xff0c;丢失您的基本数据总是有压力的&#xff0c;尤其是当这些是您为捕捉最美好回忆而收集的重要视频文件时。要恢复丢失或损坏的视频文件&#xff0c;您可以借助视频恢复工具。但是&#xff0c;在选择最佳视频恢复工具时&#xff0c;您必须考虑多个扫描选项&…

AWS容器之Amazon ECS

Amazon Elastic Container Service&#xff08;Amazon ECS&#xff09;是亚马逊提供的一种完全托管的容器编排服务&#xff0c;用于在云中运行、扩展和管理Docker容器化的应用程序。可以理解为Docker在云中对应的服务就是ECS。

【运维心得】双WAN配置的一个误区

目录 双WAN配置及优势 实际案例 解决之道 最后总结 双WAN配置及优势 什么是双WAN配置&#xff0c;这里就不多赘述&#xff0c;简单的说&#xff0c;首先你要有一台支持双WAN口的路由器&#xff0c;目前大多数企业级路由器都具备了这个功能。甚至有些家用路由器也有此类功能…

Vue02-黑马程序员学习笔记

一、今日学习目标 1.指令补充 指令修饰符v-bind对样式增强的操作v-model应用于其他表单元素 2.computed计算属性 基础语法计算属性vs方法计算属性的完整写法成绩案例 3.watch侦听器 基础写法完整写法 4.综合案例 &#xff08;演示&#xff09; 渲染 / 删除 / 修改数量 …

「YashanDB迁移体验官」Mysql生产环境迁移至YashanDB数据库深度体验

「YashanDB迁移体验官」Mysql生产环境迁移至YashanDB数据库深度体验 1. 前言1.1 产品介绍1.2 产品架构1.3 产品规格1.3.1 数据库版本支持1.3.2 数据类型支持 2. YMP安装2.1 环境说明2.2 执行安装2.3 访问YMP2.3.1 YMP登录界面2.3.2 YMP迁移流程 3. YMP数据迁移3.1 创建数据源3.…

5.23小结

1.java项目创新 目前想添加一个自动回复的功能和设置验证方式有&#xff08;允许任何人添加&#xff0c;禁止添加&#xff0c;设置回答问题添加&#xff0c;普通验证添加&#xff09; 目前只完成画好前端界面&#xff0c;前端发送请求&#xff0c;还有表的修改 因为涉及表字…

Shell编程之条件判断语句

目录 一、条件判断 1、test命令 2、文件测试 3、整数值比较 4、字符串判断 5、逻辑测试 二、if语句 1、if单分支语句 2、双分支语句 3、多分之语句 4、case 分支语句 一、条件判断 Shell环境根据命令执行后的返回状态值&#xff08;echo $?&#xff09;来判断是否执行成…

简析网络风险量化的价值与应用实践,如何构建网络风险预防架构

网络风险量化能够让公司董事会和高管层看清当前的网络安全风险格局&#xff1b;它还将使安全团队能够在业务需求的背景下做出网络安全决策&#xff0c;帮助组织确定哪些风险对业务构成最大的威胁&#xff0c;以及预期的经济损失将是什么。 随着网络攻击手段的日益多样化和复杂…

学硕都考11408的211院校!河北工业大学计算机考研考情分析!

河北工业大学&#xff08;Hebei University of Technology&#xff09;&#xff0c;简称河北工大&#xff0c;坐落于天津市&#xff0c;由河北省人民政府、天津市人民政府与中华人民共和国教育部共建&#xff0c; 隶属于河北省&#xff0c;是国家“双一流”建设高校、国家“211…

jenkins自动化部署详解

一、准备相关软件 整个自动化部署的过程就是从git仓库拉取最新代码&#xff0c;然后使用maven进行构建代码&#xff0c;构建包构建好了之后&#xff0c;通过ssh发送到发布服务的linux服务器的目录&#xff0c;最后在此服务器上执行相关的linux命令进行发布。 此篇文章jenkins…

Default Folder X for Mac v6.0.7激活版:高效、智能的文件管理新选择

在快节奏的工作与生活中&#xff0c;高效管理文件已成为每个Mac用户的迫切需求。Default Folder X for Mac正是为了满足这一需求而生&#xff0c;它以其卓越的性能和丰富的功能&#xff0c;为Mac用户带来了前所未有的文件管理体验。 Default Folder X for Mac拥有直观易用的界面…

数据链路层简单介绍

mac地址&#xff08;物理地址&#xff09; mac地址和ip地址&#xff0c;目的都是为了区分网络上的不同设备的&#xff0c;在最开始的时候&#xff0c;mac地址和ip地址是两伙人&#xff0c;独立各自提出的&#xff0c;ip地址是4个字节&#xff08;早都不够用了&#xff09;&…

BOM..

区别&#xff1a;

【vue-3】动态属性绑定v-bind

1、文本动态绑定&#xff1a; <input type"text" v-bind:value"web.url"> 简写&#xff1a; <input type"text" :value"web.url"> 2、文字样式动态绑定 <b :class"{textColor:web.fontStatus}">vue学…

ICRA 2024: NVIDIA 联合多伦多大学、加州大学伯克利分校、苏黎世联邦理工学院等研究人员开发了精细操作的手术机器人

英伟达&#xff08;NVIDIA&#xff09;正与学术研究人员合作&#xff0c;研究手术机器人。 NVIDIA 联合多伦多大学、加州大学伯克利分校、苏黎世联邦理工学院和佐治亚理工学院的研究人员开发了 ORBIT-Surgical&#xff0c;一个训练机器人的模拟框架&#xff0c;可以提高手术团…