docker swarm监控方案有很多,主流的有cAdvisor+InfluxDB+Grafana和cAdvisor+Prometheus+Grafana,本文介绍cAdvisor+InfluxDB+Grafana方案
组件说明
- cAdvisor:数据收集模块,需要部署在集群中的每一个节点上,当然前提条件是节点接受task。
- InfluxDB:数据存储模块。
- Grafana:数据展示模块
创建docker compose文件
在manager结点上创建文件,并输入如下内容:
version: '3'
services:
influx:
image: influxdb:1.8 # 保证模板兼容性
volumes:
- influx:/var/lib/influxdb
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
grafana:
image: grafana/grafana:4.2.0 # 保证模板兼容性
ports:
- 0.0.0.0:80:3000
volumes:
- grafana:/var/lib/grafana
depends_on:
- influx
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
cadvisor:
image: google/cadvisor
hostname: '{{.Node.Hostname}}'
command: -logtostderr -docker_only -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influx:8086
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
depends_on:
- influx
deploy:
mode: global
volumes:
influx:
driver: local
grafana:
driver: local
部署容器栈
在manager节点上执行如下命令:
docker stack deploy -c docker-stack.yml monitor
命令返回以后并不代表task已经完成部署,需要花一些时间,运行如下命令监控容器栈的部署状态:
docker stack services monitor
如下图所示:
当红框中的数字前后匹配时,代表容器栈完成部署,再执行后序步骤。
创建名称为cadvisor数据库存储数据
执行如下命令,确认monitor_cadvisor服务运行的node:
docker service ps monitor_influx
结果如下图红框所示:
登录worker2结点,执行事下指令创建数据库:
docker exec `docker ps | grep -i influx | awk '{print $1}'` influx -execute 'CREATE DATABASE cadvisor'
设置Grafana
因为Grafana被部署在了worker1节点上,在浏览器中访问http://192.168.56.104:80,使用默认的用户名\密码:admin\admin,如下图:
点击"Add data source"添加数据源。如下图所示,按图中红框填写,其它项忽略:
点击"Save &Test",如果出现"Data source is working"表示数据源添加成功
增加Dashboard配置。首先从https://github.com/botleg/swarm-monitoring/blob/master/dashboard.json下载示例配置文件,如下图所示,按提示上传配置文件:
操作完成以后,结果如下图:
至此,docker swarm集群监控系统部署完成,可以实现对宿主机及其上运行的容器的监控。