解密監控寶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;容器內執行的程序數;容器的記憶體指標,rss\cache\memory_limit\total_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監控的實現原理進行的分享,大家可以註冊監控寶(www.jiankongbao.com )進行免費試用,有任何問題或需求請與我們聯絡。
文章已獲得雲智慧授權釋出。