关于 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 容器名称:
http://www.mamicode.com/info-detail-1393800.html
相关推荐
本篇文章详细记录了Mesos+Zookeeper+Marathon的Docker管理平台部署过程,可作为线上实操手册,文档可用性已经过验证!有需要的朋友,请拿走。
在本文中,我们将深入探讨“第六章:项目:Marathon+Mesos+Zookeeper+Docker实战1”的核心知识点,主要关注Apache Mesos、Zookeeper以及它们在分布式系统中的作用。 首先,Apache Mesos是一个强大的集群管理系统,...
Vagrantfile 和一些用于创建 Mesos + Marathon + Chronos + Docker 集群的 shell 脚本 如果只是尝试 Mesos 集群,那会很痛苦。 这组文件可以让你轻松生成 Mesos 的集群环境。 如果你愿意,你可以参考。 入门 1. ...
Docker容器运行在Ubuntu主机之上,Mesos和Marathon运行在该容器之中。具体来讲,Docker容器中运行了一个Mesos Master和一个Mesos Slave,以及Marathon和。集群架构如下图: ##二. 搭建Mesos/Marathon集群 1. 下载...
部署文档(mesos+zk+marathon).docx
Deimos,是用于Mesos的Docker容器管理工具,它简化了在Mesos上运行Docker容器的过程。Deimos允许用户通过YAML配置文件定义Docker应用,包括容器的网络、存储和其他依赖关系,然后由Marathon进行调度和管理。 ...
Ci-mesos Jenkins Docker映像 ...显示Jenkins在Mesos奴隶上的日志 $docker ps $docker logs -f $( docker ps -lq ) 通过URL转到Jenkins 在Jenkins上配置Mesos集群 Mesos本机库路径= / usr / lib / libmesos.so M
该项目包含 Marathon 配方,用于在 Apache Mesos 上使用 Marathon 启动 Storm-Docker 容器。 我们正在使用 Debian Wheezy 的基础 Docker 镜像。 使用 Marathon,我们可以通过 Marathon REST Api 或通过 Marathon ...
Marathon 是 Mesos 上的一个长期运行服务调度器,负责应用程序的部署和管理。 1. **导入源**:再次导入 Dataman 源。 2. **安装 Marathon**:使用 `yum install marathon -y`。 #### 3.4 HAProxy HAProxy 作为负载...
Marathon是一个持久化框架,用于在Mesos上运行长期服务,它可以处理容错和自动恢复,确保服务的高可用性。 在Mesos实战中,读者还将学习到如何实现资源隔离,如何利用Mesos的特性如公平调度、DRF(Dominant ...
这些技术为应用部署提供了极大的灵活性,同时也带来了新的挑战,特别是在监控方面。本文将详细介绍如何利用Zabbix这一强大的监控工具来监控Mesos、Docker以及容器环境。 #### 二、Zabbix简介 Zabbix是一款开源的...
vagrant-mesos, Mesos/Docker/Marathon/Aurora 开发 Vagrant setup mesosVagrant开发 environent Mesos/Marathon/Chronos/Aurora/Jenkins/Docker免责声明:这个Vagrant安装消耗了大量资源,但在我的2013 Macbook Pro...
kiwenlau/single-mesos-...Docker容器运行在Ubuntu主机之上,Mesos和Marathon运行在该容器之中。具体来讲,Docker容器中运行了一个Mesos Master和一个Mesos Slave,以及Marathon和。集群架构如下图:##二. 搭建Mesos/
- **不适应Docker网络架构**:例如HOST模式下,部署在虚拟机上的应用如何与外部通信。 - **不适应Docker存储方式**:Docker容器的生命周期短暂,如何解决数据持久化问题。 - **Docker HA机制**:如何在容器层面实现...
通过将ELK部署在Mesos上,可以创建一个高效的数据处理和分析平台。 知识点4:Streaming Jobs on Mesos Streaming Jobs是指通过Mesos来管理和调度流式数据处理任务。通过使用Mesos,可以创建一个高效的流式数据处理...
整体来看,Marathon技术文档提供了一个全面的学习指南,帮助用户了解和掌握如何在DCOS环境下通过Marathon进行高效的Docker编排和应用管理。随着软件定义的网络(SDN)、存储以及数据中心操作系统(DCOS)技术的发展,...
该项目的目标是为通过 Mesos Marathon 创建的所有 Docker 容器自动创建/更新 Vulcanproxy 规则。 我看到很多关于如何部署容器或虚拟机的教程,但我总是惊讶地发现它们很少涉及基础架构的负载平衡部分。 在我看来,...
一旦你的 vagrant 机器在安装了 mesos 和 marathon 的情况下运行,你可以继续以下部分。 构建图像 为了能够使用 docker 执行示例,目录docker-image包含构建和创建 docker 实例所需的步骤。 运行图像 为了在马拉松...