輕量級虛擬化容器 Docker,自發布以來便廣受業界關注,在開源界和企業界掀起了一陣風。Docker 容器相對於 VM 有如下幾個優點:啓動速度快;資源利用率高;性能開銷小。html
從圖中能夠看出 Docker 和 虛擬機的差別,虛擬機的 Guest OS 和 Hypervisor 層在 Docker 中被 Docker Engine 層所替代,Docker 有着比虛擬機更少的抽象層。因爲 Docker 不須要經過 Hypervisor 層實現硬件資源虛擬化,運行在 Docker 容器上的程序直接使用實際物理機的硬件資源。所以在 CPU、內存利用率上 Docker 略勝一籌。Docker利用的是宿主機的內核,而不須要 Guest OS,所以,當新建一個容器時,Docker 不須要和虛擬機同樣從新加載一個操做系統內核,所以新建一個 Docker 容器只須要幾秒鐘。web
既然 Docker 這麼火,那麼問題來了,爲了可以更精確的分配每一個容器能使用的資源,咱們想要實時獲取容器運行時使用資源的狀況,怎樣對 Docker 上的應用進行監控呢?Docker 的結構會不會加大監控難度?docker
咱們都瞭解, container 至關於小型 host,能夠說存在於 hosts 與應用之間的監控盲區,不管是傳統的基礎組件監控仍是應用性能監控的方式,都很難有效地監控 Docker。瞭解了一下現有的 Docker 相關監測 App 和服務,包括簡單的開源工具和複雜的企業總體解決方案,下面列舉幾種Docker 監控工具做爲參考:數據庫
1. cAdvisor瀏覽器
谷歌的 container introspection 解決方案是 cAdvisor,這是一個 Docker 容器內封裝的實用工具,可以蒐集、集料、處理和導出運行中的容器的信息。經過它能夠看到 CPU 的使用率、內存使用率、網絡吞吐量以及磁盤空間利用率。而後,你能夠經過點擊在網頁頂部的 Docker Containers 連接,而後選擇某個容器來詳細瞭解它的使用狀況。cAdvisor 部署和使用簡單,但它只能夠監視在同一個 host 上運行的容器,對多節點部署不是太管用。網絡
2. Cloud Insight架構
在咱們列舉的幾個監控 Docker 的服務或平臺中,這是惟一一款國內產品。Cloud Insight 支持多種操做系統、雲主機、數據庫和中間件的監控,原理是在平臺服務儀表盤和自定義儀表盤中,採集並處理 Metric,對數據進行聚合與分組等計算,提供曲線圖、柱狀圖等多樣化的展示形式。優勢是監控的指標很全,簡單易用,但目前正式版還未上線,能夠期待一下。運維
3. Scoutjvm
Scout 是一款監視服務,並非一個獨立的開源項目。它有大量的插件,除了 Docker 信息還能夠吸取其餘有關部署的數據。所以 Scout 算是一站式監控系統,無需對系統的各類資源來安裝各類不一樣的監控系統。 Scout 的一個缺點是,它不顯示有關每一個主機上單獨容器的詳細信息。此外,每一個監控的主機十美圓這樣略微昂貴的價格也是是否選擇 Scout 做爲監控服務的一個考慮因素,若是運行一個有多臺主機的超大部署,成本會比較高。 微服務
4. Sematext
Sematext 也是一款付費監控解決方案,計劃收費方案是3.5美分/小時。一樣也支持 Docker 監控,還包括對容器級事件的監測(中止、開始等等)和管理容器產生的日誌。
時間關係咱們選擇了其中安裝最簡單的 Cloud Insight 來試驗監控基於 Docker 的一個應用——Acme 的運行狀況,後期時間容許會將其餘幾種監控方式都試一遍。
單方面監控 Docker 可能並不太適合與業務掛鉤的應用,當業務量上漲,不僅僅是 Docker 的負載上升,其餘 JVM 指標也能也會出現上升的趨勢。
咱們嘗試使用一個支持比較多中間件、數據庫、操做系統、容器的 Cloud Insight 來講明這個實際的場景。
Cloud Insight 因爲是一個 SaaS 監控方案,相對來講它的安裝和部署都比較簡單。在此次監控實戰中,咱們以 AcmeAir 爲實驗對象:一個能夠模擬壓力的電子商務類應用。
AcmeAir 是一款由原 IBM 新技術架構部資深工程師 Andrew Spyker,利用 Netflix 開源的 Netflix OSS 打造的開源電子商務應用。此應用具備以下特性:
模擬提供航班訂票服務。用戶能夠經過移動設備或者 web 瀏覽器,完成新用戶註冊,用戶登陸,航班查詢,訂票等操做。
AcmeAir 融入了 Docker,微服務架構等理念。並採用 Tomcat、Node.js、WebSphere Application Server、WebSphere Extreme Scale、MongoDB、Cassandra 分別打造了不一樣版本的實現。
AcmeAir 利用 JMeter 模擬用戶行爲。可經過動態調整用戶數量,模擬產生各類壓力的事物流量。並可在應用中預先植入錯誤代碼,模擬各類故障場景。該應用可作爲壓力測試,終端用戶體驗異常檢測,故障診斷等各類測試場景的測試用例。
首先,咱們要打開 Cloud Insight 監控,還好 Cloud Insight 安裝簡單,一條命令便可。接着,咱們新建一個用於這次監控的儀表盤,依次將想要獲取的指標通通添加進去。好比,選中 jvm.non_heap_memory
這個指標,選擇按照 instance
分組。
咱們添加如下指標:
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
應用 Acme 部署在四臺 servers 上,咱們開啓四臺 servers, 而後用 JMeter 給應用加壓。隨着時間 JMeter 不斷給應用加壓。
當 users 人數達到 188 時,咱們再來看一下儀表盤的視圖。
從圖中能夠看到,性能數據發生了變化,根據 JMeter 裏的數據,此時 CPU 佔用超過了50%,錯誤率也有所提高;對比來看,根據 Cloud Insight 裏的曲線顯示,藍色的線所表明的 Container CPU 佔用率已經超過50%,逐漸接近75%,系統剩餘的 CPU 資源逐漸降低,該 Container 的系統 CPU 資源消耗也忽然增大。咱們能夠經過這些定位到 CPU 佔用率太高的 Container ,及時而主動地去了解性能瓶頸,從而優化性能,合理分配資源。
Cloud Insight 所抓取的性能指標算是較爲全面,部署和展示方式都是至關簡單易懂的,對這個產品能夠期待一下。
Cloud Insight 集監控、管理、計算、協做、可視化於一身,幫助全部 IT 公司,減小在系統監控上的人力和時間成本投入,讓運維工做更加高效、簡單。想閱讀更多技術文章,請訪問 OneAPM 官方博客。