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集群监控系统部署完成,可以实现对宿主机及其上运行的容器的监控。