概述
前面文章介紹使用docker compose組合應用並利用scale快速對容器進行擴容。
由於docker compose啟動的服務都在同一臺宿主機上,對於一個宿主機上執行多個容器應用時,容器的執行情況如:CPU使用率、記憶體使用率、網路狀態、磁碟空間等一系列隨時間變化的時序資料資訊,都是需要去了解,因此監控是必須的。
容器監控方案選擇
對於容器的監控方案可謂多種多樣,本身自帶命令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
CAdvisor是一個容器資源監控工具,包括容器的記憶體,CPU,網路IO,磁碟IO等監控,同時提供了一個WEB頁面用於檢視容器的實時執行狀態。CAdvisor預設儲存2分鐘的資料,而且只是針對單物理機。不過,CAdvisor提供了很多資料整合介面,支援InfluxDB,Redis,Kafka,Elasticsearch等整合,可以加上對應配置將監控資料發往這些資料庫儲存起來。
CAdvisor功能主要有兩點:
- 展示Host和容器兩個層次的監控資料。
- 展示歷史變化資料。
InfluxDB
InfluxDB是用Go語言編寫的一個開源分散式時序、事件和指標資料庫,無需外部依賴。
前面說到,CAdvisor預設只在本機儲存最近2分鐘的資料,為了持久化儲存資料和統一收集展示監控資料,需要將資料儲存到InfluxDB中。InfluxDB是一個時序資料庫,專門用於儲存時序相關資料,很適合儲存CAdvisor的資料。而且,CAdvisor本身已經提供了InfluxDB的整合方法,豐啟動容器時指定配置即可。
InfluxDB主要功能:
- 基於時間序列,支援與時間有關的相關函式(如最大、最小、求和等);
- 可度量性:你可以實時對大量資料進行計算;
- 基於事件:它支援任意的事件資料;
InfluxDB主要特點:
- 無結構(無模式);
- 可以是任意數量的列;
- 可擴充的;
- 支援min,max,sum,count,mean,median等一系列函式,方便統計;
- 原生的HTTP支援,內建HTTP API;
- 強大的類SQL語法;
- 自帶管理介面,方便使用
Granfana
Grafana是一個開源的資料監控分析視覺化平臺,支援多種資料來源配置(支援的資料來源包括InfluxDB,MySQL,Elasticsearch,OpenTSDB,Graphite等)和豐富的外掛及模板功能,支援圖表許可權控制和報警。
Grafan主要特性:
- 靈活豐富的圖形化選項
- 可以混合多種風格
- 支援白天和夜間模式
- 多個資料來源
CAdvisor+InfluxDB+Granfana
CAdvisor:負責收集容器的隨時間變化的資料 InfluxDB:負責儲存時序資料 Grafana:負責分析和展示時序資料
安裝部署
部署InfluxDB服務
docker run -d --name influxdb -p 8086:8086 \
-v /data/influxdb:/var/lib/influxdb \
--hostname=influxdb \
influxdb
複製程式碼
說明:
- --name:啟運容器分配名字influxdb
- -p:對映埠,8083埠為influxdb管理埠,8086埠是influxdb的資料埠
- -v:掛載資料 -d:後臺執行此容器
- influxdb:通過這個容器來執行的,預設會在docker官方倉庫pull下來
1、瀏覽器訪問influxdb的管理端,http://ip:8083
2、建立test的資料庫與root使用者,這個用於後期配granfa
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:需要指定cadvisor的儲存驅動、資料庫主機、資料庫名
通過ip:8080埠訪問測試一下
部署Granfana服務
grafana是一款開源的時序資料分析工具,而且介面專業簡單。
docker run -d -p 3000:3000 \
-v /data/grafana:/var/lib/grafana \
--link=influxdb:influxdb\
--name grafana grafana/grafana
複製程式碼
注意:如果使用-v把資料掛載出來會出現容器啟動失敗,錯誤為mkdir:cannot create directory '/var/lib/grafana/plugins':Permission denied,此時可以使用docker run --entrypoint "id" grafana/grafana得到uid,gid,groups(預設是472);
接著使用chown -R 472:472 /data/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
複製程式碼
啟動docker-compose檔案
docker-compose up
複製程式碼
檢視三個服務容器是否啟動
瀏覽grafana服務,http://ip:3000
登陸grafana服務
瀏覽influxdb服務,http://ip:8083/
配置grafana工具
1、配置資料來源
選擇influxdb資料來源
具體配置如下
配置完成後,如下圖
2、配置皮膚
選擇皮膚型別
選擇圖形
配置查詢條件
配置完後,效果如下圖
grafana支援查詢條件,可以從influxdb中瞭解
瀏覽cAdvisor服務,http://ip:8080/