真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

UAV心跳機制與容器、進程數(shù)據(jù)采集

服務(wù)心跳機制主要用于確認服務(wù)的存活狀態(tài),UAVStack的心跳數(shù)據(jù)還負責(zé)上報節(jié)點的容器及進程監(jiān)控數(shù)據(jù),支持在前端實時查看應(yīng)用容器和進程的運行狀態(tài),并根據(jù)這些數(shù)據(jù)對容器和進程做出預(yù)警。

創(chuàng)新互聯(lián)建站,為您提供成都網(wǎng)站建設(shè)重慶網(wǎng)站制作、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設(shè)計,對服務(wù)砂巖浮雕等多個行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗。創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報價服務(wù),我們深知市場的競爭激烈,認真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進步,是我們永遠的責(zé)任!

一、背景

在微服務(wù)架構(gòu)中,服務(wù)心跳是一個簡單但非常重要的機制,用于確認微服務(wù)的存活狀態(tài)。UAVStack中的心跳是一個Http請求,MonitorAgent(以下簡稱MA)通過定時向HealthManager(以下簡稱HM)發(fā)送一個帶有特定報文格式的Http請求完成一次心跳的發(fā)送過程。心跳報文含有發(fā)送時的時間戳,用于更新HM端的數(shù)據(jù)狀態(tài)。

與普通的心跳不同,UAVStack中的心跳還負責(zé)上送MA端的應(yīng)用容器和進程監(jiān)控數(shù)據(jù)。每次發(fā)送心跳的時候,在MA端會有定時任務(wù)去收集MA所在的應(yīng)用容器心跳的基本信息,及應(yīng)用容器上的進程數(shù)據(jù),隨著心跳數(shù)據(jù)包一起上送。

本文將首先介紹UAVStack的基礎(chǔ)心跳機制,之后對應(yīng)用容器、進程的數(shù)據(jù)采集做詳細說明。

二、基本架構(gòu)

心跳的實現(xiàn)有很多種方式,心跳的發(fā)起可以由客戶端發(fā)起也可以由服務(wù)端發(fā)起,只需完成確認存活這一基本功能即可。但是在一般的實現(xiàn)中,我們更傾向于客戶端主動向服務(wù)端進行報告,因為當客戶端逐漸增加,單純通過服務(wù)端的輪詢會導(dǎo)致服務(wù)端的壓力,影響性能。

在UAVStack的實現(xiàn)中,我們也采用了這樣的方式,通過客戶端(MA)主動向服務(wù)端(HM)發(fā)送心跳信息,告知HM自身的存活情況。

一次心跳由UAV的MA和HM共同完成:

  • MA定時生成心跳數(shù)據(jù),攜帶MA節(jié)點的應(yīng)用容器信息、進程信息以及服務(wù)信息,通過Http請求上報給HM;

  • HM負責(zé)將接收到的心跳數(shù)據(jù)存入redis緩存,并定時掃描心跳數(shù)據(jù),確認節(jié)點的存活狀態(tài)。對于隨同的應(yīng)用容器等監(jiān)控信息,會在Redis進行暫存,后續(xù)隨著HM的定時任務(wù)最終存入OpenTSDB進行落盤。整體的架構(gòu)如下所示:

UAV心跳機制與容器、進程數(shù)據(jù)采集

三、基礎(chǔ)心跳機制

UAV心跳機制與容器、進程數(shù)據(jù)采集

心跳服務(wù)主要流程如上圖所示,其邏輯有以下幾步:

1)MA的定時心跳任務(wù)生成一個空心跳數(shù)據(jù),將心跳數(shù)據(jù)交給MA端的容器、進程數(shù)據(jù)采集任務(wù)。

