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