微服务如何做好监控

大家好,我是苍何。

在脉脉上看到这条帖子,说阿里 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.mzph.cn/diannao/13509.shtml

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

相关文章

uniapp中使用 iconfont字体

下载 iconfont 字体文件 打开 iconfont.css 文件&#xff0c;修改一下 把文件 复制到 static/iconfont/… 目录下 在App.vue中引入iconfont 5. 使用iconfont 使用 iconfont 有两种方式&#xff0c; 一种是 class 方式&#xff0c; 一种是使用 unicode 的方式 5.1 使用 class 的…

【Mac】Dreamweaver 2021 for mac v21.3 Rid中文版安装教程

软件介绍 Dreamweaver是Adobe公司开发的一款专业网页设计与前端开发软件。它集成了所见即所得&#xff08;WYSIWYG&#xff09;编辑器和代码编辑器&#xff0c;可以帮助开发者快速创建和编辑网页。Dreamweaver提供了丰富的功能和工具&#xff0c;包括代码提示、语法高亮、代码…

教你一分钟搭建适合IT人员的在线开发工具箱

文章目录 1. 使用Docker本地部署it-tools2. 本地访问it-tools3. 安装cpolar内网穿透4. 固定it-tools公网地址 本篇文章将介绍如何在Windows上使用Docker本地部署IT- Tools&#xff0c;并且同样可以结合cpolar实现公网访问。 在前一篇文章中我们讲解了如何在Linux中使用Docker搭…

Anaconda Jupyter 报错及解决方法记录

一、AttributeError: module lib has no attribute X509_V_FLAG_CB_ISSUER_CHECK 背景&#xff1a;Anaconda更新版本后&#xff0c;运行import oss2时报错 ~/anaconda3/lib/python3.8/site-packages/OpenSSL/crypto.py in X509StoreFlags() 1535 NOTIFY_POLICY _lib…

【Java基础】集合(1) —— Collection

存储不同类型的对象: Object[] arrnew object[5];数组的长度是固定的, 添加或删除数据比较耗时 集合: Object[] toArray可以存储不同类型的对象随着存储的对象的增加&#xff0c;会自动的扩容集合提供了非常丰富的方法&#xff0c;便于操纵集合相当于容器&#xff0c;可以存储多…

冯喜运:5.16黄金是否突破阻力?黄金原油趋势分析

【黄金消息面分析】&#xff1a;周四(5月16日)亚市盘中&#xff0c;现货黄金延续昨日升势&#xff0c;金价目前最高触及2397.44美元/盎司&#xff0c;为4月19日以来新高。FXStreet首席分析师Valeria Bednarik撰文&#xff0c;对黄金技术前景进行分析。Bednarik指出&#xff0c;…

「51媒体」北京财经媒体有哪些?媒体邀约宣传

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 北京作为中国的首都&#xff0c;拥有众多的财经媒体&#xff0c;这些媒体在财经新闻报道、经济分析、市场研究等方面发挥着重要作用。根据搜索结果&#xff0c;以下是一些北京地区的财经…

CV每日论文--2024.5.15

1、Can Better Text Semantics in Prompt Tuning Improve VLM Generalization? 中文标题&#xff1a;更好的文本语义在提示微调中能否提高视觉语言模型的泛化能力? 简介&#xff1a;这篇论文介绍了一种新的可学习提示调整方法,该方法超越了仅对视觉语言模型进行微调的传统方…

Lazyboy品牌发布会“球幕气膜”

Lazyboy品牌发布会“球幕气膜”为品牌活动提供了一个独特、现代化、环保的展示空间。这座球幕气膜不仅为发布会提供了一个视觉震撼的场地&#xff0c;也为与会嘉宾带来了全新的体验。作为轻空间&#xff08;江苏&#xff09;膜科技有限公司&#xff08;以下简称“轻空间”&…

使用Docker在阿里云ECS上部署Gitlab,提供代码托管、CICD 和 docker镜像服务

文章目录 使用Docker在阿里云ECS上部署Gitlab1.购买一个数据&#xff0c;挂载到/data用于存储gitlab相关数据2. 部署docker引擎3. 调整ssh的默认端口&#xff0c;将22端口留给gitlab4. 部署gitlab5. 进入docker容器获取gitlab的默认密码6. 登录gitlab&#xff0c;完成gitlab-ru…

