利用docker compose組合應用並利用scale能夠快速對容器進行擴充,而docker compose啓動的服務容器都在同一臺宿主機上,對於一個宿主機上運行多個容器應用時,容器的運行狀況,如:CPU使用率,內存使用率,網絡狀態,磁盤空間等一系列隨時間變化的時序數據信息,都須要進行了解,所以監控是必須的。 docker
對於容器的監控方案可謂多種多樣,除了docker自己自帶的 docker stats 命令,還有Scout,Data Dog,Sysdig Cloud,Sensu Monitoring Framework,CAdvisor等均可以對容器進行監控。
經過 docker stats 命令能夠很方便的看到當前宿主機上全部容器的CPU,內存,以及網絡流量等數據。但 docker stats 命令的缺點是隻是統計當前宿主機的全部容器,爲獲取的數據是實時的,沒有地方存儲,也沒有報警功能。數據庫
而Scout,Data Dog,Sysdig Cloud雖然都提供了教完善的服務,可是它們都是託管的服務且都是收費的,Sensu Monitoring Framework集成度較高,也免費,可是部署過於複雜,綜合考慮選擇CAdvisor作監控工具。瀏覽器
CAdvisor出自Google,有點是開源產品,監控指標齊全,部署方便,並且有官方的docker鏡像。缺點是集成度不高,默認只在本地保存2分鐘數據。不過,能夠加上InfluxDB存儲數據,對接Grafana展現圖表,比較便利搭建容器監控系統,數據收集和圖表展現效果良好,對系統性能也幾乎沒什麼影響。markdown
CAdvisor是一個容器資源監控工具,包括容器的內存,CPU,網絡IO,磁盤IO等,同時提供了一個WEB頁面用於查看容器的實時運行狀態。CAdvisor默認存儲2分鐘的數據,並且只是針對單物理機,不過,CAdvisor提供了不少數據集成接口,支持InfluxDB,Redis,Kafka,Elasticsearch等集成,能夠加上對應配置將監控數據發往這些數據庫存儲起來。
CAdvisor功能主要有兩點,展現Host,容器兩個層次的監控數據和展現歷史變化網絡
InfluxDB是用Go語言編寫的一個開源分佈式時序,事件和指標數據庫,無需外部依賴。
因爲CAdvisor默認只在本地保存最近2分鐘的數據,爲了持久化數據和統一收集展現監控數據,須要將數據存儲到InfluxDB中。InfluxDB是一個時序數據庫,專門用於存儲時序相關數據,很適合存儲CAdvisor數據,並且CAdvisor自己提供了InfluxDB集成的方法,在啓動容器時指定配置便可。app
InfluxDB主要功能:分佈式
InfluxDB主要特色:函數
Grafana是一個開源的數據監控分析可視化平臺,支持多種數據源配置(如InfluxDB,MySQL,Elasticserach,OpenTSDB,Graphite等)和豐富的插件及模板功能,支持圖表權限控制和報警。工具
Grafana主要特色性能
CAdvisor負責收集容器隨時間變化的數據
InfluxDB負責存儲時序數據
Grafana負責分析和展現時序數據
啓動InfluxDB的服務容器:
docker run -d --name influxdb -p 8086:8086 \ -v /data/influxdb:/var/lib/influxdb \ --hostname influexdb \ influxdb
在容器中建立test數據庫和root用戶
docker exec -it influxdb influx > CREATE DATABASE "test" > CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES
啓動CAdvisor的服務容器:
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 \ --publish=8080:8080 \ --detach=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
服務容器起來後可經過瀏覽器訪問 http:///ip:8080
啓動Grafana服務容器:
docker run -d -p 3000:3000 \ -v /data/grafana:/var/lib/grafana \ --link=influxdb:influxdb \ --name grafana grafana/grafana
直接運行該命令後有可能會發現容器並無啓起來,經過 docker logs 命令會發現」mkdir: can’t create directory ‘/var/lib/grafana/plugins’: Permission denied「的錯誤,其實就是沒有 數據卷對應的主機上 /data/grafana 的權限,能夠在運行啓動命令前先建立 /data/grafana 目錄並給定權限777,或者經過」docker run —entrypoint 「id」 grafana/grafana「 查看uid,gid,groups (默認爲472),而後經過」chown -R 472:472 /data/grafana「修改權限。
Grafana正常啓動後就能夠 http://ip:3000 訪問,出現如下的登陸頁面,初次訪問須要修改密碼,默認用戶名密碼爲:admin/admin
準備docker-compose.yml文件
version: '3.1' volumes: grafana_data: {} services: influxdb: image: influxdb restart: always environment: - PRE_CREATE_DB=cadvisor ports: - "8086:8086" expose: - "8090" - "8099" volumes: - ./data/influxdb:/data cadvisor: image: google/cadvisor links: - influxdb:influxdb-host command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb-host: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: user: "104" image: grafana/grafana restart: always links: - influxdb:influxdb-host ports: - "3000:3000" volumes: - grafana_data:/var/lib/data environment: - HTTP_USER=admin - HTTP_PASS=admin - INFLUXDB_HOST=influxdb-host - INFLUXDB_PORT=8086 - INFLUXDB_NAME=cadvisor - INFLUXDB_USER=root - INFLUXDB_PASS=root
在docker-compose.yml文件目錄運行如下命令啓動服務:
docker-compose up -d
-d指定在後臺啓動,初次啓動能夠不加能夠在控制檯查看啓動日誌,固然後臺啓動也能夠經過「docker-compose logs」進行查看啓動日誌。
服務正常啓動後就能夠 http://ip:3000 訪問Granafa,在Home Dashboard頁面點擊添加data source
配置InfluxDB鏈接信息,固然在配置鏈接信息前須要進入InfluxDB容器建立相應的cadvisor數據庫和用戶root/root
在容器中建立cadvisor數據庫和root用戶
docker exec -it influxdb-contianer-id influx > CREATE DATABASE "cadvisor" > CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES
配置鏈接InfluxDB鏈接:
數據源配好以後能夠回到Home Dashboard添加添加dashboard圖表展現監控信息,Grafana提供了豐富的圖片模板對監控數據進行展現。
添加dashboard:
可選模板:
編輯圖表:
配置監控cadvisor容器的內存使用狀況的圖表展現,配置好以後點擊保存就能夠了。