利用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容器的内存使用状况的图表展现,配置好以后点击保存就能够了。