UAVStack應用數據歸集

前言git

爲了保證應用的可靠運行,須要對系統創建完善的應用監控,實時獲取應用信息和運行狀態。在以前的文章裏,咱們經過介紹MOF中的CaptureFramework框架和InterceptFramework框架,分別闡述了應用實時數據和畫像數據的採集方法。github

然而僅僅採集是不夠的,還須要對應用數據進行歸集和處理,並提供相應的信息存儲和查詢能力。瀏覽器

在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上開放源碼,並提供了安裝部署、架構說明和用戶指南等雙語文檔,歡迎訪問-給星-拉取~~~

掃一掃下方二維碼,關注一個不會讓你失望的公衆號

相關文章
相關標籤/搜索