UAVStack应用数据归集
前言
為了保證應用的可靠運行,需要對系統(tǒng)建立完善的應用監(jiān)控,實時獲取應用信息和運行狀態(tài)。在之前的文章里,我們通過介紹MOF中的CaptureFramework框架和InterceptFramework框架,分別闡述了應用實時數(shù)據(jù)和畫像數(shù)據(jù)的采集方法。
然而僅僅采集是不夠的,還需要對應用數(shù)據(jù)進行歸集和處理,并提供相應的信息存儲和查詢能力。
在UAVStack中,應用數(shù)據(jù)的歸集功能通過MA來實現(xiàn)。MA可以定時抓取MOF中的實時信息,自動發(fā)現(xiàn)Tomcat、MSCP、JavaSE中的信息,并通過數(shù)據(jù)分析得出監(jiān)控信息,通過RocketMQ將歸集后的數(shù)據(jù)發(fā)送到HM進行存儲,并提供查詢功能。
MA架構(gòu)
在介紹應用數(shù)據(jù)歸集之前,首先介紹監(jiān)控代理程序MonitorAgent。
MonitorAgent是在應用外獨立運行的MSCP程序,提供數(shù)據(jù)采集功能、節(jié)點容器控制功能以及應用數(shù)據(jù)歸集功能。MonitorAgent的架構(gòu)如圖所示:
MonitorAgent具有以下特點:
- 每個host machine只有一個監(jiān)控代理程序進程。作為心跳客戶端,MA提供host心跳信息和當前節(jié)點容器控制功能,歸集容器與進程的信息,使得當前host能夠被HM發(fā)現(xiàn)和控制。
- MA被設(shè)置為守護進程,掛掉后可自重啟。
- MA負責抓取并歸集當前host上所有應用的監(jiān)控數(shù)據(jù),包括從MOF定時抓取的數(shù)據(jù)和第三方推送的數(shù)據(jù)。
MonitorAgent應用數(shù)據(jù)歸集的啟動過程如下:
- 啟動AppServerMonitorDetector實例,查找運行在宿主機系統(tǒng)和容器中所有的JVM進程,調(diào)用指定的MonitorDataCatchWork來獲取抓取實時數(shù)據(jù)。
- 創(chuàng)建AppServerProfileDataCatchWorker實例并開啟一個線程采集profile數(shù)據(jù)。
- 啟動MDFListener來接收第三方推送的應用數(shù)據(jù)進行歸集。
- 啟動MonitorDataProcessor用于計算增量數(shù)據(jù)。
應用數(shù)據(jù)歸集
MOF里的DataObserver提供了JMX和HTTP兩種模式來暴露應用數(shù)據(jù),供AppServerMonitorDetector進行采集。AppServerMonitorDetector的層次結(jié)構(gòu)如下圖所示:
AppServerMonitorDetector:定時任務,用于注冊、管理Detector并定時運行。如果運行時性能損耗過高,AppServerMonitorDetector會進行自殺,然后注冊并運行JVMLocalOSDetector和JVMContainerOSDetector。
OSDetector:用于自動發(fā)現(xiàn)JVM進程并指定DataCatchWorker歸集進程的應用信息,包括JVMLocalOSDetector和JVMContainerOSDetector兩種。
JVMLocalOSDetector:用于自動發(fā)現(xiàn)運行宿主機系統(tǒng)上的所有JVM進程。首先通過JVM工具掃描本地操作系統(tǒng)上所有JVM進程的信息,根據(jù)進程ID判斷是否需要指定新的DataCatchWorker。
如果需要,則利用JVM systemProperties中的uav.engine.vendor字段判斷當前應用類型,并利用JVM進程信息生成特定的JMXMonitorDataCatchWorker實例,將DataCatchWorker的JVMAccessURL字段設(shè)置為JMX_CONNECTOR_ADDRESS。MonitorDataCatchWorker可以利用JVMAccessURL以JMX的方式歸集該JVM進程產(chǎn)生的實時數(shù)據(jù)。
JVMContainerOSDetector:用于自動發(fā)現(xiàn)容器(Docker)中的JVM進程。容器通過namespace對運行環(huán)境進行了隔離,因此Detector通過Http方式獲取容器內(nèi)部的JVM進程信息。JVMContainerOSDetector首先通過掃描找到所有安裝了MOF的Docker進程,通過ping來判斷容器是否包含JVM進程。
如果發(fā)現(xiàn)JVM進程,則再次通過Http請求JVM進程的SystemProperties信息,生成新的HttpMonitorDataCatchWorker實例,并與進程的url和UAV_MOF_ROOT拼接成JVMAccessURL。MonitorDataCatchWorker可以利用JVMAccessURL以Http方式對該JVM進程的應用數(shù)據(jù)進行歸集。
MonitorDataCatchWorker:用于歸集進程內(nèi)的應用數(shù)據(jù)。DataCatchWorker會依據(jù)不同的服務類型(AppServer、MSCP、JSE)以JMX或Http方式采集應用數(shù)據(jù)并進行處理。
以歸集AppServer和MSCP應用信息的JMXAppServerMonitorDataCatchWorker為例,DataCatchWorker通過JMXConnector和jmxurl連接MOF上的MBeanServer,采集MOF暴露的MBean,創(chuàng)建MonitorDataFrame(MDF)和ProfileMonitorDataFrame(PMDF)用于存儲MBean中的實時信息和畫像信息,并利用MonitorDataProcessor計算實時信息的增量數(shù)據(jù)。歸集到的應用信息在PublishHandler上通過RocketMQ發(fā)送給HM進行存儲。
歸集的畫像數(shù)據(jù)包含以下信息:
- 應用服務的基本信息,包括系統(tǒng)信息和所在容器的信息。
- 應用服務內(nèi)部的組件,包括服務組件、客戶端組件、日志組件等。
- 應用服務的調(diào)用關(guān)系(溯源信息)。
歸集的實時數(shù)據(jù)包含以下信息:
- JEE服務,MSCP服務端采集應用集群、應用實例、以及特定URL的響應時間、加載計數(shù)、錯誤計數(shù)等。
- JSE服務會采集JVM狀態(tài),包括Heap使用、GC計數(shù)、線程計數(shù)、CPU、class計數(shù)等數(shù)據(jù)。
- 客戶端采集客戶端的訪問計數(shù)、響應時間、錯誤計數(shù)等數(shù)據(jù)。
MDFListenServer的運行機制則較為簡單,指定了IP與端口,以Http的形式接收第三方推送的MDF信息,將其發(fā)送到MonitorDataPublishHandler進行發(fā)送。
應用數(shù)據(jù)存儲
HM包含畫像數(shù)據(jù)服務和實時數(shù)據(jù)服務,負責消費并存儲RocketMQ中的應用數(shù)據(jù)。HealthManager在啟動時注冊DataMessageHandler,負責處理MQ收到的信息。MonitorDataMessageHandler會將收到的實時數(shù)據(jù)存儲到Redis中并設(shè)置過期時間,歷史數(shù)據(jù)會通過Http方式存儲于OpenTSDB中。
同時,實時數(shù)據(jù)服務還會將監(jiān)控數(shù)據(jù)重新發(fā)送至RocketMQ中,該數(shù)據(jù)最終會被實時預警服務進一步消費,用以計算預警信息。ProfileDataMessageHandler會將收到的畫像存儲到Redis中,并開啟定時任務,清理未定時更新的畫像信息。歷史畫像數(shù)據(jù)過期后會以文檔的形式通過MongoDBClient存儲于MongoDB中。
整個應用信息采集和存儲的流程如圖所示:
應用數(shù)據(jù)的展示
HM對外暴露查詢接口,支持對5分鐘內(nèi)的應用數(shù)據(jù)和歷史應用數(shù)據(jù)進行查詢。UAV APPHUB利用查詢接口提供以下功能:
1.應用集群信息
通過上帝之眼→應用監(jiān)控可以了解應用集群及集群下所有應用的相關(guān)信息。HM中的定時組件HealthManagerProfileDataLifeKeeper會定時檢查應用實例畫像數(shù)據(jù)的狀態(tài)。
如果畫像數(shù)據(jù)在指定時間內(nèi)未更新,HM會將應用實例設(shè)置為瀕死狀態(tài);如果超過指定時間兩倍后畫像數(shù)據(jù)仍未更新,HM會將應用實例設(shè)置為死亡狀態(tài);超過指定時間三倍后,HM會在緩存中清除該應用實例的畫像信息并不予顯示。
2.應用實例信息
應用可以分為JEE應用、MSCP應用和JSE應用。在應用集群中點擊應用實例,可以獲取實例的詳細信息,包括:
-
應用實例性能:顯示應用的實時數(shù)據(jù)。其中,
JEE應用和MSCP應用的實時數(shù)據(jù)包括:
- 訪問計數(shù):總計數(shù)、錯誤計數(shù)、警告計數(shù)。
- 響應時間:最長響應時間、最短響應時間、平均響應時間。
- 響應代碼計數(shù):RC+HTTP響應碼,如RC200表示HTTP響應碼是200。
JSE應用的實時數(shù)據(jù)包括:
- TPM:每分鐘新啟線程數(shù)。
- HPM:每分鐘Heap變化。
-
應用實例組件(畫像信息)包括:
- 服務信息:包含服務組件、客戶端組件、日志組件等。
- 應用運行環(huán)境:包括應用的運行服務器、容器信息、進程信息。
- 應用實例工具:支持調(diào)用鏈跟蹤、瀏覽器跟蹤、線程分析。
3.組件實例信息
點擊應用實例的組件,可以獲取應用組件的詳情信息。服務組件和客戶端的指標包括訪問計數(shù)、響應時間和錯誤計數(shù)。點擊日志組件則進入應用日志搜索界面。
4.服務圖譜
點擊應用集群的詳情按鈕,可以查看應用實例的服務圖譜。服務圖譜不僅可以可視化展示應用/服務之間的調(diào)用關(guān)系,描述服務與服務的靜態(tài)拓撲和運行時特性的圖譜;還能夠?qū)Υ嬖趩栴}的服務或調(diào)用關(guān)系進行標注。
在服務圖譜中點擊各組件,可以獲得組件的實例信息。點擊組件之間相連的調(diào)用關(guān)系,可以獲得應用服務作為客戶端對URL的調(diào)用狀況,服務圖譜會針對存在問題的組件或調(diào)用關(guān)系(如響應時間過長)進行提示。
5.時空沙盤
通過上帝之眼→時空沙盤可以查詢應用實例和容器組件的歷史數(shù)據(jù)。
總結(jié)
UAVStack的應用數(shù)據(jù)歸集功能已在宜信公司內(nèi)部廣泛使用,是具備較高可用性和可靠性的分布式服務。運維人員可以通過APPHUB獲取應用畫像數(shù)據(jù)和實時數(shù)據(jù),了解應用運行狀況,定位系統(tǒng)的運行問題,是保障系統(tǒng)可靠運行的強力助手。
官方網(wǎng)站
開源地址
UAVStack已在Github上開放源碼,并提供了安裝部署、架構(gòu)說明和用戶指南等雙語文檔,歡迎訪問-給星-拉取~~~
掃一掃下方二維碼,關(guān)注一個不會讓你失望的公眾號
轉(zhuǎn)載于:https://juejin.im/post/5c87771e5188257a323f5a0f
總結(jié)
以上是生活随笔為你收集整理的UAVStack应用数据归集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【easyTrader源码分析1】源码结
- 下一篇: java mediainfo.dll_m