輕鬆保障萬級實例,vivo服務端監控體系建設實踐

来源:https://www.cnblogs.com/88223100/archive/2023/02/25/Vivo-server-monitoring-system-construction-practice.html
-Advertisement-
Play Games

經過幾年的平臺建設,vivo監控平臺產品矩陣日趨完善,在vivo終端龐大的用戶群體下,承載業務運行的服務數量眾多,監控服務體系是業務可用性保障的重要一環,監控產品全場景覆蓋生產環境各個環節。從事前發現,事中告警、定位、恢復,事後復盤總結,監控服務平臺都提供了豐富的工具包。從以前的水平拆分,按場景建設... ...


經過幾年的平臺建設,vivo監控平臺產品矩陣日趨完善,在vivo終端龐大的用戶群體下,承載業務運行的服務數量眾多,監控服務體系是業務可用性保障的重要一環,監控產品全場景覆蓋生產環境各個環節。從事前發現,事中告警、定位、恢復,事後復盤總結,監控服務平臺都提供了豐富的工具包。從以前的水平拆分,按場景建設,到後來的垂直劃分,整合統一,降低平臺割裂感。同時從可觀測性、AIOps、雲原生等方向,監控平臺也進行了建設實踐。未來vivo監控平臺將會向著全場景、一站式、全鏈路、智能化方向不斷探索前行。

 

監控服務平臺是自研的、覆蓋全場景的可用性保障系統。經過多年深耕,vivo監控團隊已經成體系構築起一整套穩定性保障系統,隨著雲原生可觀測技術變革不斷深化,監控團隊如何掌舵前行?下麵就平臺的建設歷程、思考、探索,做一下簡單介紹。

 

一、監控體系建設之道

 

1.1 監控建設歷程

 

圖片

 

回顧監控建設歷程,最初採用Zabbix,與告警中心的組合實現簡易監控。隨著業務的發展在複雜監控場景和數據量不斷增長的情況下,這種簡易的組合就顯的捉襟見肘。所以從2018年開始我們開啟了自研之路,最開始我們建設了應用監控、日誌監控、撥測監控解決了很大一部分監控場景沒有覆蓋的問題;2019年我們建設了基礎監控、自定義監控等,完成了主要監控場景的基本覆蓋;2020年我們在完善前期監控產品的同時,進一步對周邊產品進行了建設;隨著AI技術的不斷成熟,我們從2021年開始也進行了轉型升級,先後建設了故障定位平臺、統一告警平臺有了這些平臺後我們發現,要想進一步提升平臺價值,數據和平臺的統一至關重要;所以從2022年開始建設了統一監控平臺,也就是將基礎監控、應用監控和自定義監控進行了統一,統一監控包含了統一配置服務和統一檢測服務。從監控的建設歷程來看,我們一路覆蓋了IaaS、PaaS、DaaS、CaaS等平臺。我們的職能也從DevOps向AIOps邁進。

 

1.2 監控能力矩陣

 

圖片

 

講了監控的發展歷程,那麼這些監控產品在我們的生產環境中是如何分佈的呢?要想支撐數以萬計的業務運行,需要龐雜的系統支撐,伺服器、網路環境、基礎組件等,都需要監控系統保障它的穩定性。我們將監控的對象分為五層,在基礎設施層,包含了網路設備、伺服器、存儲硬體等,這一層我們通過VGW監控對網路設備進行監控,VGW是Vivo Gateway的縮寫,類似於LVS;通過自定義監控,對機房進行監控;系統伺服器層,我們定義的監控對象是服務運行依賴的環境,通過主機監控對物理機、虛擬機等監控,當前容器在雲原生技術體系中,已然成為微服務運行的最佳載體,所以對容器的監控必不可少;系統服務層,包含了各種資料庫產品、大數據組件等,在這一層主要通過自定義監控檢測、告警;業務應用層,主要有應用服務,我們通過應用監控對業務鏈路信息進行監控;客戶體驗層,我們定義了端上的訪問質量,由宙斯平臺實現監控。前面我們講了監控能力矩陣,下麵我們具體介紹一下監控的範圍和整個平臺的能力。

 

1.3 監控對象範圍

 

圖片

 

監控對象涉及網路、主機、基礎服務等。面對各地機房我們做到了監控全覆蓋,為滿足各類環境部署訴求,我們可以做到針對不同環境的監控。我們支持多種採集方式,SDK和API採集主要應用在自定義監控場景,Agent主要採集主機類指標,採集上來的時序數據經過預聚合、統一的數據清洗,然後存儲在TSDB資料庫。針對海量數據存儲我們採用了數據降精,寬表多維多指標等方案。我們常用的檢測演算法有恆值檢測、突變檢測、同比檢測等,同時還支持了無數據檢測、多指標組合檢測,檢測出現的異常我們會形成一個問題,問題在經過一系列的收斂後發出告警,我們有多種告警通道,支持告警合併、認領、升級等,需要展示的指標數據我們提供了豐富的自定義指標看板,對使用頻率高 固化場景,我們提供了模板化配置方案。有了完備的監控體系,那麼系統的關鍵指標和監控對象體量如何?

 

