Docker監控實戰分析
大小:0.4 MB 人氣: 2017-10-13 需要積分:1
那為什么 Docker 越來越火呢?一談起 Docker 總是會跟著讓人聯想到輕量這個詞,甚至會有一種通過 Docker 啟動一個服務會節省很多資源的錯覺。然而 Docker 的「輕」也只是相對于傳統虛擬機而已。傳統虛擬機和 Docker 的對比如圖:
從圖中可以看出 Docker 和 虛擬機的差異,虛擬機的 Guest OS 和 Hypervisor 層在 Docker 中被 Docker Engine 層所替代,Docker 有著比虛擬機更少的抽象層。
由于 Docker 不需要通過 Hypervisor 層實現硬件資源虛擬化,運行在 Docker 容器上的程序直接使用實際物理機的硬件資源。因此在 CPU、內存利用率上 Docker 略勝一籌。
Docker 利用的是宿主機的內核,而不需要 Guest OS,因此,當新建一個容器時,Docker 不需要和虛擬機一樣重新加載一個操作系統內核,因此新建一個 Docker 容器只需要幾秒鐘。
總結一下 Docker 容器相對于 VM 有以下幾個優勢:啟動速度快、資源利用率高、性能開銷小。
Docker 監控方案
那么,既然 Docker 這么火,Docker 監控是不是也該提上日程?或許具體問題要具體分析,但是似乎大家都在使用開源的監控方案,來解決 Docker監控的問題。
就拿騰訊游戲來說吧,我們看看尹燁(騰訊互娛運營部高級工程師, 干貨 | 騰訊游戲是如何使用 Docker 的?)怎么說:
容器的監控問題也花了我們很多精力。監控、告警是運營系統最核心的功能之一,騰訊內部有一套很成熟的監控告警平臺,而且開發運維同學已經習慣這套平臺,如果我們針對 Docker 容器再開發一個監控告警平臺,會花費很多精力,而且沒有太大的意義。所以,我們盡量去兼容公司現有的監控告警平臺。每個容器內部會運行一個代理,從 /proc 下面獲取 CPU、內存、IO 的信息,然后上報公司的監控告警平臺。但是,默認情況下,容器內部的 proc 顯示的是 Host 信息,我們需要用 Host 上 cgroup 中的統計信息來覆蓋容器內部的部分 proc 信息。我們基于開源的 lxcfs,做了一些改造實現了這個需求。
這些解決方案都是基于開源系統來實現的,當然,我們也會把我們自己覺得有意義的修改回饋給社區,我們給 Docker、Kubernetes 和 lxcfs 等開源項目貢獻了一些 patch。融入社區,與社區共同發展,這是一件很有意義的事情。
在沒有專業運維團隊來監控 Docker 的情況下,并且還想加快 Docker 監控的進程,該怎么辦呢?
為了能夠更精確的分配每個容器能使用的資源,我們想要實時獲取容器運行時使用資源的情況,怎樣對 Docker 上的應用進行監控呢?Docker 的結構會不會加大監控難度?
我們都了解, container 相當于小型 host,可以說存在于 hosts 與應用之間的監控盲區,無論是傳統的基礎組件監控還是應用性能監控的方式,都很難有效地監控 Docker。了解了一下現有的 Docker 相關監測 App 和服務,包括簡單的開源工具和復雜的企業整體解決方案,下面列舉其中的幾種作為參考:
1. cAdvisor
谷歌的 container introspection 解決方案是 cAdvisor,這是一個 Docker 容器內封裝的工具,能夠采集、處理和導出運行中的容器的數據。通過它可以看到 CPU 的使用率、內存使用率、網絡吞吐量以及磁盤空間利用率等。同時,你還可以通過點擊在網頁頂部的 Docker Containers 鏈接,選擇某個容器來詳細了解它的使用情況。cAdvisor 部署和使用簡單,但它只可以監視在同一個 host 上運行的容器,對多節點部署不是太管用。
2. Cloud Insight
在我們列舉的幾個監控 Docker 的服務或平臺中,這是唯一一款國內產品。 Cloud Insight支持多種操作系統、云主機、數據庫和中間件的監控,原理是在平臺服務儀表盤和自定義儀表盤中,采集并處理 Metric,對數據進行聚合與分組等計算,提供曲線圖、柱狀圖等多樣化的展現形式。優點是監控的指標很全,簡單易用,可以期待一下。
3. Scout
Scout 是一款監視服務,并不是一個獨立的開源項目。它有大量的插件,除了 Docker 信息還可以吸收其他有關部署的數據。因此 Scout 算是一站式監控系統,無需對系統的各種資源來安裝各種不同的監控系統。 Scout 的一個缺點是,它不顯示有關每個主機上單獨容器的詳細信息。此外,每個監控的主機十美元這樣略微昂貴的價格也是是否選擇 Scout 作為監控服務的一個考慮因素,如果運行一個有多臺主機的超大部署,成本會比較高。
4. Sematext
Sematext 也是一款付費監控解決方案,計劃收費方案是3.5美分/小時。同樣也支持 Docker 監控,還包括對容器級事件的監測(停止、開始等等)和管理容器產生的日志。
5. Prometheus
Prometheus 由 SoundCloud 發明,適合于監控基于容器的基礎架構。支持監控容器的資源和運行特性,支持多維度查詢,能聚合 Docker 監控數據。
Docker 監控實踐
數據的聚合&分組,是運維2.0時代的重頭戲,因此我們重點選取其中比較有這個方面代表性的兩個監控方案來看看具體的 Docker 監控過程。
先借鑒「Monitor Docker Containers with Prometheus](http://5pi.de/2015/01/26/monitor-docker-container」一文中的介紹,來說說這套開源的 Docker 監控方案:Prometheus;而此篇文字的原文地址:Monitor Docker Containers with Prometheus。
Prometheus 由 SoundCloud 發明,可用于監控基于容器的基礎架構。Prometheus 特點是高維度數據模型,時間序列是通過一個度量值名字和一套鍵值對識別。靈活的查詢語言允許查詢和繪制數據。它采用了先進的度量標準類型像匯總(summaries),從指定時間跨度的總數構建比率或者是在任何異常的時候報警并且沒有任何依賴,中斷期間使它成為一個可靠的系統進行調試。
Prometheus 支持維度數據,你可以擁有全局和簡單的指標名像 container_memory_usage_bytes,使用多個維度來標識你服務的指定實例。
可以創建一個簡單的 container-exporter來收集 Docker 容器的指標以及輸出給 Prometheus 來消費。這個輸出器使用容器的名字,id 和 鏡像作為維度。額外的 per-exporter維度可以在 prometheus.conf中設置。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%