[经验交流] 在 Mesos Marathon 上部署 cAdvisor + InfluxDB + Grafana Docker监控

关于 Docker 容器的监控,google cAdvisor 是个很好的工具,但是它默认只显示实时数据,不储存历史数据。为了存储和显示历史数据、自定义展示图,可以把将cAdvisor与InfluxDB、Grafana 集成起来,国外的专家 Brian Christner 写了一篇文章”How to setup Docker Monitoring“,描述了部署方法。

Brian 的方法是手动运行 docker run 命令进行部署,为了能在 Mesos Marathon 平台上自动部署,我对他的方法进行了一些修改,下面我的部署过程。

注:

读者需要提前了解 mesos、marathon、InfluxDB 特别是 Grafana 的基本操作。

1. 设置共享存储

为了实现 InfluxDB 数据库和 Grafana 配置的持久化存储,使他们重新部署后不会丢失历史数据,我启用了 nfs4作为共享存储,把 InfluxDB 容器里的 /data 目录、Grafana 容器的 /var/lib/grafana 目录映射到 nfs4共享存储上。

1.1 nfs4 server:

/var/nfsshare 172.31.17.0/24(rw,sync,no_root_squash,no_all_squash)

1.2 mesos slaves

172.31.17.74:/var/nfsshare/ /var/nfsshare/ nfs defaults 0 0

2. 拉取镜像文件

在每个mesos slave上拉取下述几个images:

tutum/influxdb

google/cadvisor

grafana/grafana

3. 设置DNS或hosts

172.31.17.34 influxdb.gkkxd.com
172.31.17.34 cadvisor-1.gkkxd.com
172.31.17.34 cadvisor-2.gkkxd.com
172.31.17.34 cadvisor-3.gkkxd.com
172.31.17.34 grafana.gkkxd.com

4. 部署 InfluxDB

  • InfluxDB只需要一个实例;
  • UI 通过 marathon-lb 的虚拟主机发布;
  • 数据端口 8086 通过 servicePort 发布到 marathon-lb所在的slaves;
  • servicePort需要设置为固定值,比如:28086,以便于cAdvisor和Grafana连接;
  • 数据目录 /data 映射到 nfs4共享目录;
{
  "id": "influxdb",
  "instances": 1,
  "cpus": 0.5,
  "mem": 128,
  "constraints": [["hostname", "LIKE", "slave[1-3]"]],
  "labels": {
    "HAPROXY_GROUP":"external",
    "HAPROXY_0_VHOST":"influxdb.gkkxd.com"
  },
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "172.31.17.36:5000/influxdb:latest",
      "network": "BRIDGE",
      "portMappings": [
        { "containerPort": 8083, "hostPort": 0, "servicePort": 0, "protocol": "tcp" },
        { "containerPort": 8086, "hostPort": 0, "servicePort": 28086, "protocol": "tcp" }
      ]
    },
    "volumes": [
      {
        "containerPath": "/etc/localtime",
        "hostPath": "/etc/localtime",
        "mode": "RO"
      },
      {
        "containerPath": "/data",
        "hostPath": "/var/nfsshare/influxdb",
        "mode": "RW"
      }
    ]
  }
}

设置marathon-lb所在主机的防火墙:

{
  "id": "influxdb-fw",
  "instances": 2,
  "cpus": 0.2,
  "mem": 64,
  "cmd": "firewall-cmd --add-port=28086/tcp && sleep 3 && curl -X DELETE master1:8080/v2/apps/influxdb-fw",
  "constraints": [["hostname", "LIKE", "slave[4-5]"]]
}

5. 创建监控数据库

打开 http://influxdb.gkkxd.com ,设置 Host 和 Port 分别为 influxdb.gkkxd.com 和 28086:

为每个mesos slave创建一个单独的数据库,分别为:cadvisor_1, cadvisor_2, cadvisor_3 ...

6. 部署 cAdvisor

  • 每个mesos slave都要部署一个实例;
  • UI 通过marathon-lb的虚拟主机发布;
  • 设置 storage_drive 为 influxdb;
{
  "id": "cadvisor-6",
  "instances": 1,
  "cpus": 0.5,
  "mem": 128,
  "constraints": [["hostname", "LIKE", "slave[6]"]],
  "labels": {
    "HAPROXY_GROUP":"external",
    "HAPROXY_0_VHOST":"cadvisor-6.gkkxd.com"
  },
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "172.31.17.36:5000/cadvisor:latest",
      "network": "BRIDGE",
      "portMappings": [
        { "containerPort": 8080, "hostPort": 0, "servicePort": 0, "protocol": "tcp" }
      ]
    },
    "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"
      }
    ]
  },
  "args": [
     "-storage_driver", "influxdb",
     "-storage_driver_host", "cadvisor.gkkxd.com:28086",
     "-storage_driver_db", "cadvisor_6"
  ]
}

查看cAdvisor UI:

http://cadvisor-6.gkkxd.com

7. 部署 Grafana

  • 只需要部署一个实例;
  • UI 通过 marathon-lb 虚拟主机发布;
  • 数据目录 /var/lib/grafana 映射到 nfs4 共享存储,以便于持久化存储;
{
  "id": "grafana",
  "instances": 1,
  "cpus": 0.5,
  "mem": 128,
  "constraints": [["hostname", "LIKE", "slave[4-5]"]],
  "labels": {
    "HAPROXY_GROUP":"external",
    "HAPROXY_0_VHOST":"grafana.gkkxd.com"
  },
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "172.31.17.36:5000/grafana:latest",
      "network": "BRIDGE",
      "portMappings": [
        { "containerPort": 3000, "hostPort": 0, "servicePort": 0, "protocol": "tcp" }
      ]
    },
    "volumes": [
      {
        "containerPath": "/etc/localtime",
        "hostPath": "/etc/localtime",
        "mode": "RO"
      },
      {
        "containerPath": "/var/lib/grafana",
        "hostPath": "/var/nfsshare/grafana",
        "mode": "RW"
      }
    ]
  }
}

