本發(fā)明實(shí)施例涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種容器的監(jiān)控方法及裝置。
背景技術(shù):
Linux容器是一種內(nèi)核虛擬化技術(shù),可以提供輕量級的虛擬化,以便隔離進(jìn)程和資源,而且不需要提供指令解釋機(jī)制以及全虛擬化的其他復(fù)雜性。它可以在單臺服務(wù)器中虛擬出多個(gè)相互隔離的執(zhí)行環(huán)境,在容器內(nèi)部執(zhí)行的進(jìn)程,被容器技術(shù)隔離在容器內(nèi)部,對進(jìn)程而言就如同運(yùn)行在一臺單獨(dú)的服務(wù)器上,而無法感知該服務(wù)器上其他容器內(nèi)或者服務(wù)器上的服務(wù)。
隨著Linux容器技術(shù)的普及,越來越多的服務(wù)被以容器的形式部署到服務(wù)器并提供服務(wù),部署在容器內(nèi)部的服務(wù),需要通過集中監(jiān)控獲取其資源使用情況以及服務(wù)運(yùn)行情況。
在實(shí)現(xiàn)本發(fā)明過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題:在容器內(nèi)部運(yùn)行監(jiān)控程序,既占用容器內(nèi)部分配的資源,又由于在每一個(gè)容器內(nèi)都運(yùn)行而占用宿主機(jī)的資源,同時(shí),由于監(jiān)控程序分布在每一個(gè)容器內(nèi)部,造成了監(jiān)控程序的升級和維護(hù)困難。
技術(shù)實(shí)現(xiàn)要素:
為了克服現(xiàn)有技術(shù)中相關(guān)產(chǎn)品的不足,本發(fā)明實(shí)施例提出一種容器的監(jiān)控方法及裝置,僅需要在容器宿主機(jī)上安裝并執(zhí)行一次監(jiān)控程序,即可對該服務(wù)器上的所有容器進(jìn)行監(jiān)控,解決由于監(jiān)控程序分布在每一個(gè)容器內(nèi)部而使其升級和維護(hù)困難的缺點(diǎn)。
本發(fā)明實(shí)施例解決其技術(shù)問題所采用的技術(shù)方案是:
本發(fā)明實(shí)施例所提供的一種容器的監(jiān)控方法,包括以下步驟:
在服務(wù)器上獲取容器列表;
按照預(yù)設(shè)的時(shí)間間隔定期獲取容器列表中所有容器的屬性信息。
作為本發(fā)明實(shí)施例的進(jìn)一步改進(jìn),所述在服務(wù)器上獲取容器列表具體為:
發(fā)送容器列表獲取指令;在服務(wù)器響應(yīng)所述容器列表獲取指令后,接收服務(wù)器返回的容器列表。
作為本發(fā)明實(shí)施例的進(jìn)一步改進(jìn),所述容器列表包括容器的唯一容器標(biāo)識以及容器運(yùn)行狀態(tài)信息。
作為本發(fā)明實(shí)施例的進(jìn)一步改進(jìn),所述服務(wù)器在容器列表內(nèi)的信息發(fā)生變更時(shí),返回新的容器列表。
作為本發(fā)明實(shí)施例的進(jìn)一步改進(jìn),所述按照預(yù)設(shè)的時(shí)間間隔定期獲取容器列表中所有容器的屬性信息具體為:
設(shè)定容器列表中每個(gè)容器的反饋間隔;對所有容器的運(yùn)行進(jìn)行記時(shí);讀取達(dá)到反饋間隔時(shí)間的容器的屬性信息。
本發(fā)明實(shí)施例所提供的一種容器的監(jiān)控裝置,包括:獲取模塊和監(jiān)控模塊;
所述獲取模塊用于在服務(wù)器上獲取容器列表;
所述監(jiān)控模塊用于按照預(yù)設(shè)的時(shí)間間隔定期獲取容器列表中所有容器的屬性信息。
作為本發(fā)明實(shí)施例的進(jìn)一步改進(jìn),所述獲取模塊包括發(fā)送單元和接收單元;
所述發(fā)送單元用于發(fā)送容器列表獲取指令;
所述接收單元用于在服務(wù)器響應(yīng)所述容器列表獲取指令后,接收服務(wù)器返回的容器列表。
作為本發(fā)明實(shí)施例的進(jìn)一步改進(jìn),所述容器列表包括容器的唯一容器標(biāo)識以及容器運(yùn)行狀態(tài)信息。
作為本發(fā)明實(shí)施例的進(jìn)一步改進(jìn),所述服務(wù)器在容器列表內(nèi)的信息發(fā)生變更時(shí),返回新的容器列表。
作為本發(fā)明實(shí)施例的進(jìn)一步改進(jìn),所述監(jiān)控模塊包括設(shè)定單元、記時(shí)單元以及讀取單元;
所述設(shè)定單元用于設(shè)定容器列表中每個(gè)容器的反饋間隔;
所述記時(shí)單元用于對所有容器的運(yùn)行進(jìn)行記時(shí);
所述讀取單元用于讀取達(dá)到反饋間隔時(shí)間的容器的屬性信息。
與現(xiàn)有技術(shù)相比,本發(fā)明有以下優(yōu)點(diǎn):
1、只需要運(yùn)行一個(gè)監(jiān)控程序即可對服務(wù)器上所有容器進(jìn)行監(jiān)控,而不必每一個(gè)容器分別配置一個(gè)監(jiān)控程序,節(jié)約了服務(wù)器的資源。
2、只運(yùn)行一個(gè)監(jiān)控程序,降低了監(jiān)控程序的復(fù)雜程度,便于進(jìn)行升級和維護(hù)。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對實(shí)施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例所述容器的監(jiān)控方法第一實(shí)施例的流程圖;
圖2為本發(fā)明實(shí)施例所述容器的監(jiān)控方法第二實(shí)施例的流程圖;
圖3為本發(fā)明實(shí)施例所述容器的監(jiān)控裝置第一實(shí)施例的原理結(jié)構(gòu)圖;
圖4為本發(fā)明實(shí)施例所述容器的監(jiān)控裝置第二實(shí)施例的原理結(jié)構(gòu)圖。
具體實(shí)施方式
為了便于理解本發(fā)明,下面將參照相關(guān)附圖對本發(fā)明進(jìn)行更全面的描述。附圖中給出了本發(fā)明的較佳實(shí)施例。但是,本發(fā)明可以以許多不同的形式來實(shí)現(xiàn),并不限于本文所描述的實(shí)施例。相反地,提供這些實(shí)施例的目的是使對本發(fā)明的公開內(nèi)容的理解更加透徹全面。
除非另有定義,本文所使用的所有的技術(shù)和科學(xué)術(shù)語與屬于本發(fā)明的技術(shù)領(lǐng)域的技術(shù)人員通常理解的含義相同。本文中在本發(fā)明的說明書中所使用的術(shù)語只是為了描述具體的實(shí)施例的目的,不是旨在于限制本發(fā)明。
實(shí)施例一
參閱圖1所示,為本發(fā)明所述容器的監(jiān)控方法的第一實(shí)施例,包括以下步驟:
S101:在服務(wù)器上獲取容器列表;
所述容器是一種LINUX內(nèi)核虛擬化技術(shù),可以提供輕量級的虛擬化,以便隔離進(jìn)程和資源,對服務(wù)運(yùn)行時(shí)的環(huán)境進(jìn)行隔離,被隔離出來的運(yùn)行環(huán)境就稱為容器;所述承載容器運(yùn)行的外部環(huán)境的宿主機(jī)即服務(wù)器,所述服務(wù)器上會(huì)同時(shí)運(yùn)行有多個(gè)容器,用于同時(shí)執(zhí)行多個(gè)服務(wù)進(jìn)程;在本發(fā)明實(shí)施例中,在所述服務(wù)器啟動(dòng)運(yùn)行后,向所述服務(wù)器發(fā)送容器列表獲取指令,在服務(wù)器響應(yīng)所述容器列表獲取指令后,接收服務(wù)器返回的容器列表,所述容器列表包括容器的唯一容器標(biāo)識以及容器運(yùn)行狀態(tài)信息。
S102:按照預(yù)設(shè)的時(shí)間間隔定期獲取容器列表中所有容器的屬性信息;
在本發(fā)明實(shí)施例中,通過設(shè)定容器列表中每個(gè)容器的反饋間隔,同時(shí)對所有容器的運(yùn)行進(jìn)行記時(shí),在容器達(dá)到反饋間隔時(shí)間后獲取對應(yīng)容器的屬性信息;本發(fā)明實(shí)施例可以對容器列表中每個(gè)處于活動(dòng)狀態(tài)的容器單獨(dú)設(shè)置反饋間隔,也可以對所有活動(dòng)狀態(tài)的容器設(shè)置統(tǒng)一的反饋間隔。
所述讀取容器屬性信息的過程具體包括以下幾種方式:
在本發(fā)明實(shí)施例中,所述LINUX操作系統(tǒng)的內(nèi)核為每個(gè)容器暴露的內(nèi)核數(shù)據(jù)結(jié)構(gòu),所述內(nèi)核數(shù)據(jù)結(jié)構(gòu)通過偽文件系統(tǒng)將其一部分?jǐn)?shù)據(jù)結(jié)構(gòu)暴露在內(nèi)核外,所述偽文件系統(tǒng)包括proc文件系統(tǒng)、sys(SYSTEM,系統(tǒng)復(fù)制命令)文件系統(tǒng)和cgroup(control groups,控制組)文件系統(tǒng)等;在達(dá)到反饋間隔時(shí)間后,通過所述偽文件系統(tǒng)直接讀取暴露在內(nèi)核外的部分的數(shù)據(jù),獲取對應(yīng)容器的屬性信息,所述容器的屬性信息包括對應(yīng)容器的內(nèi)存資源使用情況、磁盤使用情況和網(wǎng)絡(luò)IO((Input/Output,輸入/輸出)使用情況等。
在本發(fā)明實(shí)施例中,所述宿主機(jī)上運(yùn)行的所有容器都通過自身的根文件系統(tǒng)來獨(dú)立運(yùn)行,實(shí)現(xiàn)容器之間相互隔離,彼此不能訪問;所述容器內(nèi)部執(zhí)行的程序會(huì)將一些容器自身特定的信息輸出到自身的根文件系統(tǒng)內(nèi);在達(dá)到反饋間隔時(shí)間后,通過讀取對應(yīng)容器內(nèi)部的根文件系統(tǒng),獲取容器內(nèi)執(zhí)行程序的執(zhí)行情況,并進(jìn)行日志收集,健康診斷等功能。
在本發(fā)明實(shí)施例中,所述LINUX操作系統(tǒng)為所有運(yùn)行的容器提供接口,在達(dá)到反饋間隔時(shí)間后,通過調(diào)用該接口,臨時(shí)進(jìn)入對應(yīng)容器的命名空間;在所述容器內(nèi)部的執(zhí)行程序會(huì)按照任務(wù)要求進(jìn)行對容器執(zhí)行操作,包括停止容器內(nèi)部的進(jìn)程,修改容器內(nèi)部的文件等;通過操作該容器,所述執(zhí)行程序可以獲取任務(wù)執(zhí)行的結(jié)果或者容器內(nèi)部的屬性信息,在所述容器內(nèi)部環(huán)境可以讀取到容器內(nèi)部的屬性信息以及執(zhí)行程序的執(zhí)行情況,并在獲取了對應(yīng)的容器屬性信息后離開所述容器的內(nèi)部環(huán)境;通過LINUX操作系統(tǒng)提供的接口,在其他容器達(dá)到反饋間隔時(shí)間后,切換并臨時(shí)進(jìn)入對應(yīng)容器的命名空間,通過讀取對應(yīng)容器的屬性信息實(shí)現(xiàn)對容器的監(jiān)控。
在本發(fā)明實(shí)施例中,所述容器的監(jiān)控方法通過在服務(wù)器上獲取容器列表,按照預(yù)設(shè)的時(shí)間間隔定期獲取容器列表中所有容器的屬性信息;通過該過程,可以實(shí)現(xiàn)運(yùn)行一個(gè)監(jiān)控程序即可對服務(wù)器上所有容器進(jìn)行監(jiān)控,而不必每一個(gè)容器分別配置一個(gè)監(jiān)控程序,只需要對每個(gè)容器設(shè)置對應(yīng)的反饋間隔,在達(dá)到反饋間隔后,獲取對應(yīng)容器的屬性信息即可對該容器的運(yùn)行實(shí)現(xiàn)監(jiān)控,既節(jié)約了服務(wù)器的資源又降低了監(jiān)控程序的復(fù)雜程度,便于進(jìn)行升級和維護(hù)。
實(shí)施例二
參閱圖2所示,為本發(fā)明所述容器的監(jiān)控方法的第二實(shí)施例,包括以下步驟:
S201:發(fā)送容器列表獲取指令;
所述容器是一種LINUX內(nèi)核虛擬化技術(shù),可以提供輕量級的虛擬化,以便隔離進(jìn)程和資源,對服務(wù)運(yùn)行時(shí)的環(huán)境進(jìn)行隔離,被隔離出來的運(yùn)行環(huán)境就稱為容器;所述承載容器運(yùn)行的外部環(huán)境的宿主機(jī)即服務(wù)器,所述服務(wù)器上會(huì)同時(shí)運(yùn)行有多個(gè)容器,用于同時(shí)執(zhí)行多個(gè)服務(wù)進(jìn)程;在本發(fā)明實(shí)施例中,在所述服務(wù)器啟動(dòng)運(yùn)行后,向所述服務(wù)器發(fā)送容器列表獲取指令。
S202:在服務(wù)器響應(yīng)所述容器列表獲取指令后,接收服務(wù)器返回的容器列表;
在本發(fā)明實(shí)施例中,所述容器列表包括容器的唯一容器標(biāo)識以及容器運(yùn)行狀態(tài)信息,所述容器標(biāo)識是標(biāo)示容器的唯一標(biāo)識,用于在宿主機(jī)中區(qū)分各個(gè)容器的身份,所述容器運(yùn)行狀態(tài)信息是指容器當(dāng)前的運(yùn)行狀態(tài),包括活動(dòng)狀態(tài)以及停止?fàn)顟B(tài);所述容器的唯一容器標(biāo)識與所述容器運(yùn)行狀態(tài)信息一一對應(yīng);所述服務(wù)器響應(yīng)所述容器列表獲取指令,返回容器列表,在本發(fā)明實(shí)施例中,所述服務(wù)器返回的容器列表是服務(wù)器上所有容器的容器標(biāo)識以及其對應(yīng)的容器運(yùn)行狀態(tài)信息經(jīng)整理后制成的列表,當(dāng)有容器的運(yùn)行狀態(tài)發(fā)生了變化或者有新的容器產(chǎn)生時(shí),所述容器列表內(nèi)的信息也會(huì)實(shí)時(shí)變更;在本發(fā)明實(shí)施例中,所述服務(wù)器在容器列表內(nèi)的信息發(fā)生變更時(shí),返回新的容器列表。
S203:設(shè)定容器列表中每個(gè)容器的反饋間隔;
在本發(fā)明實(shí)施例中,僅對所述容器列表中處于活動(dòng)狀態(tài)的容器進(jìn)行反饋間隔的設(shè)定,輸出設(shè)定結(jié)果;用戶可以對容器列表中每個(gè)處于活動(dòng)狀態(tài)的容器單獨(dú)設(shè)置反饋間隔,根據(jù)容器內(nèi)部運(yùn)行的進(jìn)程和實(shí)際需要進(jìn)行設(shè)置;在其他實(shí)施方式中,為了便于管理,可以對所有活動(dòng)狀態(tài)的容器設(shè)置統(tǒng)一的反饋間隔;所述反饋間隔是指獲取一次對應(yīng)容器的屬性信息所間隔的時(shí)間;所述反饋間隔的時(shí)間根據(jù)實(shí)際情況進(jìn)行設(shè)置,如1秒,1毫秒等,當(dāng)設(shè)定的反饋間隔足夠小時(shí),在實(shí)際使用過程中可以認(rèn)為是實(shí)時(shí)反饋。
S204:對所有容器的運(yùn)行進(jìn)行記時(shí);
在本發(fā)明實(shí)施例中,對所述容器列表中所有容器進(jìn)行時(shí)間統(tǒng)計(jì),所述時(shí)間為容器持續(xù)運(yùn)行的時(shí)間,輸出記時(shí)結(jié)果,當(dāng)所述容器運(yùn)行狀態(tài)信息為停止?fàn)顟B(tài)時(shí),所述時(shí)間統(tǒng)計(jì)顯示為空。
S205:讀取達(dá)到反饋間隔時(shí)間的容器的屬性信息;
在本發(fā)明實(shí)施例中,對設(shè)定結(jié)果和記時(shí)結(jié)果進(jìn)行對比,并對達(dá)到反饋間隔時(shí)間的容器的屬性信息進(jìn)行讀取和監(jiān)控。
所述讀取容器屬性信息的過程具體包括以下幾種方式:
在本發(fā)明實(shí)施例中,所述LINUX操作系統(tǒng)的內(nèi)核為每個(gè)容器暴露的內(nèi)核數(shù)據(jù)結(jié)構(gòu),所述內(nèi)核數(shù)據(jù)結(jié)構(gòu)通過偽文件系統(tǒng)將其一部分?jǐn)?shù)據(jù)結(jié)構(gòu)暴露在內(nèi)核外,所述偽文件系統(tǒng)包括proc文件系統(tǒng)、sys文件系統(tǒng)和cgroup文件系統(tǒng)等;在達(dá)到反饋間隔時(shí)間后,通過所述偽文件系統(tǒng)直接讀取暴露在內(nèi)核外的部分的數(shù)據(jù),獲取對應(yīng)容器的屬性信息,所述容器的屬性信息包括對應(yīng)容器的內(nèi)存資源使用情況、磁盤使用情況和網(wǎng)絡(luò)IO使用情況等。
在本發(fā)明實(shí)施例中,所述宿主機(jī)上運(yùn)行的所有容器都通過自身的根文件系統(tǒng)來獨(dú)立運(yùn)行,實(shí)現(xiàn)容器之間相互隔離,彼此不能訪問;所述容器內(nèi)部執(zhí)行的程序會(huì)將一些容器自身特定的信息輸出到自身的根文件系統(tǒng)內(nèi);在達(dá)到反饋間隔時(shí)間后,通過讀取對應(yīng)容器內(nèi)部的根文件系統(tǒng),獲取容器內(nèi)執(zhí)行程序的執(zhí)行情況,并進(jìn)行日志收集,健康診斷等功能。
在本發(fā)明實(shí)施例中,所述LINUX操作系統(tǒng)為所有運(yùn)行的容器提供接口,在達(dá)到反饋間隔時(shí)間后,通過調(diào)用該接口,臨時(shí)進(jìn)入對應(yīng)容器的命名空間;在所述容器內(nèi)部的執(zhí)行程序會(huì)按照任務(wù)要求進(jìn)行對容器執(zhí)行操作,包括停止容器內(nèi)部的進(jìn)程,修改容器內(nèi)部的文件等;通過操作該容器,所述執(zhí)行程序可以獲取任務(wù)執(zhí)行的結(jié)果或者容器內(nèi)部的屬性信息,在所述容器內(nèi)部環(huán)境可以讀取到容器內(nèi)部的屬性信息以及執(zhí)行程序的執(zhí)行情況,并在獲取了對應(yīng)的容器屬性信息后離開所述容器的內(nèi)部環(huán)境;通過LINUX操作系統(tǒng)提供的接口,在其他容器達(dá)到反饋間隔時(shí)間后,切換并臨時(shí)進(jìn)入對應(yīng)容器的命名空間,通過讀取對應(yīng)容器的屬性信息實(shí)現(xiàn)對容器的監(jiān)控。
在本發(fā)明實(shí)施例中,所述容器的監(jiān)控方法通過發(fā)送容器列表獲取指令,在服務(wù)器響應(yīng)所述容器列表獲取指令后,接收服務(wù)器返回的容器列表,設(shè)定容器列表中每個(gè)容器的反饋間隔,通過對所有容器的運(yùn)行進(jìn)行記時(shí),讀取達(dá)到反饋間隔時(shí)間的容器的屬性信息;通過該過程,可以實(shí)現(xiàn)運(yùn)行一個(gè)監(jiān)控程序即可對服務(wù)器上所有容器進(jìn)行監(jiān)控,而不必每一個(gè)容器分別配置一個(gè)監(jiān)控程序,只需要對每個(gè)容器設(shè)置對應(yīng)的反饋間隔,在達(dá)到反饋間隔后,獲取對應(yīng)容器的屬性信息即可對該容器的運(yùn)行實(shí)現(xiàn)監(jiān)控,既節(jié)約了服務(wù)器的資源又降低了監(jiān)控程序的復(fù)雜程度,便于進(jìn)行升級和維護(hù)。
實(shí)施例三
參閱圖3所示,為本發(fā)明所述容器的監(jiān)控裝置的第一實(shí)施例,包括:獲取模塊1和監(jiān)控模塊2。
所述獲取模塊1用于在服務(wù)器上獲取容器列表;所述容器是一種LINUX內(nèi)核虛擬化技術(shù),可以提供輕量級的虛擬化,以便隔離進(jìn)程和資源,對服務(wù)運(yùn)行時(shí)的環(huán)境進(jìn)行隔離,被隔離出來的運(yùn)行環(huán)境就稱為容器;所述承載容器運(yùn)行的外部環(huán)境的宿主機(jī)即服務(wù)器,所述服務(wù)器上會(huì)同時(shí)運(yùn)行有多個(gè)容器,用于同時(shí)執(zhí)行多個(gè)服務(wù)進(jìn)程;在本發(fā)明實(shí)施例中,在所述服務(wù)器啟動(dòng)運(yùn)行后,所述獲取模塊1向所述服務(wù)器發(fā)送容器列表獲取指令,在服務(wù)器響應(yīng)所述容器列表獲取指令后,接收服務(wù)器返回的容器列表,所述容器列表包括容器的唯一容器標(biāo)識以及容器運(yùn)行狀態(tài)信息。
所述監(jiān)控模塊2用于按照預(yù)設(shè)的時(shí)間間隔定期獲取容器列表中所有容器的屬性信息;所述監(jiān)控模塊2設(shè)定容器列表中每個(gè)容器的反饋間隔,同時(shí)對所有容器的運(yùn)行進(jìn)行記時(shí),在容器達(dá)到反饋間隔時(shí)間后獲取對應(yīng)容器的屬性信息;所述監(jiān)控模塊2可以對容器列表中每個(gè)處于活動(dòng)狀態(tài)的容器單獨(dú)設(shè)置反饋間隔,也可以對所有活動(dòng)狀態(tài)的容器設(shè)置統(tǒng)一的反饋間隔。
所述監(jiān)控模塊2獲取容器屬性信息的過程具體包括以下幾種方式:
在本發(fā)明實(shí)施例中,所述LINUX操作系統(tǒng)的內(nèi)核為每個(gè)容器暴露的內(nèi)核數(shù)據(jù)結(jié)構(gòu),所述內(nèi)核數(shù)據(jù)結(jié)構(gòu)通過偽文件系統(tǒng)將其一部分?jǐn)?shù)據(jù)結(jié)構(gòu)暴露在內(nèi)核外,所述偽文件系統(tǒng)包括proc文件系統(tǒng)、sys文件系統(tǒng)和cgroup文件系統(tǒng)等;在達(dá)到反饋間隔時(shí)間后,所述監(jiān)控模塊2通過所述偽文件系統(tǒng)直接讀取暴露在內(nèi)核外的部分的數(shù)據(jù),獲取對應(yīng)容器的屬性信息,所述容器的屬性信息包括對應(yīng)容器的內(nèi)存資源使用情況、磁盤使用情況和網(wǎng)絡(luò)IO使用情況等。
在本發(fā)明實(shí)施例中,所述宿主機(jī)上運(yùn)行的所有容器都通過自身的根文件系統(tǒng)來獨(dú)立運(yùn)行,實(shí)現(xiàn)容器之間相互隔離,彼此不能訪問;所述容器內(nèi)部執(zhí)行的程序會(huì)將一些容器自身特定的信息輸出到自身的根文件系統(tǒng)內(nèi);在達(dá)到反饋間隔時(shí)間后,所述監(jiān)控模塊2通過讀取對應(yīng)容器內(nèi)部的根文件系統(tǒng),獲取容器內(nèi)執(zhí)行程序的執(zhí)行情況,并進(jìn)行日志收集,健康診斷等功能。
在本發(fā)明實(shí)施例中,所述LINUX操作系統(tǒng)為所有運(yùn)行的容器提供接口,在達(dá)到反饋間隔時(shí)間后,所述監(jiān)控模塊2通過調(diào)用該接口,臨時(shí)進(jìn)入對應(yīng)容器的命名空間;在所述容器內(nèi)部的執(zhí)行程序會(huì)按照任務(wù)要求進(jìn)行對容器執(zhí)行操作,包括停止容器內(nèi)部的進(jìn)程,修改容器內(nèi)部的文件等;通過操作該容器,所述執(zhí)行程序可以獲取任務(wù)執(zhí)行的結(jié)果或者容器內(nèi)部的屬性信息,所述監(jiān)控模塊2在所述容器內(nèi)部環(huán)境可以讀取到容器內(nèi)部的屬性信息以及執(zhí)行程序的執(zhí)行情況,并在獲取了對應(yīng)的容器屬性信息后離開所述容器的內(nèi)部環(huán)境;通過LINUX操作系統(tǒng)提供的接口,在其他容器達(dá)到反饋間隔時(shí)間后,所述監(jiān)控模塊2切換并臨時(shí)進(jìn)入對應(yīng)容器的命名空間,通過讀取對應(yīng)容器的屬性信息實(shí)現(xiàn)對容器的監(jiān)控。
在本發(fā)明實(shí)施例中,所述容器的監(jiān)控裝置通過所述獲取模塊1在服務(wù)器上獲取容器列表,通過所述監(jiān)控模塊2按照預(yù)設(shè)的時(shí)間間隔定期獲取容器列表中所有容器的屬性信息;通過該過程,可以實(shí)現(xiàn)運(yùn)行一個(gè)監(jiān)控程序即可對服務(wù)器上所有容器進(jìn)行監(jiān)控,而不必每一個(gè)容器分別配置一個(gè)監(jiān)控程序,只需要對每個(gè)容器設(shè)置對應(yīng)的反饋間隔,在達(dá)到反饋間隔后,獲取對應(yīng)容器的屬性信息即可對該容器的運(yùn)行實(shí)現(xiàn)監(jiān)控,既節(jié)約了服務(wù)器的資源又降低了監(jiān)控程序的復(fù)雜程度,便于進(jìn)行升級和維護(hù)。
實(shí)施例四
參閱圖4所示,為本發(fā)明所述容器的監(jiān)控裝置的第二實(shí)施例,包括:獲取模塊1和監(jiān)控模塊2。
所述獲取模塊1用于在服務(wù)器上獲取容器列表;所述獲取模塊1包括發(fā)送單元11和接收單元12。
所述發(fā)送單元11用于發(fā)送容器列表獲取指令;所述容器是一種LINUX內(nèi)核虛擬化技術(shù),可以提供輕量級的虛擬化,以便隔離進(jìn)程和資源,對服務(wù)運(yùn)行時(shí)的環(huán)境進(jìn)行隔離,被隔離出來的運(yùn)行環(huán)境就稱為容器;所述承載容器運(yùn)行的外部環(huán)境的宿主機(jī)即服務(wù)器,所述服務(wù)器上會(huì)同時(shí)運(yùn)行有多個(gè)容器,用于同時(shí)執(zhí)行多個(gè)服務(wù)進(jìn)程;在本發(fā)明實(shí)施例中,在所述服務(wù)器啟動(dòng)運(yùn)行后,所述發(fā)送單元11向所述服務(wù)器發(fā)送容器列表獲取指令。
所述接收單元12用于在服務(wù)器響應(yīng)所述容器列表獲取指令后,接收服務(wù)器返回的容器列表;所述容器列表包括容器的唯一容器標(biāo)識以及容器運(yùn)行狀態(tài)信息,所述容器標(biāo)識是標(biāo)示容器的唯一標(biāo)識,用于在宿主機(jī)中區(qū)分各個(gè)容器的身份,所述容器運(yùn)行狀態(tài)信息是指容器當(dāng)前的運(yùn)行狀態(tài),包括活動(dòng)狀態(tài)以及停止?fàn)顟B(tài);所述容器的唯一容器標(biāo)識與所述容器運(yùn)行狀態(tài)信息一一對應(yīng);所述服務(wù)器響應(yīng)所述容器列表獲取指令,向所述接收單元12返回容器列表,在本發(fā)明實(shí)施例中,所述服務(wù)器返回的容器列表是服務(wù)器上所有容器的容器標(biāo)識以及其對應(yīng)的容器運(yùn)行狀態(tài)信息經(jīng)整理后制成的列表,當(dāng)有容器的運(yùn)行狀態(tài)發(fā)生了變化或者有新的容器產(chǎn)生時(shí),所述容器列表內(nèi)的信息也會(huì)實(shí)時(shí)變更;在本發(fā)明實(shí)施例中,所述服務(wù)器在容器列表內(nèi)的信息發(fā)生變更時(shí),返回新的容器列表接收單元12。
所述監(jiān)控模塊2用于按照預(yù)設(shè)的時(shí)間間隔定期獲取容器列表中所有容器的屬性信息;所述監(jiān)控模塊2包括設(shè)定單元21、記時(shí)單元22以及讀取單元23。
所述設(shè)定單元21用于設(shè)定容器列表中每個(gè)容器的反饋間隔;在本發(fā)明實(shí)施例中,所述設(shè)定單元21僅對所述容器列表中處于活動(dòng)狀態(tài)的容器進(jìn)行反饋間隔的設(shè)定,輸出設(shè)定結(jié)果;用戶通過所述設(shè)定單元21可以對容器列表中每個(gè)處于活動(dòng)狀態(tài)的容器單獨(dú)設(shè)置反饋間隔,根據(jù)容器內(nèi)部運(yùn)行的進(jìn)程和實(shí)際需要進(jìn)行設(shè)置;在其他實(shí)施方式中,為了便于管理,可以對所有活動(dòng)狀態(tài)的容器設(shè)置統(tǒng)一的反饋間隔;所述反饋間隔是指監(jiān)控模塊2獲取一次對應(yīng)容器的屬性信息所間隔的時(shí)間;所述反饋間隔的時(shí)間根據(jù)實(shí)際情況進(jìn)行設(shè)置,如1秒,1毫秒等,當(dāng)設(shè)定的反饋間隔足夠小時(shí),在實(shí)際使用過程中可以認(rèn)為是實(shí)時(shí)反饋。
所述記時(shí)單元22用于對所有容器的運(yùn)行進(jìn)行記時(shí);在本發(fā)明實(shí)施例中,所述記時(shí)單元22對所述容器列表中所有容器進(jìn)行時(shí)間統(tǒng)計(jì),所述時(shí)間為容器持續(xù)運(yùn)行的時(shí)間,輸出記時(shí)結(jié)果,當(dāng)所述容器運(yùn)行狀態(tài)信息為停止?fàn)顟B(tài)時(shí),所述時(shí)間統(tǒng)計(jì)顯示為空。
所述讀取單元23用于讀取達(dá)到反饋間隔時(shí)間的容器的屬性信息;所述讀取單元23用于對設(shè)定結(jié)果和記時(shí)結(jié)果進(jìn)行對比,并對達(dá)到反饋間隔時(shí)間的容器的屬性信息進(jìn)行讀取和監(jiān)控。
所述讀取單元23讀取容器屬性信息的過程具體包括以下幾種方式:
在本發(fā)明實(shí)施例中,所述LINUX操作系統(tǒng)的內(nèi)核為每個(gè)容器暴露的內(nèi)核數(shù)據(jù)結(jié)構(gòu),所述內(nèi)核數(shù)據(jù)結(jié)構(gòu)通過偽文件系統(tǒng)將其一部分?jǐn)?shù)據(jù)結(jié)構(gòu)暴露在內(nèi)核外,所述偽文件系統(tǒng)包括proc文件系統(tǒng)、sys文件系統(tǒng)和cgroup文件系統(tǒng)等;在達(dá)到反饋間隔時(shí)間后,所述讀取單元23通過所述偽文件系統(tǒng)直接讀取暴露在內(nèi)核外的部分的數(shù)據(jù),獲取對應(yīng)容器的屬性信息,所述容器的屬性信息包括對應(yīng)容器的內(nèi)存資源使用情況、磁盤使用情況和網(wǎng)絡(luò)IO使用情況等。
在本發(fā)明實(shí)施例中,所述宿主機(jī)上運(yùn)行的所有容器都通過自身的根文件系統(tǒng)來獨(dú)立運(yùn)行,實(shí)現(xiàn)容器之間相互隔離,彼此不能訪問;所述容器內(nèi)部執(zhí)行的程序會(huì)將一些容器自身特定的信息輸出到自身的根文件系統(tǒng)內(nèi);在達(dá)到反饋間隔時(shí)間后,所述讀取單元23通過讀取對應(yīng)容器內(nèi)部的根文件系統(tǒng),獲取容器內(nèi)執(zhí)行程序的執(zhí)行情況,并進(jìn)行日志收集,健康診斷等功能。
在本發(fā)明實(shí)施例中,所述LINUX操作系統(tǒng)為所有運(yùn)行的容器提供接口,在達(dá)到反饋間隔時(shí)間后,所述讀取單元23通過調(diào)用該接口,臨時(shí)進(jìn)入對應(yīng)容器的命名空間;在所述容器內(nèi)部的執(zhí)行程序會(huì)按照任務(wù)要求進(jìn)行對容器執(zhí)行操作,包括停止容器內(nèi)部的進(jìn)程,修改容器內(nèi)部的文件等;通過操作該容器,所述執(zhí)行程序可以獲取任務(wù)執(zhí)行的結(jié)果或者容器內(nèi)部的屬性信息,所述讀取單元23在所述容器內(nèi)部環(huán)境可以讀取到容器內(nèi)部的屬性信息以及執(zhí)行程序的執(zhí)行情況,并在獲取了對應(yīng)的容器屬性信息后離開所述容器的內(nèi)部環(huán)境;通過LINUX操作系統(tǒng)提供的接口,在其他容器達(dá)到反饋間隔時(shí)間后,所述讀取單元23切換并臨時(shí)進(jìn)入對應(yīng)容器的命名空間,通過讀取對應(yīng)容器的屬性信息實(shí)現(xiàn)對容器的監(jiān)控。
在本發(fā)明實(shí)施例中,所述容器的監(jiān)控裝置通過所述發(fā)送單元11發(fā)送容器列表獲取指令,通過所述接收單元12在服務(wù)器響應(yīng)所述容器列表獲取指令后,接收服務(wù)器返回的容器列表,通過所述設(shè)定單元21設(shè)定容器列表中每個(gè)容器的反饋間隔,通過記時(shí)單元22對所有容器的運(yùn)行進(jìn)行記時(shí),通過所述讀取單元23讀取達(dá)到反饋間隔時(shí)間的容器的屬性信息;通過該過程,可以實(shí)現(xiàn)運(yùn)行一個(gè)監(jiān)控程序即可對服務(wù)器上所有容器進(jìn)行監(jiān)控,而不必每一個(gè)容器分別配置一個(gè)監(jiān)控程序,只需要對每個(gè)容器設(shè)置對應(yīng)的反饋間隔,在達(dá)到反饋間隔后,獲取對應(yīng)容器的屬性信息即可對該容器的運(yùn)行實(shí)現(xiàn)監(jiān)控,既節(jié)約了服務(wù)器的資源又降低了監(jiān)控程序的復(fù)雜程度,便于進(jìn)行升級和維護(hù)。
實(shí)施例五
在上述實(shí)施例的基礎(chǔ)上,為本發(fā)明所述容器的監(jiān)控裝置的實(shí)施例,包括處理器和存儲器。
所述處理器用于:在服務(wù)器上獲取容器列表;按照預(yù)設(shè)的時(shí)間間隔定期獲取容器列表中所有容器的屬性信息。
所述存儲器用于為支持所述容器的監(jiān)控裝置存儲各種類型的數(shù)據(jù)。
本領(lǐng)域技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,該程序存儲在一個(gè)存儲介質(zhì)中,包括若干指令用以使得一個(gè)設(shè)備(可以是單片機(jī),芯片等)或處理器(processor)執(zhí)行本申請各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機(jī)存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
上述實(shí)施例為本發(fā)明較佳的實(shí)施方式,但本發(fā)明的實(shí)施方式并不受上述實(shí)施例的限制,其他的任何未背離本發(fā)明的精神實(shí)質(zhì)與原理下所作的改變、修飾、替代、組合、簡化,均應(yīng)為等效的置換方式,都包含在本發(fā)明的保護(hù)范圍之內(nèi)。