2)MA端的容器、進程數(shù)據(jù)采集任務(wù)負責(zé)產(chǎn)生心跳數(shù)據(jù)的時間戳、采集節(jié)點的應(yīng)用容器、進程監(jiān)控數(shù)據(jù)、節(jié)點的基本信息、節(jié)點的可用服務(wù)信息等。經(jīng)過以上過程之后,心跳數(shù)據(jù)將包含以下內(nèi)容:

  • 心跳時間戳:節(jié)點發(fā)送心跳時的時間戳,方便HM后續(xù)比對判定節(jié)點的存活狀態(tài)。
  • 應(yīng)用容器的基本信息:包括節(jié)點ID、名稱、主機名、IP等。
  • 應(yīng)用容器的簡單監(jiān)控數(shù)據(jù):包括CPU負載、內(nèi)存使用、硬盤使用等。
  • 應(yīng)用容器上的進程信息:包括每個進程的pid、資源占用等。
  • 節(jié)點的能力信息:包括該節(jié)點上啟用的Feature功能。
  • 節(jié)點的服務(wù)信息:包括該節(jié)點上可提供的服務(wù)及其訪問接口,用以實現(xiàn)服務(wù)發(fā)現(xiàn)。
  • 可選)子節(jié)點的節(jié)點信息:如果MA和HM部署在不同的網(wǎng)段,則MA無法通過直接Http的方式推送數(shù)據(jù)給HM,此時需要MA將數(shù)據(jù)上送給自己網(wǎng)段內(nèi)的HM,再由該HM的心跳客戶端發(fā)送給總的HM。這種情況下,上報的數(shù)據(jù)中會攜帶子節(jié)點的節(jié)點信息。每個節(jié)點信息均會包含上述幾種數(shù)據(jù)。

最后將心跳數(shù)據(jù)發(fā)送給HM。

3)HM端在接收到心跳數(shù)據(jù)之后,將其存入自身的Redis緩存。使用上報數(shù)據(jù)中的服務(wù)信息更新Redis中的服務(wù)狀態(tài),用于服務(wù)發(fā)現(xiàn)請求。

4)HM端在啟動心跳接收服務(wù)時,會同時啟動心跳檢查任務(wù)。這個任務(wù)會定時掃描Redis中的心跳數(shù)據(jù),根據(jù)當前系統(tǒng)時間與心跳時間戳的差,判斷心跳節(jié)點的存活狀態(tài),更新節(jié)點的狀態(tài),并對于過期的節(jié)點做刪除處理。

四、應(yīng)用容器、進程數(shù)據(jù)采集

UAV的心跳數(shù)據(jù)除了完成心跳功能之外,還要上報節(jié)點的應(yīng)用容器及進程的監(jiān)控數(shù)據(jù)。

將應(yīng)用容器與進程數(shù)據(jù)通過Http方式上報是為了保證應(yīng)用容器監(jiān)控數(shù)據(jù)與應(yīng)用監(jiān)控數(shù)據(jù)的隔離,通過不同方式的上送可以保證在MQ服務(wù)不能使用時不影響容器與進程數(shù)據(jù)的采集。

本節(jié)將集中說明這些數(shù)據(jù)的采集細節(jié)。

4.1 應(yīng)用容器數(shù)據(jù)采集

應(yīng)用容器的數(shù)據(jù)分為兩部分:

其一是容器的基本信息,即節(jié)點的ID,主機名,系統(tǒng)信息和JVM信息等;

另一部分是一些簡單的實時監(jiān)控采集數(shù)據(jù),包括CPU的負載、內(nèi)存占用情況和磁盤占用情況等。這些數(shù)據(jù)在每次上報心跳數(shù)據(jù)的時候會分別從以下數(shù)據(jù)源實時采集:

  • 應(yīng)用啟動后的System.getProperty:這部分數(shù)據(jù)主要包括操作系統(tǒng)的基本信息,JVM信息等。
  • Java提供的工具類:這部分主要包括網(wǎng)卡信息。
  • 通過JMX獲取的信息:包括CPU占用、內(nèi)存占用等。
  • 系統(tǒng)本身記錄的信息:這部分包括可提供的服務(wù)信息、啟動的Feature信息、節(jié)點ID等。
  • 通過執(zhí)行系統(tǒng)命令得到的信息:包括磁盤占用情況。
  • 通過直接讀取/proc目錄下的文件獲取的信息:包括CPU占用、內(nèi)存占用等。

