本發(fā)明涉及一種監(jiān)管系統(tǒng)及方法,特別是涉及一種容器集群部署多進程應用的監(jiān)管系統(tǒng)及方法。
背景技術(shù):
容器技術(shù)是云計算的熱點技術(shù)之一,當前容器技術(shù)已經(jīng)在公有云、私有云、混合云場景廣泛應用。容器本身是推崇單一容器跑單一進程,但是實際應用中,太多的多進程應用需要被部署到同一容器中運行。在擁有多個云應用的集群中,容器被大量創(chuàng)建到物理集群或者虛擬機集群中,而多數(shù)容器內(nèi)應用又擁有多個進程。在現(xiàn)有的容器監(jiān)管系統(tǒng)中,絕大多數(shù)監(jiān)管系統(tǒng)只能監(jiān)管容器本身的狀態(tài),而對部署在容器內(nèi)進程不能做到有效監(jiān)管。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供一種容器集群部署多進程應用的監(jiān)管系統(tǒng)及方法,其對容器的監(jiān)管對象和進程進行統(tǒng)一監(jiān)管,提供容器的自動發(fā)現(xiàn)能力,新部署的容器可以自動納入監(jiān)管系統(tǒng),已停止的容器可以自動解除監(jiān)管,采集容器和容器內(nèi)進程的監(jiān)控信息的同時支持對容器和容器內(nèi)進程的生命周期管理。
本發(fā)明是通過下述技術(shù)方案來解決上述技術(shù)問題的:一種容器集群部署多進程應用的監(jiān)管系統(tǒng),其包括管理環(huán)境模塊和業(yè)務環(huán)境模塊,管理環(huán)境模塊和業(yè)務環(huán)境模塊分別部署在不同的業(yè)務環(huán)境中或同時部署在同一個業(yè)務環(huán)境中;業(yè)務環(huán)境包括物理機環(huán)境和虛擬機環(huán)境,業(yè)務環(huán)境模塊包括監(jiān)控服務器、服務發(fā)現(xiàn)組件、和監(jiān)控代理組件,管理環(huán)境模塊包括管理服務器。
優(yōu)選地,所述監(jiān)控服務器組件部署在一個容器中,其功能包括啟動或重啟后和服務發(fā)現(xiàn)組件進行通信,獲取當前可用監(jiān)控代理列表;接收服務發(fā)現(xiàn)組件的監(jiān)控代理新注冊通知,刷新監(jiān)控代理列表;接收各容器的監(jiān)控代理組件上報的進程信息,按進程和時間要素分類整理后,保存在監(jiān)控服務器的緩存系統(tǒng)中(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群);周期性和各容器所在主機的容器守護進程進行通信,獲取集群內(nèi)各容器的信息,包括但不限于CPU信息、內(nèi)存信息、網(wǎng)絡信息、文件系統(tǒng)信息,按容器和時間要素分類整理后,保存在監(jiān)控服務器的緩存系統(tǒng)中(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群);接收管理環(huán)境模塊的管理服務器對某容器內(nèi)特定進程下發(fā)的生命周期管理命令,轉(zhuǎn)發(fā)命令給對應容器的監(jiān)控代理;接收管理環(huán)境模塊的管理服務器對某容器下發(fā)的生命周期管理命令,連接該容器所在主機的容器守護進程,通過容器守護進程管理該容器。
優(yōu)選地,所述服務發(fā)現(xiàn)組件部署在一個單獨容器中或和監(jiān)控服務器組件部署在同一容器中,其功能包括接收監(jiān)控代理的新注冊消息,保存在服務發(fā)現(xiàn)組件的緩存系統(tǒng)中(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群),刷新監(jiān)控代理列表,并通知監(jiān)控服務器;和已經(jīng)注冊的監(jiān)控代理保持心跳連接,一旦心跳連接丟失,從監(jiān)控代理列表刪除該記錄,并通知監(jiān)控服務器;接收監(jiān)控服務器查詢請求,返回可用監(jiān)控代理列表。
優(yōu)選地,所述監(jiān)控代理組件作為容器的init(開始命令)進程部署在各自單獨的容器中,其功能包括容器啟動后,主動向服務發(fā)現(xiàn)組件發(fā)送注冊信息;和服務發(fā)現(xiàn)組件保持心跳連接;周期性采集本容器內(nèi)應用各進程的信息,包括但不限于進程名稱、進程狀態(tài)、運行時間、CPU占用率、內(nèi)存占用率,并上報進程信息給監(jiān)控服務器;接收監(jiān)控服務器組件下發(fā)的生命周期管理命令,對本容器內(nèi)其他進程進行生命周期管理。
優(yōu)選地,所述管理服務器部署在單獨的管理關鍵中或業(yè)務容器同一集群內(nèi),其功能包括連接監(jiān)控服務器,獲取監(jiān)控服務器采集的容器和進程信息;連接監(jiān)控服務器,對集群內(nèi)某容器內(nèi)進程下發(fā)生命周期管理命令;連接監(jiān)控服務器,對集群內(nèi)某容器下發(fā)生命周期管理命令。
優(yōu)選地,所述管理環(huán)境模塊和業(yè)務環(huán)境模塊的各組件根據(jù)業(yè)務場景均支持高可用部署。
本發(fā)明還提供一種容器集群部署多進程應用的監(jiān)管方法,其包括下列步驟:
步驟一,基于多主機(物理機或者虛擬機)創(chuàng)建業(yè)務環(huán)境模塊的容器集群,開啟容器守護進程的遠程通信功能;
步驟二,在容器集群中創(chuàng)建監(jiān)控服務器和服務發(fā)現(xiàn)容器,監(jiān)控服務器首次啟動會通信接口(比如restful接口)向服務發(fā)現(xiàn)組件請求可用監(jiān)控代理列表,服務發(fā)現(xiàn)容器中沒有數(shù)據(jù),則查詢返回空數(shù)據(jù);
步驟三,創(chuàng)建業(yè)務容器,啟動監(jiān)控代理并作為容器的init進程,監(jiān)控代理負責采集容器內(nèi)其他進程的信息,并對外部組件提供通信接口(比如restful接口)對容器內(nèi)進程進行生命周期管理;
步驟四,監(jiān)控代理首先通過通信接口(比如restful接口)向服務發(fā)現(xiàn)組件注冊,包括訪問地址和端口,然后通過通信接口(比如restful接口)周期性保持心跳連接,服務發(fā)現(xiàn)組件通過心跳連接刷新可用監(jiān)控代理列表,并保存在服務發(fā)現(xiàn)組件的緩存系統(tǒng)中(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群);
步驟五,服務發(fā)現(xiàn)組件通過通信接口(比如restful接口)向監(jiān)控服務器通知監(jiān)控代理注冊信息,監(jiān)控服務器獲取到注冊的監(jiān)控代理訪問地址和端口,通過通信接口(比如restful接口)訪問監(jiān)控代理,建立連接并刷新容器監(jiān)控代理列表;
步驟六,監(jiān)控代理周期性獲取容器內(nèi)所有進程的信息,包括進程名稱、進程狀態(tài)、運行時間、CPU占用率、內(nèi)存占用率,并把采集到的信息進行整理加工,通過通信接口(比如restful接口)發(fā)送給監(jiān)控服務器;
步驟七,監(jiān)控服務器收到監(jiān)控代理發(fā)送的進程信息,按進程和時間要素分類整理后,存入監(jiān)控服務器的緩存系統(tǒng)中(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群);
步驟八,監(jiān)控服務器周期性通過通信接口(比如restful接口)連接集群內(nèi)各容器所在主機的容器守護進程,調(diào)用容器管理命令采集集群內(nèi)各容器的信息,包括但不限于容器id、CPU信息、內(nèi)存信息、網(wǎng)絡信息、文件系統(tǒng)信息,按容器和時間要素分類整理后,存入監(jiān)控服務器的緩存系統(tǒng)中(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群);
步驟九,管理環(huán)境模塊中管理服務器通過通信接口(比如restful接口)連接業(yè)務環(huán)境模塊中監(jiān)控服務器,查詢監(jiān)控服務器的緩存系統(tǒng)中的容器和進程信息(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群);
步驟十,監(jiān)控服務器通過通信接口(比如restful接口)接收管理環(huán)境模塊中管理服務器對業(yè)務環(huán)境模塊內(nèi)特定容器或容器內(nèi)進程下發(fā)的生命周期管理命令(比如啟動、停止、重啟等);
步驟十一,監(jiān)控代理通過通信接口(比如restful接口)獲取到對某進程的生命周期管理命令(比如啟動、停止、重啟等),執(zhí)行命令并返回結(jié)果。
優(yōu)選地,所述步驟五包括下列步驟:
步驟十二,監(jiān)控服務器重啟后,通過通信接口(比如restful接口)向服務發(fā)現(xiàn)組件請求可用監(jiān)控代理列表,服務發(fā)現(xiàn)組件通過通信接口(比如restful接口)向監(jiān)控服務器發(fā)送監(jiān)控代理注冊信息,監(jiān)控服務器獲取到注冊的監(jiān)控代理訪問地址和端口,通過通信接口(比如restful接口)訪問監(jiān)控代理,建立連接并刷新容器監(jiān)控代理列表;
步驟十三,服務發(fā)現(xiàn)組件檢測到監(jiān)控代理的心跳消息丟失超過預設的時間周期(比如3個時間周期),觸發(fā)代理丟失事件,刷新服務發(fā)現(xiàn)組件的緩存系統(tǒng)(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群),并發(fā)送通知消息到監(jiān)控服務器;監(jiān)控服務器接收到代理丟失事件,刪除該代理并刷新容器監(jiān)控代理列表。
優(yōu)選地,所述步驟十包括下列步驟:
步驟十四,監(jiān)控服務器通過通信接口(比如restful接口)接收到對某容器的生命管理命令(比如啟動、停止、重啟等),通過通信接口(比如restful接口)連接該容器所在主機的容器守護進程,執(zhí)行命令并返回結(jié)果;
步驟十五,監(jiān)控服務器通過通信接口(比如restful接口)接收到對某容器內(nèi)進程的生命周期管理命令(比如啟動、停止、重啟等),通過通信接口(比如restful接口)轉(zhuǎn)發(fā)到對應容器的監(jiān)控代理。
本發(fā)明的積極進步效果在于:本發(fā)明對容器的監(jiān)管對象和進程進行統(tǒng)一監(jiān)管,提供容器的自動發(fā)現(xiàn)能力,新部署的容器可以自動納入監(jiān)管系統(tǒng),已停止的容器可以自動解除監(jiān)管,采集容器和容器內(nèi)進程的監(jiān)控信息的同時支持對容器和容器內(nèi)進程的生命周期管理。
附圖說明
圖1為本發(fā)明的系統(tǒng)模塊圖。
具體實施方式
下面結(jié)合附圖給出本發(fā)明較佳實施例,以詳細說明本發(fā)明的技術(shù)方案。
如圖1所示,本發(fā)明容器集群部署多進程應用的監(jiān)管系統(tǒng)包括管理環(huán)境模塊和業(yè)務環(huán)境模塊,管理環(huán)境模塊和業(yè)務環(huán)境模塊分別部署在不同的業(yè)務環(huán)境中或同時部署在同一個業(yè)務環(huán)境中;業(yè)務環(huán)境包括物理機環(huán)境和虛擬機環(huán)境,業(yè)務環(huán)境模塊包括監(jiān)控服務器、服務發(fā)現(xiàn)組件、和監(jiān)控代理組件,管理環(huán)境模塊包括管理服務器。
監(jiān)控服務器組件部署在一個容器中,其功能包括啟動或重啟后和服務發(fā)現(xiàn)組件進行通信,獲取當前可用監(jiān)控代理列表;接收服務發(fā)現(xiàn)組件的監(jiān)控代理新注冊通知,刷新監(jiān)控代理列表;接收各容器的監(jiān)控代理組件上報的進程信息,按進程和時間要素分類整理后,保存在監(jiān)控服務器的緩存系統(tǒng)中(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群);周期性和各容器所在主機的容器守護進程進行通信,獲取集群內(nèi)各容器的信息,包括但不限于CPU信息、內(nèi)存信息、網(wǎng)絡信息、文件系統(tǒng)信息,按容器和時間要素分類整理后,保存在監(jiān)控服務器的緩存系統(tǒng)中(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群);接收管理環(huán)境模塊的管理服務器對某容器內(nèi)特定進程下發(fā)的生命周期管理命令,轉(zhuǎn)發(fā)命令給對應容器的監(jiān)控代理;接收管理環(huán)境模塊的管理服務器對某容器下發(fā)的生命周期管理命令,連接該容器所在主機的容器守護進程,通過容器守護進程管理該容器。
服務發(fā)現(xiàn)組件部署在一個單獨容器中或和監(jiān)控服務器組件部署在同一容器中,其功能包括接收監(jiān)控代理的新注冊消息,保存在服務發(fā)現(xiàn)組件的緩存系統(tǒng)中(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群),刷新監(jiān)控代理列表,并通知監(jiān)控服務器;和已經(jīng)注冊的監(jiān)控代理保持心跳連接,一旦心跳連接丟失,從監(jiān)控代理列表刪除該記錄,并通知監(jiān)控服務器;接收監(jiān)控服務器查詢請求,返回可用監(jiān)控代理列表。
監(jiān)控代理組件作為容器的init(開始命令)進程部署在各自單獨的容器中,其功能包括容器啟動后,主動向服務發(fā)現(xiàn)組件發(fā)送注冊信息;和服務發(fā)現(xiàn)組件保持心跳連接;周期性采集本容器內(nèi)應用各進程的信息,包括但不限于進程名稱、進程狀態(tài)、運行時間、CPU占用率、內(nèi)存占用率,并上報進程信息給監(jiān)控服務器;接收監(jiān)控服務器組件下發(fā)的生命周期管理命令,對本容器內(nèi)其他進程進行生命周期管理。
管理服務器部署在單獨的管理關鍵中或在業(yè)務容器同一集群內(nèi),其功能包括連接監(jiān)控服務器,獲取監(jiān)控服務器采集的容器和進程信息;連接監(jiān)控服務器,對集群內(nèi)某容器內(nèi)進程下發(fā)生命周期管理命令;連接監(jiān)控服務器,對集群內(nèi)某容器下發(fā)生命周期管理命令。
管理環(huán)境模塊和業(yè)務環(huán)境模塊的各組件根據(jù)業(yè)務場景均支持高可用部署。
本發(fā)明容器集群部署多進程應用的監(jiān)管方法包括下列步驟:
步驟一,基于多主機(物理機或者虛擬機)創(chuàng)建業(yè)務環(huán)境模塊的容器集群,開啟容器守護進程的遠程通信功能;
步驟二,在容器集群中創(chuàng)建監(jiān)控服務器和服務發(fā)現(xiàn)容器,監(jiān)控服務器首次啟動會通信接口(比如restful接口)向服務發(fā)現(xiàn)組件請求可用監(jiān)控代理列表,服務發(fā)現(xiàn)容器中沒有數(shù)據(jù),則查詢返回空數(shù)據(jù);
步驟三,創(chuàng)建業(yè)務容器,啟動監(jiān)控代理并作為容器的init進程,監(jiān)控代理負責采集容器內(nèi)其他進程的信息,并對外部組件提供通信接口(比如restful接口)對容器內(nèi)進程進行生命周期管理;
步驟四,監(jiān)控代理首先通過通信接口(比如restful接口)向服務發(fā)現(xiàn)組件注冊,包括訪問地址和端口,然后通過通信接口(比如restful接口)周期性保持心跳連接,服務發(fā)現(xiàn)組件通過心跳連接刷新可用監(jiān)控代理列表,并保存在服務發(fā)現(xiàn)組件的緩存系統(tǒng)中(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群);
步驟五,服務發(fā)現(xiàn)組件通過通信接口(比如restful接口)向監(jiān)控服務器通知監(jiān)控代理注冊信息,監(jiān)控服務器獲取到注冊的監(jiān)控代理訪問地址和端口,通過通信接口(比如restful接口)訪問監(jiān)控代理,建立連接并刷新容器監(jiān)控代理列表;
步驟六,監(jiān)控代理周期性獲取容器內(nèi)所有進程的信息,包括進程名稱、進程狀態(tài)、運行時間、CPU占用率、內(nèi)存占用率,并把采集到的信息進行整理加工,通過通信接口(比如restful接口)發(fā)送給監(jiān)控服務器;
步驟七,監(jiān)控服務器收到監(jiān)控代理發(fā)送的進程信息,按進程和時間要素分類整理后,存入監(jiān)控服務器的緩存系統(tǒng)中(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群);
步驟八,監(jiān)控服務器周期性通過通信接口(比如restful接口)連接集群內(nèi)各容器所在主機的容器守護進程,調(diào)用容器管理命令采集集群內(nèi)各容器的信息,包括但不限于容器id、CPU信息、內(nèi)存信息、網(wǎng)絡信息、文件系統(tǒng)信息,按容器和時間要素分類整理后,存入監(jiān)控服務器的緩存系統(tǒng)中(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群);
步驟九,管理環(huán)境模塊中管理服務器通過通信接口(比如restful接口)連接業(yè)務環(huán)境模塊中監(jiān)控服務器,查詢監(jiān)控服務器的緩存系統(tǒng)中的容器和進程信息(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群);
步驟十,監(jiān)控服務器通過通信接口(比如restful接口)接收管理環(huán)境模塊中管理服務器對業(yè)務環(huán)境模塊內(nèi)特定容器或容器內(nèi)進程下發(fā)的生命周期管理命令(比如啟動、停止、重啟等);
步驟十一,監(jiān)控代理通過通信接口(比如restful接口)獲取到對某進程的生命周期管理命令(比如啟動、停止、重啟等),執(zhí)行命令并返回結(jié)果。
步驟五包括下列步驟:
步驟十二,監(jiān)控服務器重啟后,通過通信接口(比如restful接口)向服務發(fā)現(xiàn)組件請求可用監(jiān)控代理列表,服務發(fā)現(xiàn)組件通過通信接口(比如restful接口)向監(jiān)控服務器發(fā)送監(jiān)控代理注冊信息,監(jiān)控服務器獲取到注冊的監(jiān)控代理訪問地址和端口,通過通信接口(比如restful接口)訪問監(jiān)控代理,建立連接并刷新容器監(jiān)控代理列表;
步驟十三,服務發(fā)現(xiàn)組件檢測到監(jiān)控代理的心跳消息丟失超過預設的時間周期(比如3個時間周期),觸發(fā)代理丟失事件,刷新服務發(fā)現(xiàn)組件的緩存系統(tǒng)(緩存系統(tǒng)可以是本地緩存系統(tǒng),也可以是分布式緩存集群系統(tǒng),比如Redis集群),并發(fā)送通知消息到監(jiān)控服務器;監(jiān)控服務器接收到代理丟失事件,刪除該代理并刷新容器監(jiān)控代理列表。
步驟十包括下列步驟:
步驟十四,監(jiān)控服務器通過通信接口(比如restful接口)接收到對某容器的生命管理命令(比如啟動、停止、重啟等),通過通信接口(比如restful接口)連接該容器所在主機的容器守護進程,執(zhí)行命令并返回結(jié)果;
步驟十五,監(jiān)控服務器通過通信接口(比如restful接口)接收到對某容器內(nèi)進程的生命周期管理命令(比如啟動、停止、重啟等),通過通信接口(比如restful接口)轉(zhuǎn)發(fā)到對應容器的監(jiān)控代理。
綜上所述,本發(fā)明對容器的監(jiān)管對象和進程進行統(tǒng)一監(jiān)管,提供容器的自動發(fā)現(xiàn)能力,新部署的容器可以自動納入監(jiān)管系統(tǒng),已停止的容器可以自動解除監(jiān)管,采集容器和容器內(nèi)進程的監(jiān)控信息的同時支持對容器和容器內(nèi)進程的生命周期管理(比如啟動、停止、重啟等)。
以上所述的具體實施例,對本發(fā)明的解決的技術(shù)問題、技術(shù)方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本發(fā)明的具體實施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。