分享Docker監控體系(Kubernetes Mesos監控)

常不釋放資源,造成高CPU佔用;比如進程結束異常,不停的重啓相同的進程;比如日誌級別設置過低,大量日誌輸出,影響進程性能和佔用大量磁盤空間。所以做監控時一定要遵循有自我安全控制的能力。監控工具在拿到生產環境中運行前,一定要先在測試環境中進行一段時間的試運行 。

3、觸發式的數據採集

需要關注異常點的現場數據採集,比如threaddump,heapdump,主機的性能數據等。這些故障點的數據重啓後就會失去,有些故障不能重現時,相關的分析數據就很重要了,所以對於這些數據,需要進行觸發式的數據採集。當滿足某些條件時觸發採集,而在平常不運行。

容器的監控方案

傳統的監控系統大多是針對物理機或虛擬機設計的,物理機和虛擬機的特點是靜態的,生命週期長,一個環境安裝配置好後可能幾年都不會去變動,那麼對監控系統來說,監控對像是靜態的,對監控對象做的監控配置也是靜態的,系統上線部署好監控後基本就不再需要管理。

雖然物理機,虛擬機,容器對於應用進程來說都是host環境,容器也是一個輕量級的虛擬機, 但容器是動態的, 生命週期短,特別是在微服務的分佈式架構下,容器的個數,IP地址隨時可能變化。如果還採用原來傳統監控的方案,則會增加監控的複雜度。比如對於一個物理機或虛擬機,我們只要安裝一個監控工具的agent就可以了,但如果在一個物理機上運行了無數個容器,也採用安裝agent的方式,就會增加agent對資源的佔用,但因爲容器是與宿主機是共享資源,所以在容器內採集的性能數據會是宿主機的數據,那就失去在容器內採集數據的意義了。

而且往往容器的數量比較多,那麼採集到的數量也會非常多,容器可能啓動幾分鐘就停止了,那麼原來採集的數據就沒有價值了,則會產生大量這樣沒有價值的監控數據,維護起來也會非常的複雜。那麼應該如何對容器進行監控呢?答案是在容器外,宿主機上進行監控。這樣不僅可以監控到每個容器的資源使用情況,還可以監控到容器的狀態,數量等數據。

單臺主機上容器的監控

單臺主機上容器的監控實現最簡單的方法就是使用命令Docker stats,就可以顯示所有容器的資源使用情況,如下輸出:

雖然可以很直觀地看到每個容器的資源使用情況,但是顯示的只是一個當前值,並不能看到變化趨勢。而谷歌提供的圖形化工具不僅可以看到每個容器的資源使用情況,還可以看到主機的資源使用情況,並且可以設置顯示一段時間內的越勢。以下是cAdvisor的面板:

而且cAdivsor的安裝非常簡單,下載一個cAdvisor的容器啓動後,就可以使用主機IP加默認端口8080進行訪問了。

跨多臺主機上容器的監控

cAdivsor雖然能採集到監控數據,也有很好的界面展示,但是並不能顯示跨主機的監控數據,當主機多的情況,需要有一種集中式的管理方法將數據進行彙總展示,最經典的方案就是 cAdvisor+ Influxdb+grafana,可以在每臺主機上運行一個cAdvisor容器負責數據採集,再將採集後的數據都存到時序型數據庫influxdb中,再通過圖形展示工具grafana定製展示面板。結構如下:

這三個工具的安裝也非常簡單,可以直接啓動三個容器快速安裝。如下所示:

在上面的安裝步驟中,先是啓動influxdb容器,然後進行到容器內部配置一個數據庫給cadvisor專用,然後再啓動cadvisor容器,容器啓動的時候指定把數據存儲到influxdb中,最後啓動grafana容器,在展示頁面裏配置grafana的數據源爲influxdb,再定製要展示的數據,一個簡單的跨多主機的監控系統就構建成功了。下圖爲Grafana的界面:

Kubernetes上容器的監控

在Kubernetes的新版本中已經集成了cAdvisor,所以在Kubernetes架構下,不需要單獨再去安裝cAdvisor,可以直接使用節點的IP加默認端口4194就可以直接訪問cAdvisor的監控面板。而Kubernetes還提供一個叫heapster的組件用於聚合每個node上cAdvisor採集的數據,再通過Kubedash進行展示,結構如下:

在Kubernetes的框架裏,master複雜調度後有的node,所以在heapster啓動時,當heapster配合k8s運行時,需要指定kubernetes_master的地址,heapster通過k8s得到所有node節點地址,然後通過訪問對應的node ip和端口號(10250)來調用目標節點Kubelet的HTTP接口,再由Kubelet調用cAdvisor服務獲取該節點上所有容器的性能數據,並依次返回到heapster進行數據聚合。再通過kubedash進行展示,界面如下:

Mesos的監控方案

而Mesos提供一個mesos-exporter工具,用於導出mesos集羣的監控數據prometheus,而prometheus是個集 db、graph、statistic、alert 於一體的監控工具,安裝也非常簡單,下載包後做些參數的配置,比如監控的對象就可以運行了,默認通過9090端口訪問。而mesos-exporter工具只需要在每個slave節點上啓動一個進程,再mesos-exporter監控配置到prometheus server的監控目標中就可以獲取到相關的數據。架構如下:

在Prometheus的面板上我們可以看到Prometheus的監控對象可以爲mesos-export,也可以爲cAdvisor。

下面爲Prometheus的展示界面:

採集工具的對比

cAdvisor 可以採集本機以及容器的資源監控數據,如CPU、 memory、filesystem and network usage statistics)。還可以展示Docker的信息及主機上已下載的鏡像情況。因爲cAdvisor默認是將數據緩存在內存中,在顯示界面上只能顯示1分鐘左右的趨勢,所以歷史的數據還是不能看到,但它也提供不同的持久化存儲後端,比如influxdb等。

Heapster的前提是使用cAdvisor採集每個node上主機和容器資源的使用情況,再將所有node上的數據進行聚合,這樣不僅可以看到整個Kubernetes集羣的資源情況,還可以分別查看每個node/namespace及每個node/namespace下pod的資源情況。這樣就可以從cluster,node,pod的各個層面提供詳細的資源使用情況。默認也是存儲在內存中,也提供不同的持久化存儲後端,比如influxdb等。

mesos-exporter的特點是可以採集 task 的監控數據。mesos在資源調度時是在每個slave上啓動task executor,這些task executor可以是容器,也可以不是容器。而mesos-exporter則可以從task的角度來了解資源的使用情況,而不是一個一個沒有關聯關係的容器。

以上從幾個典型的架構上介紹了一些監控,但都不是最優實踐。需要根據生產環境的特點結合每個監控產品的優勢來達到監控的目的。比如Grafana的圖表展示能力強,但是沒有告警的功能,那麼可以結合Prometheus在數據處理能力改善數據分析的展示。下面列了一些監控產品,但並不是嚴格按表格進行分類,比如Prometheus和Zabbix都有采集,展示,告警的功能。都可以瞭解一下,各取所長。

本文轉自開源中國-分享Docker監控體系(Kubernetes Mesos監控)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章