前面文章介紹使用docker compose組合應用並利用scale快速對容器進行擴容。web
因爲docker compose啓動的服務都在同一臺宿主機上,對於一個宿主機上運行多個容器應用時,容器的運行狀況如:CPU使用率、內存使用率、網絡狀態、磁盤空間等一系列隨時間變化的時序數據信息,都是須要去了解,所以監控是必須的。docker
對於容器的監控方案可謂多種多樣,自己自帶命令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功能主要有兩點:工具
InfluxDB是用Go語言編寫的一個開源分佈式時序、事件和指標數據庫,無需外部依賴。性能
前面說到,CAdvisor默認只在本機保存最近2分鐘的數據,爲了持久化存儲數據和統一收集展現監控數據,須要將數據存儲到InfluxDB中。InfluxDB是一個時序數據庫,專門用於存儲時序相關數據,很適合存儲CAdvisor的數據。並且,CAdvisor自己已經提供了InfluxDB的集成方法,豐啓動容器時指定配置便可。測試
InfluxDB主要功能:
InfluxDB主要特色:
Grafana是一個開源的數據監控分析可視化平臺,支持多種數據源配置(支持的數據源包括InfluxDB,MySQL,Elasticsearch,OpenTSDB,Graphite等)和豐富的插件及模板功能,支持圖表權限控制和報警。
Grafan主要特性:
CAdvisor:負責收集容器的隨時間變化的數據
InfluxDB:負責存儲時序數據
Grafana:負責分析和展現時序數據
docker run -d --name influxdb -p 8086:8086 \ -v /data/influxdb:/var/lib/influxdb \ --hostname=influxdb \ influxdb
說明:
一、瀏覽器訪問influxdb的管理端,http://ip:8083
二、建立test的數據庫與root用戶,這個用於後期配granfa
docker exec it influxdb influx CREATE DATABASE "test" CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES
谷歌的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
說明:
經過ip:8080端口訪問測試一下
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
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/
一、配置數據源
選擇influxdb數據源
具體配置以下
配置完成後,以下圖
二、配置面板
選擇面板類型
選擇圖形
配置查詢條件
配置完後,效果以下圖
grafana支持查詢條件,能夠從influxdb中瞭解
瀏覽cAdvisor服務,http://ip:8080/