輕量級(jí)虛擬化容器 Docker,自發(fā)布以來便廣受業(yè)界關(guān)注云茸,在開源界和企業(yè)界掀起了一陣風(fēng)是目。Docker 容器相對于 VM 有以下幾個(gè)優(yōu)勢:啟動(dòng)速度快;資源利用率高标捺;性能開銷小懊纳。
從圖中可以看出 Docker 和 虛擬機(jī)的差異揉抵,虛擬機(jī)的 Guest OS 和 Hypervisor 層在 Docker 中被 Docker Engine 層所替代,Docker 有著比虛擬機(jī)更少的抽象層长踊。由于 Docker 不需要通過 Hypervisor 層實(shí)現(xiàn)硬件資源虛擬化功舀,運(yùn)行在 Docker 容器上的程序直接使用實(shí)際物理機(jī)的硬件資源。因此在 CPU身弊、內(nèi)存利用率上 Docker ?略勝一籌辟汰。Docker利用的是宿主機(jī)的內(nèi)核,而不需要 Guest OS阱佛,因此帖汞,當(dāng)新建一個(gè)容器時(shí),Docker 不需要和虛擬機(jī)一樣重新加載一個(gè)操作系統(tǒng)內(nèi)核凑术,因此新建一個(gè) Docker 容器只需要幾秒鐘翩蘸。
既然 Docker 這么火,那么問題來了淮逊,為了能夠更精確的分配每個(gè)容器能使用的資源催首,我們想要實(shí)時(shí)獲取容器運(yùn)行時(shí)使用資源的情況,怎樣對 Docker 上的應(yīng)用進(jìn)行監(jiān)控呢泄鹏?Docker 的結(jié)構(gòu)會(huì)不會(huì)加大監(jiān)控難度郎任?
我們都了解, container 相當(dāng)于小型 host备籽,可以說存在于 hosts 與應(yīng)用之間的監(jiān)控盲區(qū)舶治,無論是傳統(tǒng)的基礎(chǔ)組件監(jiān)控還是應(yīng)用性能監(jiān)控的方式,都很難有效地監(jiān)控 Docker车猬。了解了一下現(xiàn)有的 Docker 相關(guān)監(jiān)測 App 和服務(wù)霉猛,包括簡單的開源工具和復(fù)雜的企業(yè)整體解決方案,下面列舉幾種Docker 監(jiān)控工具作為參考:
1. cAdvisor
谷歌的 container introspection 解決方案是 cAdvisor珠闰,這是一個(gè) Docker 容器內(nèi)封裝的實(shí)用工具惜浅,能夠搜集、集料铸磅、處理和導(dǎo)出運(yùn)行中的容器的信息赡矢。通過它可以看到 CPU 的使用率、內(nèi)存使用率阅仔、網(wǎng)絡(luò)吞吐量以及磁盤空間利用率吹散。然后,你可以通過點(diǎn)擊在網(wǎng)頁頂部的 Docker Containers 鏈接八酒,然后選擇某個(gè)容器來詳細(xì)了解它的使用情況空民。cAdvisor 部署和使用簡單,但它只可以監(jiān)視在同一個(gè) host 上運(yùn)行的容器,對多節(jié)點(diǎn)部署不是太管用界轩。
2. Cloud Insight
在我們列舉的幾個(gè)監(jiān)控 Docker 的服務(wù)或平臺(tái)中画饥,這是唯一一款國內(nèi)產(chǎn)品。Cloud Insight 支持多種操作系統(tǒng)浊猾、云主機(jī)抖甘、數(shù)據(jù)庫和中間件的監(jiān)控,原理是在平臺(tái)服務(wù)儀表盤和自定義儀表盤中葫慎,采集并處理 Metric衔彻,對數(shù)據(jù)進(jìn)行聚合與分組等計(jì)算,提供曲線圖偷办、柱狀圖等多樣化的展現(xiàn)形式艰额。優(yōu)點(diǎn)是監(jiān)控的指標(biāo)很全,簡單易用椒涯,但目前正式版還未上線柄沮,可以期待一下。
3. Scout
Scout 是一款監(jiān)視服務(wù)废岂,并不是一個(gè)獨(dú)立的開源項(xiàng)目祖搓。它有大量的插件,除了 Docker 信息還可以吸收其他有關(guān)部署的數(shù)據(jù)湖苞。因此 Scout 算是一站式監(jiān)控系統(tǒng)棕硫,無需對系統(tǒng)的各種資源來安裝各種不同的監(jiān)控系統(tǒng)。 Scout 的一個(gè)缺點(diǎn)是袒啼,它不顯示有關(guān)每個(gè)主機(jī)上單獨(dú)容器的詳細(xì)信息。此外纬纪,每個(gè)監(jiān)控的主機(jī)十美元這樣略微昂貴的價(jià)格也是是否選擇 Scout 作為監(jiān)控服務(wù)?的一個(gè)考慮因素蚓再,如果運(yùn)行一個(gè)有多臺(tái)主機(jī)的超大部署,成本會(huì)比較高包各。
4. Sematext
Sematext 也是一款付費(fèi)監(jiān)控解決方案摘仅,計(jì)劃收費(fèi)方案是3.5美分/小時(shí)。同樣也支持 Docker 監(jiān)控问畅,還包括對容器級(jí)事件的監(jiān)測(停止娃属、開始等等)和管理容器產(chǎn)生的日志。
時(shí)間關(guān)系我們選擇了其中安裝最簡單的 Cloud Insight 來試驗(yàn)監(jiān)控基于 Docker 的一個(gè)應(yīng)用——Acme 的運(yùn)行情況护姆,后期時(shí)間允許會(huì)將其他幾種監(jiān)控方式都試一遍矾端。
Docker 監(jiān)控實(shí)戰(zhàn)
單方面監(jiān)控 Docker 可能并不太適合與業(yè)務(wù)掛鉤的應(yīng)用,當(dāng)業(yè)務(wù)量上漲卵皂,不單單是 Docker 的負(fù)載上升秩铆,其他 JVM 指標(biāo)也能也會(huì)出現(xiàn)上升的趨勢。
我們嘗試使用一個(gè)支持比較多中間件、數(shù)據(jù)庫殴玛、操作系統(tǒng)捅膘、容器的 Cloud Insight 來說明這個(gè)實(shí)際的場景。
Cloud Insight
Cloud Insight 由于是一個(gè) SaaS 監(jiān)控方案滚粟,相對來說它的安裝和部署都比較簡單寻仗。在這次監(jiān)控實(shí)戰(zhàn)中,我們以 AcmeAir 為實(shí)驗(yàn)對象:一個(gè)可以模擬壓力的電子商務(wù)類應(yīng)用凡壤。
AcmeAir 是一款由原 IBM 新技術(shù)架構(gòu)部資深工程師 Andrew Spyker署尤,利用 Netflix 開源的 Netflix OSS 打造的開源電子商務(wù)應(yīng)用。此應(yīng)用具有如下特性:
- 模擬提供航班訂票服務(wù)鲤遥。用戶可以通過移動(dòng)設(shè)備或者 web 瀏覽器沐寺,完成新用戶注冊,用戶登錄盖奈,航班查詢混坞,訂票等操作。
- AcmeAir 融入了 Docker钢坦,微服務(wù)架構(gòu)等理念究孕。并采用 Tomcat、Node.js爹凹、WebSphere Application Server厨诸、WebSphere Extreme Scale、MongoDB禾酱、Cassandra 分別打造了不同版本的實(shí)現(xiàn)微酬。
- AcmeAir 利用 JMeter 模擬用戶行為〔眨可通過動(dòng)態(tài)調(diào)整用戶數(shù)量颗管,模擬產(chǎn)生各種壓力的事物流量。并可在應(yīng)用中預(yù)先植入錯(cuò)誤代碼滓走,模擬各種故障場景垦江。該應(yīng)用可做為壓力測試,終端用戶體驗(yàn)異常檢測搅方,故障診斷等各種測試場景的測試用例比吭。
首先,我們要打開 Cloud Insight 監(jiān)控姨涡,還好 Cloud Insight 安裝簡單衩藤,一條命令即可。接著绣溜,我們新建一個(gè)用于此次監(jiān)控的儀表盤慷彤,依次將想要獲取的指標(biāo)統(tǒng)統(tǒng)添加進(jìn)去。比如,選中 jvm.non_heap_memory
這個(gè)指標(biāo)底哗,選擇按照 instance
分組岁诉。
我們添加以下指標(biāo):
- docker.cpu.user
- docker.cpu.sysytem
- docker.containers.running
- jvm.heap_memory
- jvm.non_heap_memory
- jvm.gc.cms.count
- jvm.heap_memory_max
- jvm.gc.parnew.time
應(yīng)用 Acme 部署在四臺(tái) servers 上,我們開啟四臺(tái) servers, 然后用 JMeter 給應(yīng)用加壓跋选。隨著時(shí)間 JMeter 不斷給應(yīng)用加壓涕癣。
當(dāng) users 人數(shù)達(dá)到 188 時(shí)塑煎,我們再來看一下儀表盤的視圖袖牙。
從圖中可以看到牛隅,性能數(shù)據(jù)發(fā)生了變化仗哨,根據(jù) JMeter 里的數(shù)據(jù),此時(shí) CPU 占用超過了50%业稼,錯(cuò)誤率也有所提升突倍;對比來看妖滔,根據(jù) Cloud Insight 里的曲線顯示俭尖,藍(lán)色的線所代表的 Container CPU 占用率已經(jīng)超過50%氢惋,逐漸接近75%,系統(tǒng)剩余的 CPU 資源逐漸下降稽犁,該 Container 的系統(tǒng) CPU 資源消耗也突然增大焰望。我們可以通過這些定位到 CPU 占用率過高的 Container ,及時(shí)而主動(dòng)地去了解性能瓶頸已亥,從而優(yōu)化性能熊赖,合理分配資源。
Cloud Insight 所抓取的性能指標(biāo)算是較為全面虑椎,部署和展現(xiàn)方式都是相當(dāng)簡單易懂的震鹉,對這個(gè)產(chǎn)品可以期待一下。
Cloud Insight 集監(jiān)控捆姜、管理足陨、計(jì)算、協(xié)作娇未、可視化于一身,幫助所有 IT 公司星虹,減少在系統(tǒng)監(jiān)控上的人力和時(shí)間成本投入零抬,讓運(yùn)維工作更加高效、簡單宽涌。想閱讀更多技術(shù)文章平夜,請?jiān)L問 OneAPM 官方博客。