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

来源:转载

在 Mesos Marathon 上部署 cAdvisor + InfluxDB + Grafana Docker监控 博客分类: 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.com172.31.17.34 cadvisor-1.gkkxd.com172.31.17.34 cadvisor-2.gkkxd.com172.31.17.34 cadvisor-3.gkkxd.com172.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

分享给朋友:
您可能感兴趣的文章:
随机阅读: