容器監控方案選擇
-
對於容器的監控方案可謂多種多樣,本身自帶命令
docker stats
命令,Scout、Data Dog、Sysdig Cloud、Sensu Monitoring Framework、CAdvisor等。 -
通過
docker stats
命令可以很方便的看到當前宿主機上所有容器的CPU,記憶體以及網路流量等資料。但是docker stats
命令的缺點是統計的只是當前宿主機的所有容器,而獲取的監控資料是實時的,沒有地方儲存,也沒有報警功能。docker stats
-
Scout、Sysdig Cloud、Data Dog雖然都提供了完善的服務,但是它們都是託管的服務,而且都收費,Sensu Monitoring Framework整合度較高,也免費,但是部署過於複雜。綜合考慮,我們選擇了CAdvisor做容器監控工具。
-
CAdvisor是谷歌出品,優點是開源產品,監控指標齊全,部署方便,而且有官方的docker映象。缺點是整合度不高,預設只在本地儲存2分鐘資料。不過可以加上influxDB儲存資料,對接Grafana展示圖示,比較便利地搭建好了容器監控系統,資料收集和圖示展示效果良好,對系統性能也幾乎沒有什麼影響。
-
CAdvisor是一個容器資源監控工具,包括容器的記憶體、CPU、網路IO、磁碟IO等監控,同時提供了一個web頁面用於檢視容器的實時執行狀態。CAdvisor預設儲存2分鐘的資料,而且只是針對單物理機。不過CAdvisor提供了很多資料整合介面,支援influxDB、Redis、kafka、elasticsearch等整合,可以加上對應配置將監控資料發往這些資料庫儲存起來。
-
CAdvisor功能主要有兩點:
- 展示host和容器兩個層次的監控資料;
- 展示歷史變化資料。
-
influxDB是用Go語言編寫的一個開源分散式時序、事件和指標資料庫,無需外部依賴。
-
前面說到,CAdvisor預設只在本機儲存最近2分鐘的資料,為了持久化儲存資料和統一收集展示監控資料,需要將資料儲存到influxDB中。InfluxDB是一個時序資料庫,專門用於儲存時序相關資料,很適合儲存CAdvisor的資料。而且,CAdvisor本身已經提供了InfluxDB的整合方法,在容器啟動時指定配置即可。
-
InfluxDB主要功能:
- 基於時間序列,支援與時間有關的相關函式(如最大、最小、求和等);
- 可度量性:你可以實時對大量資料進行計算;
- 基於事件:它支援任意的事件資料。
-
InfluxDB主要特點
- 無結構(無模式);
- 可以是任意數量的列;
- 可擴充套件的;
- 支援min,max,sum,count,mean,median等一系列函式,方便統計;
- 原生的HTTP支援,內建HTTP API;
- 強大的類SQL語法;
- 自帶管理介面,方便使用。
-
Grafana是一個開源的資料監控分析視覺化平臺,支援多種資料來源配置(支援的資料來源包括influxDB、MySQL、elasticsearch、OpenTSDB、Graphite等)和豐富的外掛及模板功能,支援圖表許可權控制和報警。
-
Grafana主要特性:
- 靈活豐富的圖形化選項;
- 可以混合多種風格;
- 支援白天和夜間模式;
- 支援多個數據源。
-
CAdvisor+InfluxDB+Grafana
- CAdvisor:負責收集容器隨時間變化的資料;
- InfluxDB:負責儲存時序資料;
- Grafana:負責分析和展示時序資料。
-
安裝部署
-
部署InfluxDB服務
docker run -d -p 8083:8083 -p 8086:8086 --expose 8090 --expose 8099 -v /Users/zhangxufeng/xufeng.zhang/docker/volumes/influxdb:/var/lib/influxdb --hostname=influxdb --name influx tutum/influxdb
-
說明
--name
:啟動容器分配名字influxdb;-p
:對映埠,8083埠為influxdb管理埠,8086埠是influxdb的資料埠;-v
:掛載資料;-d
:後臺執行此容器;influxdb
:通過這個容器來執行的,預設會在docker官方倉庫pull下來。
-
瀏覽器訪問influxdb的管理端:
http://127.0.0.1:8083
,可以看到管理頁面 -
建立test的資料庫與root使用者,這個用於後期配置grafana
docker exec -it influxdb influx CREATE DATABASE "test" CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES
-
部署CAdvisor服務
-
谷歌的cadvisor可以用於收集docker容器的時序資訊,包括容器執行過程中的資源使用情況和效能資料
docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --volume=/dev/disk/:/dev/disk:ro --volume=/cgroup:/cgroup:ro --publish=8080:8080 --detach=true --privileged=true --name=cadvisor google/cadvisor:latest -storage_driver=influxdb -storage_driver_host=influxdb:8086 -storage_driver_db=test_storage_driver_user=root -storage_driver_password=root
-d
:後臺執行此容器;--name
:啟動執行容器分配的名字cadvisor;-p
:對映埠8080;--mount
:把宿主機的檔案目錄繫結到容器中,這些目錄都是cadvisor需要採集的目錄檔案和監控內容;-storage_driver
:需要指定cadvisro的儲存驅動、資料庫主機、資料庫名;
-
-
部署grafana服務
-
grafana是一款開源的時序資料分析工具,而且介面專業易用
docker run -d -p 3000:3000 -v /Users/zhangxufeng/xufeng.zhang/docker/volumes/grafana:/var/lib/grafana --link=influxdb:influxdb --name grafana grafana/grafana
-
通過
ip+3000
埠來訪問grafana的web服務,第一次訪問需要修改admin使用者密碼,預設使用者名稱/密碼為admin/admin;
-
-
-
整合的docker-compose檔案
version: '3.1' volumes: grafana_data: {} services: influxdb: image: tutum/influxdb:0.9 #image: tutum/influxdb #image: influxdb restart: always #user: environment: - PRE_CREATE_DB=cadvisor ports: - "8083:8083" - "8086:8086" expose: - "8090" - "8099" volumes: - ./data/influxdb:/data cadvisor: #image: google/cadvisor:v0.29.0 image: google/cadvisor links: - influxdb:influxsrv command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086 restart: always ports: - "8080:8080" volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro grafana: #image: grafana/grafana:2.6.0 user: "104" image: grafana/grafana user: "104" #user: "472" restart: always links: - influxdb:influxsrv ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana environment: - HTTP_USER=admin - HTTP_PASS=admin - INFLUXDB_HOST=influxsrv - INFLUXDB_PORT=8086 - INFLUXDB_NAME=cadvisor - INFLUXDB_USER=root - INFLUXDB_PASS=root