linux ndk编译搭建测试

一、ndk下载 NDK 下载 | Android NDK | Android Developers 二、ndk环境变量配置 ndk解压&#xff1a; unzip android-ndk-r26d-linux.zip 环境变量配置&#xff1a; export NDK_HOME/rd/own/test/android-ndk-r26d/ export PATH$PATH:$NDK_HOME 三、编译测试验证 …

LeetCode-2589. 完成所有任务的最少时间【栈 贪心 数组 二分查找 排序】

LeetCode-2589. 完成所有任务的最少时间【栈 贪心 数组 二分查找 排序】 题目描述&#xff1a;解题思路一&#xff1a;贪心暴力解题思路二&#xff1a;栈二分查找解题思路三&#xff1a;简化版 题目描述&#xff1a; 你有一台电脑&#xff0c;它可以 同时 运行无数个任务。给你…

mac安装两个版本谷歌浏览器;在mac运行不同版本的chrome浏览器

场景 正常情况下&#xff0c;mac上只能安装一个版本的chrome浏览器&#xff0c;即使你安装了两个版本的&#xff0c;打开老旧版本时候也会自动切换成最新版的浏览器 故本文主要解决如何下载和在mac运行不同版本的chrome浏览器 文章目录 场景一、下载1.mac本身就有一个最新版ch…

Java语言saas模式云HIS系统源码 前端Angular+后台SpringBoot云HIS系统源码 HIS系统适合哪些类型的医院?

Java语言saas模式云HIS系统源码 前端Angular后台SpringBoot云HIS系统源码 HIS系统适合哪些类型的医院&#xff1f; 云HIS系统&#xff08;医院信息系统&#xff09;是对医院及其所属各部门的人、财、物进行综合管理&#xff0c;对在医疗活动各阶段产生的数据进行采集、储存、处…

CCF20181201——小明上学

CCF20181201——小明上学 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int r,y,g,n,k[101],t[101],sum0;cin>>r>>y>>g;cin>>n; for(int i0;i<n;i){cin>>k[i]>>t[i];if(k[i]0||k[i]1)sumt[i];…

ITSM的服务台如何让工作更流畅

在现代企业的信息技术管理框架内&#xff0c;IT服务管理&#xff08;IT Service Management, ITSM&#xff09;体系扮演着至关重要的角色&#xff0c;而其中的服务台则是这一复杂体系的心脏地带。服务台不仅仅是解答技术疑问的一线窗口&#xff0c;更是企业IT运维效率与用户满意…

FENDI CLUB啤酒,为何女生喜欢?

精酿啤酒已经成了女生喜欢的饮品&#xff0c;在日剧《无法成为野兽的我们》里&#xff0c;主人公小晶永远保持标准笑容&#xff0c;完美完成所有的工作。只有一个人的时候&#xff0c;她才会放下习惯性的微笑&#xff0c;显露自己的疲惫。小晶缓解疲惫&#xff0c;就是下班后去…

尽微好物:从0到10亿+的抖音电商的TOP1“联盟团长”,如何使用NineData实现上云下云

杭州尽微供应链是抖⾳平台⽉均带货10E的TOP1“联盟团⻓”&#xff0c;是字节跳动⼀级代理商&#xff0c;巨量千川指定服务商&#xff0c;拥有商品库9万&#xff0c;是⾏业领先的电商供应链平台&#xff0c;达⼈陪跑机构。 杭州尽微供应链以天猫、京东抖音电商业务为依托&#x…

HCIP-Datacom(H12-821)题库补充(5月16日)

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整题库请扫描上方二维码访问&#xff0c;持续更新中。 以下关于配置防火墙安全优先级的描述&#xff0c;错误的是哪一项&#xff1f; A&#xff1a;不新建与默认安全区域同名的安全区域 B&#xff1a;同一系统中&#xff0c…

镊子蜡烛如何设置止盈止损?Anzo Capital昂首资本盈利收场

通过上一篇文章各位聪明的投资者&#xff0c;都已经知道了什么是镊子蜡烛图以及如何抓住反转进行交易&#xff0c;同时也有很多投资者不知道如何设置止盈止损&#xff1f;今天Anzo Capital昂首资本就和各位投资者一起探讨如何盈利收场。 看跌的镊子模式如何交易&#xff1f;首…