1.4 監控系統體量

 

圖片

 

當前監控服務體系保障著x萬+的主機實例,x萬+的DB實例,每天處理x千億條各類指標和日誌,對x千+的功能變數名稱做到秒級監控,對x萬+的容器實例監控,每天從統一告警發出的各類告警達到x十萬+ ,對主機實例的監控覆蓋率達到x %,監控平臺通過不斷的探索實踐,實現了對海量數據計算存儲,當前對核心業務的告警延遲在x秒以內,告警召回率大於x %。

 

1.5 監控系統面臨挑戰

 

圖片

 

雖然現階段取得了一些成果,但是目前仍然面臨很多挑戰,主要分為三大類:

 

  • 部署環境複雜

 

對數以萬計的主機和容器,實時採集 計算是一項困難的事情;面對各地機房監控,部署過程中依賴項多,維護工作複雜;對海量數據計算存儲,保障監控服務穩定性、可用性難度大。

 

  • 平臺系統繁多

 

當前系統還存在割裂,用戶體驗不強;數據割裂,沒有從底層融合在一起,對於數據組合使用形成挑戰。

 

  • 新技術挑戰

 

首先基於容器的監控方案,對傳統監控方案形成挑戰,當前對Prometheus指標存儲處在探索階段,暫時沒有標準的解決方案,但是面對快速增長的數據量,新組件的探索試錯成本相對較高。

 

二、監控服務體系架構

 

2.1 產品架構

 

圖片

 

產品架構的能力服務層,我們定義了採集能力、檢測能力、告警能力等;功能層我們對這些能力做了具體實現,我們將監控分為主機、容器、DB等9類場景,展示層主要由Dashboard提供靈活的圖表配置能力,日誌中心負責日誌查詢,移動端可以對告警信息進行認領、屏蔽。

 

2.2 技術架構

 

圖片

 

技術架構層分為採集、計算、存儲、可視化幾大塊,首先在採集層我們通過各種採集方式進行指標採集;上報的數據主要通過Bees-Bus進行傳輸,Bees-Bus是一款公司自研的分散式、高可用的數據收集系統,指標經過Bees-Bus之後寫入Kafka,隨著Pulsar的受關註度與使用量的顯著增加,我們也在這方面進行了一定的探索;計算層我們經歷了Spark、Flink、KafkaStream幾個階段的探索,基本實現了計算層技術棧收歸到KafkaStream;數據主要存儲在Druid,當前有190+節點的Druid集群。Opentsdb和Hive早期應用在主機監控場景,隨著業務發展其性能已經不能勝任當前的寫入和查詢需求,所以逐步被捨棄。

 

當前我們選用了VictoriaMetrics作為Prometheus的遠端存儲,日誌信息存儲在ES中,目前我們有250+的ES節點。服務層中各類監控場景的元數據,都由統一元數據服務提供;各類檢測規則、告警規則都由統一配置服務維護,統一告警服務則負責告警的收斂、合併、發送等。Grafana則主要用作自監控告警。

 

2.3 交互流程

 

圖片

 

在監控架構的基礎上,我們介紹一下整體交互流程,採集規則由統一元數據服務管理,並主動下發到VCS-Master,VCS-Master主要用來任務下發,Agent執行結果數據接收,任務查詢和配置管理等,Agent會定期從VCS-Master拉取緩存的採集規則,指標經過Bees-Bus雙寫到Kafka,由ETL程式對指標數據消費,然後做清洗和計算,最後統一寫入到存儲服務中,統一配置服務下發檢測規則到異常檢測服務,檢測出的異常信息推送到Kafka,由告警代理服務對異常信息進行富化,處理好的數據推到Kafka,然後由統一告警服務消費處理。在存儲服務之上,我們做了一層查詢網關,所有的查詢會經過網關代理。

 

三、可用性體系構建與保障

 

3.1 可用性體系構建

 

圖片

 

前面說了監控服務體系整體架構,那麼監控產品如何服務於業務可用性。我們將業務穩定性在時間軸上進行分割,不同的時段有不同的系統保障業務可用性,當前我們主要關註MTTD和MTTR,告警延遲越小發現故障的速度也就越快,系統維修時間越短說明系統恢復速度越快,我們將MTTR指標拆解細化然後各個擊破,最終達成可用性保障要求。vivo監控服務體系提供了,涵蓋在穩定性建設中需要的故障預防、故障發現等全場景工具包,監控平臺提供了產品工具,那麼與運維人員,研發人員是怎樣協作配合的?

 

