微服務如何做好監控

大家好,我是蒼何。

在脈脈上看到這條帖子,說阿里 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.pswp.cn/diannao/13509.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13509.shtml
英文地址,請注明出處:http://en.pswp.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;包括代碼提示、語法高亮、代碼…

51單片機學習(1)2-1點亮一個LED

#include <REGX52.H> void() { p20xFE;//1111 1110 while(1) { //讓程序停了下來了。 } }

教你一分鐘搭建適合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;可以存儲多…

探索Git之旅:倉庫代碼版本控制藝術

探索Git之旅&#xff1a;倉庫代碼版本控制藝術 引言Git基礎與核心概念什么是版本控制&#xff1f;Git的工作流程分布式特性 Git實戰操作指南安裝與配置克隆倉庫日常操作分支管理解決沖突 高級技巧與最佳實踐Git FlowGit鉤子Git別名 安全與性能考量結語與引發討論 引言 在軟件開…

馮喜運: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;以下是一些北京地區的財經…

富格林:曝光虛假套路規避虧損

富格林指出&#xff0c;在現貨黃金市場中&#xff0c;交易時間很充足投資機會也多的是&#xff0c;但為什么還是有人虧損甚至爆倉呢&#xff1f;其實導致這種情況&#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 三、編譯測試驗證 …

虛函數應用和原理

虛函數的表現形式 用子類初始化父類指針, 調用虛函數時, 仍然調用的是子類的虛函數 測試代碼如下 #include <iostream> #include <string.h>using namespace std;class A { public:void test() { cout << a << endl; };virtual void test2 (){ cout …

LeetCode-2589. 完成所有任務的最少時間【棧 貪心 數組 二分查找 排序】

LeetCode-2589. 完成所有任務的最少時間【棧 貪心 數組 二分查找 排序】 題目描述&#xff1a;解題思路一&#xff1a;貪心暴力解題思路二&#xff1a;棧二分查找解題思路三&#xff1a;簡化版 題目描述&#xff1a; 你有一臺電腦&#xff0c;它可以 同時 運行無數個任務。給你…

解鎖電商數據之門:京東商品詳情API接口的深度解析與應用指南

一、京東商品詳情API簡介 京東商品詳情API是京東開放平臺提供的一項服務&#xff0c;允許第三方應用通過調用接口獲取京東商城中商品的詳細信息。這些信息包括但不限于商品名稱、價格、庫存、詳情描述、用戶評價等。 二、功能特點 數據全面&#xff1a;提供商品的全方位數據…

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];…