关于 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监控的更多相关文章

  1. 7、Docker监控方案(cAdvisor+InfluxDB+Grafana)

    一.组件介绍 我们采用现在比较流行的cAdvisor+InfluxDB+Grafana组合进行Docker监控. 1.cAdvisor(数据采集) 开源软件cAdvisor(Container Adv ...

  2. docker容器监控:cadvisor+influxdb+grafana

    cadvisor+influxdb+grafana可以实现容器信息获取.存储.显示等容器监控功能,是目前流行的docker监控开源方案. 方案介绍 cadvisor Google开源的用于监控基础设施 ...

  3. (原)ubuntu下cadvisor+influxdb+grafana+supervisord监控主机和docker的containers

    ubuntu下cadvisor+influxdb+grafana+supervisord监控主机和docker的containers(运行在主机上) 适用于类ubuntu系统.amd64. 1. in ...

  4. docker监控方案实践(cadvisor+influxdb+grafana)

    一.概要 1.1 背景 虚拟化技术如今已经非常热门,如果你不知道什么是虚拟化,那你应该了解虚拟机.虚拟化技术如同虚拟机一样,用于将某些硬件通过软件方式实现"复制",虚拟出" ...

  5. jmeter+influxdb+grafana性能测试监控

    背景: 话说Jmeter原生的监控确实太丑了,听大佬们在讨论Jmeter+InfluxDb+Grafana的监控,于是,为了有一个漂亮的测试报告,就手动开始进行部署. 安装步骤: 1.influxdb ...

  6. influxDB1.6版安装与配置(windows环境)、Jmeter+influxDB+Grafana性能监控

    influxDB1.6版安装与配置(windows环境).Jmeter+influxDB+Grafana性能监控 来源:https://blog.csdn.net/SwTesting/article/ ...

  7. cAdvisor+InfluxDB+Grafana 监控Docker

    容器的监控方案其实有很多,有docker自身的docker stats命令.有Scout.有Data Dog等等,本文主要和大家分享一下比较经典的容器开源监控方案组合:cAdvisor+InfluxD ...

  8. 使用cAdvisor+Influxdb+Grafana监控系统

      今天准备开始研究研究当前非常流行的Grafana+Influxdb监控系统,两者都是非常轻量级的应用但是功能却异常强大,可以说Grafana在作图显示方面真的毫不逊色与Cacti. 组件介绍 cA ...

  9. influxdb + Grafana可视化监控平台

    在centos6.5上influxdb + Grafana监控平台配置: 1.RedHat and CentOS users can install the latest stable version ...

随机推荐

  1. 【matlab】运动目标检测之"背景差分算法“

    clear; clc; i1=imread('D:\Work\1.png'); i2=imread('D:\Work\2.png'); i1=rgb2gray(i1); i2=rgb2gray(i2) ...

  2. linux中sftp默认登录的端口号是多少? sftp通过指定的端口号连接?sftp默认端口号

    需求描述: 今天一个同事,遇到个问题,程序连接sftp服务器连接不上,问我端口号是多少, 我想了一下是21还是22,所以就做了测试,发现sftp默认的连接端口号是22, 在此做下记录. 操作过程: 1 ...

  3. android webView不简单

    手机屏幕大小非常伤程序猿 励志成为一名Javaproject师的我.真的被它伤到了,不仅由于webView的强大.并且这个内容适合各样屏幕大小问题. 想当年苹果project师嘲笑安卓project师 ...

  4. 面向对象----构造方法、this 关键字、函数的参数传递、package语句/import语句

    构造方法 构造器的定义.作用 构造方法的特征 它具有与类相同的名称:它不含返回值: 注意:在构造方法里不含返回值的概念是不同于“void”的,在定义构造方法时加了“void”,结果这个方法就不再被自动 ...

  5. 【RF库Collections测试】Get From List

    Name:Get From ListSource:Collections <test library>Arguments:[ list_ | index ]Returns the valu ...

  6. VS-Qt-OSG-CMake基本项目框架

    在VS-Qt-CMake基础上,打开mainwindow.ui,添加一个QWidget,然后在widget上右键-提升,选择SceneViewWidget CMakeLists.txt中添加了OSG相 ...

  7. Array遍历的小技巧

     如果在遍历中删除或增加了部分元素,就会导致遍历失败,因为对象数组的长度发生了变化,索引随之而变,遍历的结果不完整或者引发运行时错误.其实不需要任何复杂的判断,最简单的方法是:倒过来遍历,像这样: f ...

  8. On iPad, UIImagePickerController must be presented via UIPopoverController

    本文转载至:http://blog.csdn.net/k12104/article/details/8537695 On iPad, UIImagePickerController must be p ...

  9. C++ 在继承中使用virtual

    使用virtual:如果方法是通过引用类型或指针而不是对象调用的,它将确定使用哪一种方法.如果没有使用关键字irtual,程序将根据引用类型或指针类型选择方法:如果使用了irtual,程序将根据引用或 ...

  10. 【顽固BUG】Visual Studio 2015 + TestDriven.NET-3.8.2860_Personal_Beta 调用的目标发生了异常。

    前言 突然怎么弄也无法断点调试了 输出如下: ------ Test started: Assembly: Server5.V2.dll ------ 调用的目标发生了异常. 而且网站运行提示: -- ...