4.2 進程數(shù)據(jù)采集

不同于應(yīng)用容器數(shù)據(jù)采集,進程的數(shù)據(jù)并不是在心跳進程中進行采集的,而是由專門的Feature負責(zé)。在Feature中將進程數(shù)據(jù)采集進一步分解成進程端口流量數(shù)據(jù)采集以及其他數(shù)據(jù)采集。這兩者均由定時任務(wù)完成,互相協(xié)作,最終由進程探測的定時任務(wù)更新心跳客戶端的進程數(shù)據(jù)。

這種使用多個采集任務(wù)分別采集的方式可以針對不同的數(shù)據(jù)進行不同頻度的采集。如對于網(wǎng)絡(luò)端口流量的采集,就可以以更長的周期進行,以減低數(shù)據(jù)采集帶來的性能損耗。同時,不同的任務(wù)也可以使用不同的線程執(zhí)行,提升執(zhí)行的效率。

進程數(shù)據(jù)采集流程大致如下圖所示:

UAV心跳機制與容器、進程數(shù)據(jù)采集

進程端口流量探測定時任務(wù)每隔一定時間讀取本地變量端口列表,獲取要采集的端口號。

之后對于Windows環(huán)境,采用JPcap獲取網(wǎng)卡對象,并在網(wǎng)卡上設(shè)置tcp過濾器來統(tǒng)計一段時間內(nèi)的端口流量。對于Linux環(huán)境則是直接通過調(diào)用Python腳本打開socket,分析流過的數(shù)據(jù)包獲得。

獲得全部端口上的流量數(shù)據(jù)后,任務(wù)會將采集數(shù)據(jù)交給進程數(shù)據(jù)采集任務(wù),更新其本地變量,同時設(shè)置本次采集的時間戳。

進程探測定時任務(wù)由一系列子任務(wù)構(gòu)成,在任務(wù)開始的時候,會先準備好一個Map結(jié)構(gòu)的數(shù)據(jù)容器,用于存放采集到的進程信息,每個進程由pid區(qū)分,作為Map的key。

任務(wù)會先掃描所有的進程,獲取pid和進程的端口。掃描到的進程會經(jīng)過一個過濾器排除不需要采集數(shù)據(jù)的進程,之后正式采集每個進程上的數(shù)據(jù)。

對于每一個進程,會通過運行系統(tǒng)命令采集連接數(shù)、CPU、內(nèi)存占用,磁盤讀寫數(shù)據(jù)以及網(wǎng)絡(luò)端口流量數(shù)據(jù)。其中網(wǎng)絡(luò)端口流量數(shù)據(jù)是由端口流量探測任務(wù)采集并更新的本地變量,而進程探測任務(wù)也會將掃描到的最新的端口列表更新到端口流量探測任務(wù)的本地變量。

如果應(yīng)用是部署在容器上的,則還會有對應(yīng)的容器信息采集。最后進程探測任務(wù)會將采集到的進程數(shù)據(jù)更新到心跳客戶端的本地變量,隨著每次心跳數(shù)據(jù)的生成被一起采集并上報。

進程數(shù)據(jù)的采集分別來自以下數(shù)據(jù)源:

  • 系統(tǒng)命令:包括CPU、內(nèi)存、連接數(shù)等(top等命令)
  • /proc目錄下各進程子目錄:包括CPU、內(nèi)存等信息、磁盤讀寫等信息
  • 執(zhí)行腳本:包括Linux環(huán)境下的端口流量數(shù)據(jù)采集
  • 第三方工具包:包括win環(huán)境下的端口流量數(shù)據(jù)采集(JPcap)

五、HM處理

心跳數(shù)據(jù)和容器數(shù)據(jù)在通過Http上送到HM端之后,會由HM端對應(yīng)的服務(wù)進行處理。