3.2 系統可用性保障

 

圖片

 

當監控對象有問題時,監控系統就會發送告警給運維人員或業務開發,他們通過查看相關指標修複問題。使用過程中運維人員的訴求和疑問,由監控平臺產品和開發協同配合解決,我們通過運營指標,定期梳理出不合理的告警,將對應的檢測規則同步給運維同學,然後制定調整計劃,後期我們計劃結合智能檢測,做到零配置就能檢測出異常指標。通過監控開發、運維人員和業務開發一起協同配合,保障業務的可用性。

 

3.3 監控系統可用性

 

圖片

 

除了保障業務可用性外,監控系統自身的可用性保障也是一個重要的課題。為了保障Agent存活,我們構建了多種維活機制,保障端上指標採集正常。數據經過Bees-Bus之後,會雙寫到兩個機房,當有一個機房出現故障,會快速切到另一個機房,保障核心業務不受損。數據鏈路的每一層都有自監控。監控平臺通過Grafana監控告警。

 

3.4 複雜場景下依托監控解決問題手段 監控能力矩陣

 

圖片

 

隨著公司業務發展,業務模型、部署架構越來越複雜,讓故障定位很困難,定位問題成本高。而監控系統在面對複雜、異構、調用關係冗長的系統時就起到了重要作用。在問題發現階段,例如多服務串聯調用,如果某個階段,出現耗時比較大的情況,可以通過應用監控,降低問題排查難度。在告警通知階段,可以通過統一告警對異常統一收斂,然後根據告警策略,通知給運維或者開發。問題定位時,可以利用故障定位服務找到最可能出現問題的服務。解決問題時,類似磁碟打滿這種比較常見的故障,可以通過回調作業快速排障。復盤改進階段,故障管理平臺可以統一管理,全流程復盤,使解決過程可追溯。預防演練階段,在服務上線前,可以對服務進行壓力測試,根據指標設置容量。

 

四、行業變革下的監控探索實踐及未來規劃

 

4.1 雲原生:Prometheus監控

 

圖片

 

當前行業正迎來快速變革,我們在雲原生、AIOps、可觀性等方向均進行了探索實踐。未來我們也想緊跟行業熱點,繼續深挖產品價值。隨著Kubernetes成為容器編排領域的事實標準,Prometheus因為對容器監控良好的適配,使其成為雲原生時代,容器監控的事實標準。下麵我們介紹一下整體架構,我們將容器監控分為容器集群監控和容器業務監控,首先對於容器集群監控,每個生產集群都有獨立的監控節點,用於部署監控組件,Prometheus按照採集目標服務劃分為多組,數據存儲採用VictoriaMetrics,我們簡稱VM,同一機房的Prometheus集群,均將監控數據Remote-Write到VM中,VM配置為多副本存儲。通過撥測監控,實現對Prometheus自監控,保障Prometheus異常時能收到告警信息。容器業務監控方面,Agent部署在宿主機,並從Cadvisor拉取指標數據,上報到Bees-Bus,Bees-Bus將數據雙寫到兩個Kafka集群,統一檢測服務非同步檢測指標數據,業務監控指標數據採用VM做遠端存儲,Dashboard通過Promql語句查詢展示指標數據。

 

4.2 AIOps:故障定位

 

圖片

 

當前業界對AIOps的探索,大部分在一些細分場景,我們也在故障定位這個方向進行了探索。分析過程中首先通過CMDB節點樹,選定需要分析的項目節點,然後選擇需要分析的時段,就可以按組件和服務下鑽分析,通過計算得出每個下游服務的波動方差,再利用K-Means聚類,過濾掉波動較小的聚類,找到可能出現異常的服務或組件。分析過程會形成一張原因鏈路圖,方便用戶快速找到異常服務,分析結果會推薦給用戶,告知用戶最可能出現異常的原因。詳情查看功能可以看到被調用的下游服務、介面名、耗時等信息。

 

4.3 可觀測性:可用性大盤

 

圖片

 

由於CNCF在雲原生的定義中提到了Observerbility,所以近兩年可觀性,成了技術圈很火熱的關鍵詞。當前業界基於Metrics、Logs、Traces對可觀測性形成了一定共識。谷歌也給出了可觀測的核心價值就是快速排障。我們認為指標、日誌、追蹤是實現可觀測性的基礎,在此基礎上將三者有機融合,針對不同的場景將他們串聯在一起,實現方便快捷的查找故障根因,綜上我們建設了可用性大盤,它能查看服務的健康狀況,通過下鑽,可以看到上下游服務依賴關係、功能變數名稱健康狀況、後端服務分佈等。通過串聯跳轉等方式可以看到對應服務的日誌和指標信息。

 

