首页 > 代码库 > 在Marathon 上部署 cAdvisor + InfluxDB + Grafana Docker监控

在Marathon 上部署 cAdvisor + InfluxDB + Grafana Docker监控

关于 Docker 容器的监控,google cAdvisor 是个很好的工具,但是它默认只显示实时数据,不储存历史数据。为了存储和显示历史数据、自定义展示图,可以把将cAdvisor与InfluxDB、Grafana 集成起来。

需要的镜像:

tutum/influxdb

google/cadvisor

grafana/grafana

安装:有8台mesos-slave,都需要运行一个cAdvisor docker实例对docker进行监控,然后需要运行一个InfluxDB docker实例存储cAdvisor 产生的数据,然后运行一个Grafana docker实例将InfluxDB数据库里面的数据取出来展示到图上面。

部署 InfluxDB

  • InfluxDB只需要一个实例;
  • UI 通过 marathon-lb 的虚拟主机发布;
  • 数据端口 8086 通过 servicePort 发布到 marathon-lb所在的slaves;
  • servicePort需要设置为固定值,比如:28086,以便于cAdvisor和Grafana连接;
  • 数据目录 /data 映射到 nfs共享目录;
{
  "id": "/influxdb",
  "cmd": null,
  "cpus": 0.3,
  "mem": 1024,
  "disk": 0,
  "instances": 1,
  "acceptedResourceRoles": [],
  "container": {
    "type": "DOCKER",
    "volumes": [
      {
        "containerPath": "/etc/localtime",
        "hostPath": "/etc/localtime",
        "mode": "RO"
      },
      {
        "containerPath": "/data",
        "hostPath": "/home/nfs/InfluxDB",
        "mode": "RW"
      }
    ],
    "docker": {
      "image": "10.80.163.110:5000/influxdb",
      "network": "BRIDGE",
      "portMappings": [
        {
          "containerPort": 8083,
          "hostPort": 0,
          "servicePort": 10010,
          "protocol": "tcp",
          "labels": {}
        },
        {
          "containerPort": 8086,
          "hostPort": 0,
          "servicePort": 28086,
          "protocol": "tcp",
          "labels": {}
        }
      ],
      "privileged": false,
      "parameters": [],
      "forcePullImage": false
    }
  },
  "labels": {
    "HAPROXY_0_VHOST": "influxdb.osp.cloud",
    "HAPROXY_GROUP": "external"
  },
  "portDefinitions": [
    {
      "port": 10010,
      "protocol": "tcp",
      "name": "default",
      "labels": {}
    },
    {
      "port": 28086,
      "protocol": "tcp",
      "labels": {}
    }
  ]
}

  

创建监控数据库

打开 http://influxdb.osp.cloud设置 Host 和 Port 分别为http://influxdb.osp.cloud 和 28086。

 为每个mesos slave创建一个单独的数据库,分别为:cadvisor112, cadvisor113, ...

部署 cAdvisor

  • 每个mesos slave都要部署一个实例;
  • UI 通过marathon-lb的虚拟主机发布;
  • 设置 storage_drive 为 influxdb;
{
  "id": "/cadvisor112",
  "cmd": null,
  "cpus": 0.1,
  "mem": 256,
  "disk": 0,
  "instances": 1,
  "constraints": [
    [
      "hostname",
      "CLUSTER",
      "10.80.163.112"
    ]
  ],
  "acceptedResourceRoles": [
    "*"
  ],
  "container": {
    "type": "DOCKER",
    "volumes": [
      {
        "containerPath": "/etc/localtime",
        "hostPath": "/etc/localtime",
        "mode": "RO"
      },
      {
        "containerPath": "/rootfs",
        "hostPath": "/",
        "mode": "RO"
      },
      {
        "containerPath": "/var/run",
        "hostPath": "/var/run",
        "mode": "RW"
      },
      {
        "containerPath": "/sys",
        "hostPath": "/sys",
        "mode": "RO"
      },
      {
        "containerPath": "/var/lib/docker",
        "hostPath": "/var/lib/docker",
        "mode": "RO"
      },
      {
        "containerPath": "/cgroup",
        "hostPath": "/cgroup",
        "mode": "RO"
      }
    ],
    "docker": {
      "image": "10.80.163.110:5000/cadvisor",
      "network": "BRIDGE",
      "portMappings": [
        {
          "containerPort": 8080,
          "hostPort": 0,
          "servicePort": 10011,
          "protocol": "tcp",
          "labels": {}
        }
      ],
      "privileged": false,
      "parameters": [],
      "forcePullImage": false
    }
  },
  "labels": {
    "HAPROXY_0_VHOST": "cadvisor112.zyyt.osp.cloud",
    "HAPROXY_GROUP": "external"
  },
  "portDefinitions": [
    {
      "port": 10011,
      "protocol": "tcp",
      "name": "default",
      "labels": {}
    }
  ],
  "args": [
    "-storage_driver",
    "influxdb",
    "-storage_driver_host",
    "influxdb.osp.cloud:28086",
    "-storage_driver_db",
    "cadvisor112"
  ]
}

  

查看cAdvisor UI:

http://cadvisor112.zyyt.osp.cloud

部署 Grafana

  • 只需要部署一个实例;
  • UI 通过 marathon-lb 虚拟主机发布;
  • 数据目录 /var/lib/grafana 映射到 nfs 共享存储,以便于持久化存储; 
{
  "id": "/grafana",
  "cmd": null,
  "cpus": 0.3,
  "mem": 512,
  "disk": 0,
  "instances": 1,
  "constraints": [
    [
      "hostname",
      "CLUSTER",
      "10.80.163.112"
    ]
  ],
  "acceptedResourceRoles": [
    "*"
  ],
  "container": {
    "type": "DOCKER",
    "volumes": [
      {
        "containerPath": "/etc/localtime",
        "hostPath": "/etc/localtime",
        "mode": "RO"
      },
      {
        "containerPath": "/var/lib/grafana",
        "hostPath": "/home/nfs/GrafanaData",
        "mode": "RW"
      }
    ],
    "docker": {
      "image": "10.80.163.110:5000/grafana:2.0.2",
      "network": "BRIDGE",
      "portMappings": [
        {
          "containerPort": 3000,
          "hostPort": 0,
          "servicePort": 10012,
          "protocol": "tcp",
          "labels": {}
        }
      ],
      "privileged": false,
      "parameters": [],
      "forcePullImage": false
    }
  },
  "labels": {
    "HAPROXY_0_VHOST": "grafana.zyyt.osp.cloud",
    "HAPROXY_GROUP": "external"
  },
  "portDefinitions": [
    {
      "port": 10012,
      "protocol": "tcp",
      "name": "default",
      "labels": {}
    }
  ]
}

创建数据分析图

打开 Grafana UI:

http://grafana.zyyt.osp.cloud

设置数据源:

  • 类型:InfluxDB
  • URL:http://influxdb.osp.cloud:28086
  • Access:direct
  • Database:选择一个slave的数据库,如:cadvisor112

技术分享

 

创建graph:

技术分享

 

效果图:

技术分享

参考: http://www.mamicode.com/info-detail-1393800.html

在Marathon 上部署 cAdvisor + InfluxDB + Grafana Docker监控