標籤:

乾貨 | 解密監控寶Docker監控實現原理

分享人

高馳濤(Neeke),雲智慧高級架構師,PHP 開發組成員,同時也是 PECL/SeasLog 的作者。8 年研發管理經驗,早期從事大規模企業信息化研發架構,09 年涉足互聯網數字營銷領域並深入研究架構與性能優化。2014 年加入雲智慧,致力於 APM 產品的架構與研發。崇尚敏捷,高效,GettingReal。

2015年9月,企業級應用性能監控和管理服務商雲智慧正式上線了Docker監控功能,能夠實時監控Docker容器的CPU、內存、網路流量及Swap狀態,讓開發者和運維人員在使用Docker時清晰掌握其資源消耗狀況。

作為國內首家實現Docker監控的SaaS廠商,監控寶Docker監控的技術原理是什麼?相對國外的Docker監控產品有何優勢?以下是此次分享的實錄,請聽Neeke細說端詳:

1、 Docker監控概況

在雲時代,仍有大量物理機直接支持服務,相較於虛擬技術來講,這種方式已經落伍很多,於是各種開源容器技術大大推進了虛擬化技術的發展。

Docker容器相較於其他容器技術來講,是比較新的,而且發展最為迅速。原因不用多說,背後有老大哥谷歌撐腰。國內也已經興起了幾個以Docker為核心技術的創業公司,比如雲智慧的合作夥伴數人、DaoCloud,都是前景非常贊的公司。

雖然這麼火熱,但關於Docker的運維一直是個痛點。

可以說,目前全球只有兩家APM廠商提供了基於SaaS的Docker運維監控,其一是美國APM廠商New Relic,他們在6月下旬正式發布了Docker監控;另一家,則是中國APM廠商雲智慧CloudWise,在繼New Relic之後的9月7日,發布上線了Docker監控。從某種意義上講,CloudWise填補了國內Docker監控的SaaS服務空白。

2、Docker監控的工作原理

大家都知道,CloudWise在APM領域率先提出了端到端的一體化監控模型,並且在此模型上,發布了技術領先、便於部署和管理的SmartAgent軟體架構。此次Docker監控的實現,也是基於SmartAgent的架構來完成的。

SmartAgent以部署的快捷高效和智能化見長,整個部署過程中,用戶在兩分鐘內便可完成。部署分為兩部,首先下載、解壓、啟動數據發送代理SendProxy。SendProxy的作用是提供一個高效的本地數據接收隊列與數據發送引擎,並且可以在區域網內進行分散式部署,使得不能上網的機器監控也可正常地通過SendProxy高效地傳輸到雲智慧的SaaS平台。其次,下載、解壓、啟動DockerAgent。

DockerAgent使用Python進行開發並完成編譯,目前支持Ubuntu和CentOS。DockerAgent遵循了SmartAgent的插件規範,所以,無論監控寶或透視寶用戶,都可以直接使用。

DockerAgent有三個線程,分別是:DockerProcess DockerConfig DockerPing,以及一個對象Task。三個線程各司其職,同時受Task對象控制。Task中核心屬性是任務惟一標識、任務狀態以及任務頻率。這些屬性由DockerConfig與ClouwWise雲平台定時同步。

當任務狀態正常時,DockerProcess線程開始採集數據,並遵守頻率規範。DockerPing負責心跳檢測,定時產生心跳數據。這些數據,都由DockerAgent交由SendProxy,並由SendProxy存儲進入隊列,並非同步地推送至CloudWise雲平台。

前面聊到DockerAgent插件遵守了SmartAgent的插件規範,所以它像其他插件一樣,包含了 bin 、conf、lib、log等目錄,並存在一個啟動腳本。該腳本提供了start 、stop、status等命令。

以上是DockerAgent的介紹,後續SmartAgent的架構與插件規範將會陸續開源發布,屆時熱衷開源與監控的同學,都可以直接參与進來。

3、DockerAgent數據採集原理

下面我們聊一下DockerAgent採集數據的原理。DockerAgent首先會使用docker info命令來獲取docker系統信息,這些信息包含了非常有用的數據,如: Containers, Images, Name, CPUs, Data Space Used, Data Space Total, Total Memory。

這些數據看似簡單基礎,但卻可以解脫掉Docker運維同學每天重複N次的工作。其次會使用docker version來檢測docker版本,目前我們的DockerAgent僅支持1.15以上的Docker版本。

然後,使用dockerps命令來取得容器的運行信息和容器id,容器name,此時便可獲知在此台機器上正在運行的docker容器都有哪些。

最後,依次取得這些docker容器的性能指標。取得性能指標的方式,有部分使用docker原生介面,有部分是運行雲智慧自己的演算法。其中包含容器與主機的系統時區/時間;容器的cpu使用率(通過cgroup/cpuacct內該容器的cpuacct.stat取得);容器的ip;容器內運行的進程數;容器的內存指標,rsscachememory_limittotal_cwop等(通過cgroup/memory內該容器的memory.stat取得);容器的網路指標(通過ifconfig/ statistics取得)。

DockerAgent發布上線以後,在當天就接到了非常多熱心用戶的反饋。很多反饋非常好,我們也在積極地吸收和改進。為大家解決真正頭疼的Docker運維、監控、管理問題。相信在很短的時間內,將迭代出更優秀、更穩定、更符合用戶預期的DockerAgent,以此不僅填補國內的Docker監控空白,更會真正成為眾多Docker用戶、企業的夥伴,為大家解決真正頭疼的Docker運維、監控問題。

問:咱們和datadog之類docker監控有啥區別和優勢?

答:DataDog的安裝部署太過繁瑣。當時嘗試時用了一下午才跑出來數據。DataDog的圖表定義比較自由,這點是比較好的;而我們的Docker監控最大的優勢,就是零基礎部署。另外,DataDog太貴,好像一個Agent要接近100人民幣吧。目前CloudWise的DockerAgent完全免費。

問:剛才說 docherconfig 是定時與雲平台同步,同步的是docker process和docker ping採集到的數據嗎?

答:不是同步採集到的數據,是同步配置。

問:我看講的是通過sendproxy非同步到雲平台的啊,那麼dockerconfing的作用是什麼?

答:DockerConfig是定時從雲平台取得配置信息,採集到的數據,是由DockerProcess與DockerPing自行交由SendProxy。同步的數據其實就是Task的屬性,比如任務名、任務頻率、任務狀態。

問:採集數據原理是先ps命令機器上那些 docker容器,再去用docker info獲得他們的指標嗎?

答:dockerinfo是返回當前機器上整體的docker指標,然後ps取得活著的docker容器,依次取它們各自的指標。

問:那包括了ps命令出的docker嗎?ps直接就取了嗎?這麼說ps不僅僅是獲取那些活的docker容器,還包括他們指標?

答:ps取不到指標,取得的是活的容器並列舉;然後用其他的方法取它們的指標。容器名字也是ps時列舉時一起取得的。

以上是Neeke就監控寶Docker監控實現原理進行的分享,大家可以註冊監控寶進行免費試用,如有任何問題或需求請與我們聯繫。


推薦閱讀:

Docker Private Registry Notifications
Docker運行nginx
一個基於 Docker 的負載均衡實例
深度調查:24%的Docker鏡像都存在嚴重漏洞

TAG:Docker |