第10章 構建docker容器的監控系統
chua 在Docker用的越來越多的時代中,它的輕量級得到很多企業的青睞,所以在Docker容器部署服務及應用場景越來越多。
容器的採集和監控也較多,有docker自身的stats命令,下面給大家分享兩個經典的容器監控組合方案。
- Cadvisor+InfluxDB+Grafana
- Cadvisor+Prometheus+Grafana
我先簡單的介紹一下上述所涉及到的工具
Cadvisor(採集資料)
由於 dokcer stats 有些問題,為了解決docker stats的問題(儲存、展示),所以谷歌開源的cadvisor 誕生了。 cadvisor 不僅可以蒐集一臺機器上所有執行的容器資訊還提供基礎查詢介面和 http 介面,方便 Prometheus 進行資料抓取。cadvisor不僅可以蒐集一臺機器上所有執行的容器資訊,還提供基礎查詢介面和http介面,方便其他元件如Prometheus進行資料抓取,或者cadvisor + influxdb + grafna搭配使用。
Cadvisor可以對節點機器上的資源及容器進行實時監控和效能資料採集,包括CPU使用情況、記憶體使用情況、網路吞吐量及檔案系統使用情況,它不光能監控主機還能監控容器。
Cadvisor使用Go語言開發,利用Linux的cgroups獲取容器的資源使用資訊,在K8S中整合在Kubelet裡作為預設啟動項,官方標配。
InfluxDB(時序資料庫)InfluxDB(時序資料庫),常用的一種使用場景:效能江空,應用程式指標,物聯網感測器資料和實時分析等後端儲存。每毫秒記錄一下電腦記憶體的使用情況,然後就可以根據統計的資料,利用圖形化介面(InfluxDB V1一般配合Grafana)製作記憶體使用情況的折線圖;
Grafana(展板功能)
Grafana是一個跨平臺的開源的度量分析和視覺化工具,可以通過將採集的資料查詢然後視覺化的展示,並及時通知。它主要有以下六大特點:
- 1、展示方式:快速靈活的客戶端圖表,面板外掛有許多不同方式的視覺化指標和日誌,官方庫中具有豐富的儀表盤外掛,比如熱圖、折線圖、圖表等多種展示方式;
- 2、資料來源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;
- 3、通知提醒:以可視方式定義最重要指標的警報規則,Grafana將不斷計算併發送通知,在資料達到閾值時通過Slack、PagerDuty等獲得通知;
- 4、混合展示:在同一圖表中混合使用不同的資料來源,可以基於每個查詢指定資料來源,甚至自定義資料來源;
- 5、註釋:使用來自不同資料來源的豐富事件註釋圖表,將滑鼠懸停在事件上會顯示完整的事件元資料和標記;
- 6、過濾器:Ad-hoc過濾器允許動態建立新的鍵/值過濾器,這些過濾器會自動應用於使用該資料來源的所有查詢。
Prometheus(監控)
zabbix在監控界佔有不可撼動的地位,功能強大。但是對容器監控顯得力不從心。為解決監控容器的問題,引入了prometheus技術。prometheus號稱是下一代監控。
prometheus是由谷歌研發的一款開源的監控軟體,目前已經被雲端計算本地基金會託管,是繼k8s託管的第二個專案。
工作流程
由第一個架構為例:簡單介紹一下工作流程
- cadvitor對每個節點進行監控
- 然後將資料採集之後傳送給influxdb
- influxdb分析完之後將資料傳給grafana進行繪圖
- 最終將結果用web介面展示出來。
以監控架構部署為例(Cadvisor+InfluxDB+Grafana)
- 1.建立自定義的網路,用於後期容器加入網路中
- 2.建立influxdb容器,建立資料使用者,資料庫
- 3.建立Cadvisor容器
- 4.建立Grafana容器,配置Grafana
- 準備相應的資料包
-
[root@httpd ~]# ls anaconda-ks.cfg grafana.tar influxdb.tar prometheus.tar cadvisor.tar
- 將檔案匯入到docker中
-
[root@httpd ~]# docker load < grafana.tar
[root@httpd ~]# docker load < cadvisor.tar
[root@httpd ~]# docker load < influxdb.tar
[root@httpd ~]# docker load < prometheus.tar
[root@httpd ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE prom/prometheus latest 0bc82119c95b 2 weeks ago 169MB grafana/grafana latest 651ff2dc930f 3 weeks ago 187MB centos 7 8652b9f0cb4c 4 weeks ago 204MB google/cadvisor latest eb1210707573 2 years ago 69.6MB tutum/influxdb latest c061e5808198 4 years ago 290MB - 為了方便管理,我會將Cadvisor+InfluxDB+Grafana三個容器都加入到自己的網路中‘
- ’
[root@httpd ~]# docker network create monitor 5f9503557b6894ad79f0512a3c38344b22230dd3ae222e686b0e69079508a327 [root@httpd ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 5ce52eea3a4c bridge bridge local ca8c033111bf host host local 5f9503557b68 monitor bridge local 323b7845855d none null local
infuluxdb容器
- 啟動infuluxdb容器(8083埠是後臺控制埠,8086埠是influxdb的資料埠)
-
[root@httpd ~]# docker run -d --name influxdb --net monitor -p 8083:8083 -p 8086:8086 tutum/influxdb 98b2aa65227b0ca406f9d7c29edfe2458021e16c71587efb5f6a6cc30646b4b9
-
檢視容器是否啟動
-
[root@httpd ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 98b2aa65227b tutum/influxdb "/run.sh" 2 minutes ago Up 2 minutes 0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp influxdb
- 訪問influxdb控制檯
- 建立一個使用者:CREATE USER "root" WITH PASSWORD '123456' WITH ALL PRIVILEGES
- 建立資料庫 :CREATE DATABASE "cadvisor"
Cadvisor容器
- 建立Cadvisor 容器
-
[root@httpd ~]# docker run -d --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --net monitor --publish=8080:8080 --name=cadvisor google/cadvisor -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb:8086 b1921f2f8cff0fc88c56a6fefd203ba790791dc9392abde3da0c6a693061b569
- 訪問Cadvisor
- 可以監控主機和容器,直接檢視一下容器
-
granafa容器
- 建立granafa容器
-
[root@httpd ~]# docker run -d --name grafana --net monitor -p 3000:3000 grafana/grafana fd774534884ea1646f1f2d1fad8360c90b95d461850c7af6cbd2d54a48f5cf3c
-
訪問grafana(初始名和密碼都為admin)
-
t
-
新增資料來源(也就是資料從哪來)
-
如果連線成功,就說明grdafana可以從influxdb中獲取到資訊了
-
接下來來到主頁,點+號,新建面板,可以指定自己想檢視的資料
- 儲存資料之後,就會顯示監控的狀態