對宿主機中容器進行本地實時監(jiān)控的方法、裝置及系統(tǒng)的制作方法
【技術領域】
[0001] 本發(fā)明涉及互聯網技術領域,具體涉及一種對宿主機中容器進行本地實時監(jiān)控的 方法、裝置及系統(tǒng)。
【背景技術】
[0002] LXC(LinuxContainer)容器是一種內核虛擬化技術,可以提供輕量級的虛擬化, 以便隔離進程和資源,而且不需要提供指令解釋機制以及全虛擬化的其他復雜性。相當于 C++中的命名空間(NameSpace)。容器有效地將由單個操作系統(tǒng)管理的資源劃分到孤立的 組中,以更好地在孤立的組之間平衡有沖突的資源使用需求。
[0003] Docker是PaaS提供商dotCloud開源的一個基于LXC的高級容器引擎,源代碼托 管在Github上,基于go語言并遵從Apache2. 0協議開源。簡單得來說,Docker是一個由 GO語言寫的程序運行的"容器"(Linuxc〇ntainers,LXCs);目前云服務的基石是操作系統(tǒng) 級別的隔離,在同一臺宿主機上虛擬出多個主機。Docker則實現了一種應用程序級別的隔 離,它改變我們基本的開發(fā)、操作單元,由直接操作虛擬主機(VM)轉換到操作程序運行的 "容器"上來。
[0004] 隨著Docker的發(fā)展,在一臺Docker宿主機中啟動的容器越來越多。在此Docker 宿主機中,運維人員需要查看各個容器的運行狀態(tài)時,需要手動在Docker系統(tǒng)內輸入監(jiān)控 命令或查看運行文件。以查看某個容器的cpu占用信息為例,需要手動打開cgroup目錄下 的運行文件,拷貝每一秒的cpu運行數據,然后找到對應容器的cpu數據進行查看。這種手 動的方式非常繁瑣,尤其對于同時運行很多容器的Docker宿主機來說,每個容器的數據都 需要手動輸入各自的命令去查看,執(zhí)行效率低下,不能實時反映各個容器的監(jiān)控信息。
【發(fā)明內容】
[0005] 鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上 述問題的對宿主機中容器進行本地實時監(jiān)控的方法、裝置及系統(tǒng)。
[0006] 根據本發(fā)明的一個方面,提供了一種對宿主機中容器進行本地實時監(jiān)控的方法, 包括:
[0007] 掃描宿主機內處于存活狀態(tài)的容器,更新容器列表;
[0008] 為所述容器列表中每個處于存活狀態(tài)的容器配置對應的進程;
[0009] 各個進程同步抽取各自容器的原始狀態(tài)信息;以及
[0010] 對各容器的原始狀態(tài)信息進行處理得到監(jiān)控信息,以進行顯示。
[0011] 根據本發(fā)明的另一個方面,提供了一種對宿主機中容器進行本地實時監(jiān)控的方 法,包括:
[0012] 根據終端發(fā)送的監(jiān)控命令,掃描宿主機內處于存活狀態(tài)的容器,更新容器列表;
[0013] 為所述容器列表中每個處于存活狀態(tài)的容器配置對應的進程;
[0014] 各個進程同步抽取各自容器的原始狀態(tài)信息;以及
[0015] 對各容器的原始狀態(tài)信息進行處理得到監(jiān)控信息;
[0016] 將所有容器的監(jiān)控信息發(fā)送給所述終端,所述終端顯示所有容器的監(jiān)控信息。
[0017] 根據本發(fā)明的另一方面,提供了一種對宿主機中容器進行本地實時監(jiān)控的裝置, 包括:
[0018] 配置模塊,適于為所述容器列表中每個處于存活狀態(tài)的容器配置對應的進程;
[0019] 抽取模塊,適于各個進程同步抽取各自容器的原始狀態(tài)信息;
[0020] 處理模塊,適于對各容器的原始狀態(tài)信息進行處理得到監(jiān)控信息,以進行顯示。
[0021] 根據本發(fā)明的另一方面,提供了一種對宿主機中容器進行本地實時監(jiān)控的系統(tǒng), 該系統(tǒng)包括上述對宿主機中容器進行本地實時監(jiān)控的裝置和終端,所述終端適于:向所述 裝置發(fā)送監(jiān)控命令,以及接收所述裝置返回的所有容器的監(jiān)控信息并顯示。
[0022] 通過本發(fā)明提供的監(jiān)控方法、裝置及系統(tǒng),為每個處于存活狀態(tài)的容器創(chuàng)建各自 的進程,采用多進程并行運行的方式,抽取各個容器的監(jiān)控信息進行展示。利用本方案,運 維人員只需啟動本地監(jiān)控程序,該本地監(jiān)控程序利用創(chuàng)建的多進程抽取各個容器的監(jiān)控信 息,與現有技術繁瑣的手動方式相比,大大提高了執(zhí)行效率。而且,由于多個進程同步抽取 監(jiān)控信息,這樣刷新展示的時候顯示的是多個容器在同一時刻的監(jiān)控數據,運維人員可依 據這些監(jiān)控數據對多個容器的狀態(tài)進行比較分析,更有利于反映出宿主機內各個容器的運 行狀態(tài),提升了監(jiān)控效率。
[0023] 上述說明僅是本發(fā)明技術方案的概述,為了能夠更清楚了解本發(fā)明的技術手段, 而可依照說明書的內容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠 更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
【附圖說明】
[0024] 通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領域普通 技術人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明 的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0025] 圖1示出了根據本發(fā)明一個實施例的對宿主機中容器進行本地實時監(jiān)控的方法 的流程圖;
[0026] 圖2示出了根據本發(fā)明另一個實施例的對宿主機中容器進行本地實時監(jiān)控的方 法的流程圖;
[0027] 圖3示出了根據本發(fā)明一個實施例的對宿主機中容器進行本地實時監(jiān)控的方法 裝置的功能結構框圖;以及
[0028] 圖4示出了根據本發(fā)明一個實施例的對宿主機中容器進行本地實時監(jiān)控的方法 系統(tǒng)的功能結構框圖。
【具體實施方式】
[0029] 下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開 的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這里闡述的實施例 所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍 完整的傳達給本領域的技術人員。
[0030] 圖1示出了根據本發(fā)明一個實施例的對宿主機中容器進行本地實時監(jiān)控的方法 的流程圖。如圖1所示,本方法包括以下步驟:
[0031] 步驟S101,掃描宿主機內處于存活狀態(tài)的容器,更新容器列表。
[0032] 本發(fā)明在宿主機內部啟動本地監(jiān)控程序(也稱:localmonitor),本地監(jiān)控程序定 時掃描宿主機內處于存活狀態(tài)的容器,更新容器列表,容器列表中記錄有處于存活狀態(tài)的 容器名稱。
[0033] 步驟S102,為容器列表中每個處于存活狀態(tài)的容器配置對應的進程。
[0034] 本發(fā)明的本地監(jiān)控程序在第一次啟動時為容器列表中每個處于存活狀態(tài)的容器 創(chuàng)建對應的進程。在后續(xù)定時執(zhí)行本方法的過程中,在更新容器列表后,先查找上一次方法 執(zhí)行時是否已存在各個容器對應的進程,若未查找到某個容器的進程,則為該容器創(chuàng)建進 程。通過本步驟,保證宿主機內存活的容器都有對應的進程為其實行監(jiān)控服務。也即,本方 法為多進程的處理方法,多個進程并行執(zhí)行以獲取各個容器的監(jiān)控信息。
[0035] 步驟S103,各個進程同步抽取各自容器的原始狀態(tài)信息。
[0036] 本步驟中,各個進程是同步運行的,每個進程負責抽取其對應的容器的原始狀態(tài) 信息。
[0037] 步驟S104,對各容器的原始狀態(tài)信息進行處理得到監(jiān)控信息,以進行顯示。
[0038] 在每個進程抽取各自容器的原始狀態(tài)信息之后,可以對各容器的原始狀態(tài)信息進 行處理得到監(jiān)控信息,將這些監(jiān)控信息匯總起來,而后由用于進行顯示的終端將各個容器 的監(jiān)控信息進行刷新顯示,以同時展示宿主機內處于存活狀態(tài)的所有容器的監(jiān)控信息。應 可理解,上述對原始狀態(tài)信息的處理可以由各個進程分別執(zhí)行,也可以由相同進程/模塊 統(tǒng)一執(zhí)行。
[0039] 通過本實施例提供的監(jiān)控方法,為每個處于存活狀態(tài)的容器創(chuàng)建各自的進程,采 用多進程并行運行的方式,抽取處理得到各個容器的監(jiān)控信息進行展示。利用本方法,運 維人員只需啟動本地監(jiān)控程序,該本地監(jiān)控程序利用創(chuàng)建的多進程抽取各個容器的監(jiān)控信 息,與現有技術繁瑣的手動方式相比,大大提高了執(zhí)行效率。而且,由于多個進程同步抽取 處理得到監(jiān)控信息,這樣刷新展示的時候顯示的是多個容器在同一時刻的監(jiān)控數據,運維 人員可依據這些監(jiān)控數據對多個容器的狀態(tài)進行比較分析,更有利于反映出宿主機內各個 容器的運行狀態(tài),提升了監(jiān)控效率。
[0040] 圖2示出了根據本發(fā)明另一個實施例的對宿主機中容器進行本地實時監(jiān)控的方 法的流程圖。本實施例以宿主機為基于Docker應用容器引擎的服務器為例進行說明,以下 稱這樣的宿主機為Docker宿主機。Docker宿主機根據終端發(fā)送的監(jiān)控命令啟動本地監(jiān)控 程序,本地監(jiān)控程序每隔預定時間定時運行執(zhí)行如圖2所示的方法,該方法具體包括以下 步驟:
[0041] 步驟S201,調用Docker應用容器引擎的接口,查看處于存活狀態(tài)的容器,更新容 器列表。
[0042] Docker作為開源工具提供了許多可調用接口,本地監(jiān)控程序可通過調用對應的接 口查找到當前處于存活狀態(tài)的容器列表。本實施例中,本地監(jiān)控程序調用容器發(fā)現接口,具 體代碼實現如下:
[0043]
[0044] 上述容器發(fā)現接口調用后所返回的值就是容器列表,可選地,將容器列表處理為 json格式,如下:
[0045] {"data":[{" {#N0DE}":"c0021v. add. bjdt. qihoo. net"},{" {#N0DE}":"c0016v. add.bjdt.qihoo.net"},{ ''{#N0DE}":"cOOlOv. add. bjdt. qihoo. net''},{" {#N0DE}":"c0006v. add. bjdt. qihoo. net''},{"