4.4 場景串聯

 

圖片

 

未來我們希望在場景串聯、可觀測性、服務能力化進一步探索,深挖產品價值。場景串聯上:

 

首先我們希望告警能夠與故障定位平臺串聯,幫助用戶快速找到故障根因,縮短排查時間 ;

 

告警記錄能夠一鍵轉為事件,減少數據鏈路中人為操作的環節,保障數據的真實性;

 

我們希望能與CMDB等平臺打通,將數據價值最大化。 

 

4.5 統一可觀測

 

圖片

 

現在,vivo監控服務體系的可觀測產品沒有完全融合在一起,所以後續我們希望構建統一可觀測平臺:

 

在一元場景中,可以單獨查看指標、日誌、追蹤信息;

 

在轉化場景中,能夠通過日誌獲得指標數據,對日誌的聚合和轉化得到追蹤,利用調用鏈的分析,獲得調用範圍內的指標。通過指標、日誌、追蹤多個維度找到故障的源頭;

 

在二元場景,我們希望日誌和指標、日誌和追蹤、追蹤和指標能夠相互結合,聚合分析。

 

4.6 能力服務化

 

圖片

 

目前監控有很多服務,在公司構建混合雲平臺的大背景下,監控系統的服務應該具備以能力化的方式提供出去。未來我們希望指標、圖表、告警等,以API或者獨立服務的方式提供能力,例如在CICD服務部署過程中,就可以通過監控提供的圖表能力,看到服務部署時關鍵指標變化情況,而不需要跳轉到監控服務查看指標信息。

 

最後,我們希望監控能更好的保障業務可用性,在此基礎上,我們也希望通過監控系統提升業務服務質量。

 

作者丨陳寧寧
來源丨公眾號:vivo互聯網技術(ID:vivoVMIC)

本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/Vivo-server-monitoring-system-construction-practice.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、項目結構 項目說明: 該項目是用NET6搭建的webapi介面項目,然後配一個asp.net mvc的管理系統,資料庫是用的mysql,在SiteApi項目下有資料庫sql文件,下麵是一些截圖 介面配置的swagger界面 配套的後臺管理系統 項目具體說明: SiteApi:NET6介面項目,具 ...
  • 2、增量備份 2.1、添加備份腳本 [root@localhost]# vim /mnt/data/backup/mysql/mysql_m_bak_diff.sh #!/bin/bash #mysql 增量備份 time=`date +%Y%m%d` now=`date +%F' '%T` eti ...
  • 原文:Jetpack Compose學習(11)——Navigation頁面導航的使用 - Stars-One的雜貨小窩 在Android原生的View開發中的,也是有Navigation,原生我之後可能再出篇教程,今天講解的則是compose版本的Navigation組件的使用 本系列以往文章請查 ...
  • 我們常常使用的drawable和mipmap到底區別在哪裡, 我們找到資料中關於它們的說明到底是不是符合我們實際的情況. ...
  • 收藏 javascript-questions 這個倉庫很久了,趁著周末來鍛煉下自己的 JS 基礎水平 因為逐漸也在承擔一些面試工作,順便摘錄一些個人覺得比較適合面試的題目和方向 事件流(捕獲、冒泡) 源鏈接 以下代碼點擊結果是啥? <div onclick="console.log('div')" ...
  • 簡介 從事前端開發的同學,對富文本編輯器都不是很陌生。但是大多數富文本編輯器都是開箱即用,很少會對其實現原理進行深入的探討。假如靜下心去細細品味,會發現想要做好一款富文本編輯器,需要對整個前端生態有較深入的理解。在某種意義上說,富文本編輯器是前端一個集大成者。 富文本編輯器根據其實現方式,業內將其劃 ...
  • 前言 項目上實現某個功能,使用到了 el-select 和 el-tree 組合實現,記錄下兩者結合的實現過程。 要求 根據項目介面提供的數據,el-tree 里的數據是一次性返回來的,點擊最後一層級時,請求介面,在點擊層級下方追加數據 追加的數據要顯示勾選框,可進行勾選,且是單選 勾選後需要返回勾 ...
  • 大型企業智能化-數字化轉型基礎-關註點 業務中台,多半是傳統的成本中心,把後臺的資源整合成前臺打仗需要的“中間件”,方便被隨需調用。典型的業務中台如位元組跳動的直播中台、騰訊的技術中台等。“業務中台”也被稱為“有形的中台”,因為是有實體部門存在的。 數據中台是在政企數字化轉型過程中,對各業務單元業務與 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...