HM在啟動時會啟動自己的心跳客戶端,負責(zé)發(fā)送本機的心跳數(shù)據(jù)和采集HM所在容器的監(jiān)控數(shù)據(jù)。同時還會啟動一個心跳服務(wù),負責(zé)接收處理所有上送的心跳和容器數(shù)據(jù)信息。

心跳服務(wù)在收到心跳數(shù)據(jù)請求后,會根據(jù)HM的配置,判定當前的HM是不是Master節(jié)點。如果HM是Master節(jié)點,心跳服務(wù)會從Http攜帶的報文中拿出上報的數(shù)據(jù),取得上報節(jié)點中的可用服務(wù)用于更新服務(wù)發(fā)現(xiàn)信息,之后將數(shù)據(jù)存入后端的Redis緩存中;如果不是Master節(jié)點,則會將數(shù)據(jù)移交至本機的心跳客戶端,由其下次發(fā)送心跳時一起上送。

這樣的設(shè)計是考慮到大規(guī)模監(jiān)控時會有跨機房的情況存在,此時各監(jiān)控節(jié)點往往不在同一個網(wǎng)段內(nèi),通過將同一個網(wǎng)段內(nèi)的機器上交到邊界的“網(wǎng)關(guān)”統(tǒng)一上交可解決這一問題。此時的HM即充當著“網(wǎng)關(guān)”這一角色。

HM在啟動的時候同時還會啟動一個定時任務(wù),這個任務(wù)負責(zé)處理各節(jié)點的存活狀況。任務(wù)定時從Redis中讀取全部心跳數(shù)據(jù),依次檢查上送心跳數(shù)據(jù)中的客戶端時間戳與當前系統(tǒng)時間戳的差值。

當時間超過一定的上送時間間隔之后,更改對應(yīng)的節(jié)點存活狀態(tài)。當超過一倍上送時間間隔,意味節(jié)點可能死亡,處于dying狀態(tài)。當超過兩倍時間間隔時,意味著節(jié)點已經(jīng)死亡。當超過三倍時間間隔時,心跳服務(wù)會刪除該節(jié)點的緩存記錄。

隨心跳一起上報的容器和進程數(shù)據(jù)會隨著心跳數(shù)據(jù)一同被存入Redis中,后續(xù)由HM的其他定時任務(wù)讀取并發(fā)送給預(yù)警中心進行處理,最終監(jiān)控指標被格式化成特定的結(jié)構(gòu)存入OpenTSDB。

同時采集的容器數(shù)據(jù)和進程數(shù)據(jù)會提供前端AppHub查看界面,如圖所示:

UAV心跳機制與容器、進程數(shù)據(jù)采集

點擊頁面上的每一個節(jié)點,可以查看詳細的節(jié)點信息,包括節(jié)點的操作系統(tǒng)信息、JVM信息、提供的服務(wù)和安裝的Feture等等。這些也就是前文所說的隨心跳數(shù)據(jù)上報的那部分信息。如圖所示:

UAV心跳機制與容器、進程數(shù)據(jù)采集

六、總結(jié)

心跳是微服務(wù)架構(gòu)基礎(chǔ)但重要的機制,通過定時發(fā)送心跳數(shù)據(jù),MA節(jié)點報告了自身的存活狀態(tài),使得HM能夠知曉當前系統(tǒng)的運行狀態(tài)。

同時,UAVStack的心跳數(shù)據(jù)還同時負責(zé)上報節(jié)點的容器及進程監(jiān)控數(shù)據(jù),隨著這些數(shù)據(jù)的上報,HM可以對監(jiān)控的容器和進程做出預(yù)警,也能夠在前端實時看到應(yīng)用容器和進程的運行狀態(tài)。

官方網(wǎng)站:https://uavorg.github.io/main/

開源地址:https://github.com/uavorg

作者:張明明

來源:宜信技術(shù)學(xué)院


網(wǎng)站標題:UAV心跳機制與容器、進程數(shù)據(jù)采集
文章位置:http://weahome.cn/article/gejdsh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部