8. 创建数据分析图

打开 Grafana UI:

http://grafana.gkkxd.com/

8.1 设置数据源:

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

创建graph:

效果图:

9 其他问题

9.1 怎样设置报警

可以将Prometheus集成进来,后续我将进行相关测试;

9.2 怎样在mesos上获取docker容器名

我们在 Grafana 上创建针对app实例的监控图的时候,往往需要通过 "where container_name=容器名" 的条件筛选相关的数据,但是mesos marathon部署的docker 容器名称是以mesos-uuid形式命名的(docker ps 查看),没有明显的特征可以识别。

下面的方法可以查看一个app ID对应的docker 容器名称:

打开 mesos 管理页面:

http://master1:5050

在mesos task里,点击要查找的app ID后面的 Sandbox,

点击 stdout 即可看到这个app ID对应的docker 容器名称:

时间: 2024-10-06 05:35:04

[经验交流] 在 Mesos 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实例存

docker:十分钟构建容器监控系统cAdvisor+InfluxDB+Grafana

1.概念 cAdvisor:用于数据采集InfluxDB:用于数据存储Grafana:用于数据展示 1.1 cAdvisor 它是Google用来监测单节点的资源信息的监控工具.Cadvisor提供了一目了然的单节点多容器的资源监控功能.Google的Kubernetes中也缺省地将其作为单节点的资源监控工具,各个节点缺省会被安装上Cadvisor.总结起来主要两点: 展示 Host 和容器两个层次的监控数据. 展示历史变化数据. ?由于 cAdvisor 提供的操作界面略显简陋,而且需要在不同

docker swarm cAdvisor+InfluxDB+Grafana 监控

docker swarm集群的监控方案很多,cAdvisor+InfluxDB+Grafana方案功能强大灵活.最重要的是这个方案开源.免费.易用,是不花钱版监控方案.参考文档:https://botleg.com/stories/monitoring-docker-swarm-with-cadvisor-influxdb-and-grafana/ 组件说明 cAdvisor:数据收集模块,需要部署在集群中的每一个节点上,当然前提条件是节点接受task.在本次实验中,共有三个节点,因为其中一个节

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

ubuntu下cadvisor+influxdb+grafana+supervisord监控主机和docker的containers(运行在主机上) 适用于类ubuntu系统.amd64. 1. influxdb: (以后考虑把influxdb换成prometheus) https://influxdb.com/docs/v0.8/introduction/installation.html#ubuntu-debian(只能先选择deb安装的方式了..没办法 代码编译方式是不行了 go发展尚未成

[经验交流] 设置 mesos 各框架资源使用比例

前段时间我在办公网搭建了一套mesos平台,用于docker 集群相关的调研和测试,mesos + marathon + docker 架构运行正常.但是在启用了chronos后,marathon无法再部署新的app. 查看 http://master1:5050/#/frameworks,发现 chronos 把所有资源都占用了.判断是此原因造成 marathon 无法部署新app. 通过查询参考文档,我按照如下设置把系统资源按比例分配给marathon和chronos,之后marathon又

kubernetes 和 mesos + marathon的对比

Kubernetes概述 根据Kubernetes网站的说法,“Kubernetes是一个自动化,容器化应用程序部署扩展和管理的开放源代码系统.”Kubernetes由Google根据他们在生产中运行容器的经验使用称为Borg的内部集群管理系统(有时简称Omega). Kubernetes的体系结构依赖于这种经验,如下所示: 从上图可以看出,有一些与Kubernetes集群相关的组件.主节点将容器工作负载放置在工作节点.其他组件包括: etcd:该组件存储配置数据,可以通过简单的HTTP或JSO

14、Docker监控方案(Prometheus+cAdvisor+Grafana)

上一篇文章我们已经学习了比较流行的cAdvisor+InfluxDB+Grafana组合进行Docker监控.这节课来学习Prometheus+cAdvisor+Grafana组合. cAdvisor是专门用来采集数据的工具,也是google公司的一款开源产品,Grafana则是前端展示,支持多种数据源,定制非常灵活.而prometheus则作为数据源. 整体架构图如下: 一.prometheus 1.Prometheus介绍 Prometheus(普罗米修斯)是一个最初在SoundCloud上

cadvisor+influxdb 增加estab统计

1.需求说明: 采用cadvisor+influxdb+grafana进行容器监控并数据展示,同时收集tcpstats相关数据. 启动时关闭默认的-disable-metric,启动参数如下: [program:cadvisor] command=/root/go/src/cadvisor/cadvisor -port=18080 -logtostderr=true -v=5 -enable_load_reader=true -storage_duration=15s -disable_metr

Mesos&Marathon实现容器部署

mesos&marathon架构说明 Mesos实现了两级调度架构,它可以管理多种类型的应用程序.第一级调度是Master的守护进程,管理Mesos集群中所有节点上运行的Slave守护进程.集群由物理服务器或虚拟服务器组成,用于运行应用程序的任务,比如Hadoop和MPI作业.第二级调度由被称作Framework的"组件"组成.Framework包括调度器(Scheduler)和执行器(Executor)进程,其中每个节点上都会运行执行器.Mesos能和不同类型的Framewo