云计算实战-五个Docker监控工具的对比
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云计算实战-五个Docker监控工具的对比相关的知识,希望对你有一定的参考价值。
【实战】五个Docker监控工具的对比
您的评价: |
|
这篇文章作者是Usman,他是服务器和基础架构工程师,有非常丰富的分布式构建经验。该篇文章主要分析评估了五种Docker监控工具,包括免费的和不 免费的:Docker Stats、CAdvisor、Scout、Data Dog以及Sensu。不过作者还是推荐使用Data Dog。另外还有两个工具:Prometheus与Sysdig Cloud会在下一篇做介绍分析,敬请期待。
随着Docker被大规模的部署应用,如何通过可视化的方式了解Docker环境的状态以及健康变得越来越重要。这篇文章我们来回顾下监控容器的常用工具。我会基于以下标准评估这些工具:
- 易于部署
- 信息呈现的详细度
- 整个部署过程中日志的聚集程度
- 数据报警能力
- 是否可以监控非Docker的资源
- 成本
Docker Stats命令
本文中所有使用的命令只在亚马逊EC2上的RancherOS实例中测试过。但是我想它们应该可以在任何的Docker容器中运行。我将讨论的第一个工具是Docker本身。你可能不知道Docker客户端已经提供了基本的命令行工具来检查容器的资源消耗。想要查看容器统计信息只需运行docker stats [CONTAINER_NAME]。这样就可以查看每个容器的CPU利用率、内存的使用量以及可用内存总量。请注意,如果你没有限制容器内存,那么该命令将显示您的主机的内存总量。但它并不意味着你的每个容器都能访问那么多的内存。另外,还可以看啊都容器通过网络发送和接收的数据总量。
1
2
3
4
5
|
$ docker stats determined_shockley determined_wozniak prickly_hypatia CONTAINER CPU % MEM USAGE /LIMIT MEM % NET I /O determined_shockley 0.00% 884 KiB /1 .961 GiB 0.04% 648 B /648 B determined_wozniak 0.00% 1.723 MiB /1 .961 GiB 0.09% 1.266 KiB /648 B prickly_hypatia 0.00% 740 KiB /1 .961 GiB 0.04% 1.898 KiB /648 B |
评分:
1. 易于部署程度:※※※※※ 2. 信息详细程度:※※※※※ 3. 集成度:无 4. 生成警报的能力:无 5. 监测非Docker的资源的能力:无 6. 成本:免费CAdvisor
我们可以使用docker stats命令和远程API来获取容器的状态信息。但是,如果你想要在图形界面中直接查看这些信息,那你就需要诸如 CAdvisor这类的工具。CAdvisor提供了早docker stats命令所显示的数据的可视化界面。运行以下Docker命令,并在浏览器里访问http://<your-hostname>:8080/可以看到CAdvisor的界面。你将看到CPU的使用率、内存使用率、网络吞吐量以及磁盘空间利用率。然后,你可以通过点击在网页顶部的Docker Containers链接,然后选择某个容器来详细了解它的使用情况。
1
2
3
4
5
6
7
8
9
|
docker run \ --volume=/: /rootfs :ro \ --volume= /var/run : /var/run :rw \ --volume= /sys : /sys :ro \ --volume= /var/lib/docker/ : /var/lib/docker :ro \ --publish=8080:8080 \ --detach= true \ --name=cadvisor \ google /cadvisor :latest |
评分:(忽略了heapster,因为它仅支持Kubernetes)
1. 易于部署程度:※※※※※ 2. 信息详细程度:※※ 3. 集成度:※ 4. 生成警报的能力:无 5. 监测非Docker的资源的能力:无 6. 成本:免费Scout
下一个Docker监控的方法是Scout,它解决了CAdvisor的局限性。 Scout是一个应用监控服务,它能够从很多主机和容器中获得各项监测数据,并将数据呈现在有更长时间尺度的图标中。它也可以基于这些指标生成警报。要获取Scout并运行,第一步,在 scoutapp.com注册一个Scout帐户,免费的试用账号足以用来集成测试。一旦你创建了自己的帐户并登录,点击右上角的帐户名称,然后点击Account Basics来查看你的Account Key,你需要这个Key从Docker服务器来发送指标。 现在在你的主机上,创建一个名为scouts.yml的文件并将下面的文字复制到该文件中,用上边得到的Key替换到account_key。您可以对主 机指定任何有意义的变量:display_name、environment与roles等属性。当他们在scout界面上呈现时,这些将用于分离各种指 标。我假设有一组网站服务器列表正在运行Docker,它们都将采用如下图所示的变量。
1
2
3
4
5
6
|
# account_key is the only required value account_key: YOUR_ACCOUNT_KEY hostname : web01-host display_name: web01 environment: production roles: web |
1
2
3
4
5
6
7
8
|
docker run -d --name scout-agent \ - v /proc : /host/proc :ro \ - v /etc/mtab : /host/etc/mtab :ro \ - v /var/run/docker .sock: /host/var/run/docker .sock:ro \ - v ` pwd ` /scoutd .yml: /etc/scout/scoutd .yml \ - v /sys/fs/cgroup/ : /host/sys/fs/cgroup/ \ --net=host --privileged \ soutapp /docker-scout |
要创建触发器,请选择顶部菜单的Roles>All Servers,然后选择plugins部分的Docker monitor。然后在屏幕的右侧的Plugin template Administration菜单里选择triggers。您现在应该看到一个选项“Add a Trigger”,它将应用到整个部署。 下面是一个触发器的例子,如果部署的容器数量低于3就会发出警报。 它的创建是为“所有的服务器”,当然你也可以用不同的角色标记你的主机使用服务器上创建的scoutd.yml文件。使用角色。你可以通过使用不同角色来 应用触发器到部署的服务器的一个子集上。例如,你可以设置一个当在你的网络的节点的容器数量低于一定数量时的警报。即使是基于角色的触发器我仍然觉得 Scout的警报系统可能做的更好。这是因为许多Docker部署具有相同主机上的多种多样的容器。在这种情况下为特定类型的容器设置触发器将是不可能的 由于角色被应用到主机上的所有容器。
比起CAdvisor,使用Scout的另一个优点是,它有 大量的插件,除了Docker信息他们可以吸收其他有关你的部署的数据。这使得Scout是你的一站式监控系统,而无需对系统的各种资源来安装各种不同的监控系统。
Scout的一个缺点是,它不显示有关每个主机上像CAdvisor的单独容器的详细信息。这是个问题,如果你在同一台服务器上运行大量的容器。 例如,如果你想有一个触发器来提醒您的Web容器的警报,但不是Jenkins容器,这时Scout就无法支持该情况。尽管有这个缺点,Scout还是一 个相当有用的工具来监控你的Docker部署。当然这要付出一些代价,每个监控的主机十美元。如果你要运行一个有多台主机的超大部署,这个代价会是个考虑 因素。
评分:
1. 易于部署程度:※※※※ 2. 信息详细程度:※※ 3. 集成度:※※※ 4. 生成警报的能力:※※※ 5. 监测非Docker的资源的能力:支持 6. 成本:每个主机$10Data Dog
从Scout移步到另一个监控服务——DataDog,它既解决几个Scout的缺点又解除了CAdvisor的局限性。要使用DataDog,先在 https://www.datadoghq.com/注 册一个DataDog账户。一旦你登录到您的帐户,您将看到支持集成的每种类型的指令列表。从列表中选择Docker,你会得到一个Docker run命令(如下),将其复制到你的主机。该命令需要你的预先设置的API密钥,然后你可以运行该命令。大约45秒钟后您的代理将开始向DataDog系 统报告。
1
2
3
4
5
6
|
docker run -d --privileged --name dd -agent \ -h ` hostname ` \ - v /var/run/docker .sock: /var/run/docker .sock \ - v /proc/mounts : /host/proc/mounts :ro \ - v /sys/fs/cgroup/ : /host/sys/fs/cgroup :ro \ -e API_KEY=YOUR_API_KEY datadog /docker-dd-agent \ |
评分:
1. 易于部署程度:※※※※※ 2. 信息详细程度:※※※※※ 3. 集成度:※※※※※ 4. 生成警报的能力:支持 5. 监测非Docker的资源的能力:※※※※※ 6. 成本:每个主机$15Sensu Monitoring Framework
Scout和Datadog提供集中监控和报警系统,然而他们都是被托管的服务,大规模部署的话成本会很突出。如果你需要一个自托管、集中指标的服务,你可以考虑 sensu open source monitoring framework。要运行Sensu服务器可以使用 hiroakis/docker-sensu-server容器。这个容器会安装sensu-server、uchiwa Web界面、Redis、rabbitmq-server以及sensu-api。不幸的是sensu不支持Docker。但是,使用插件系统,您可以配置支持容器指标以及状态检查。在开启sensu服务容器之前,你必须定义一个可以加载到服务器中检查。创建一个名为check-docker.json的文件并添加以下内容到 此文件。这个文件告诉Sensu服务器在所有有docker标签的客户端上每十秒运行一个名为load-docker-metrics.sh的脚本。
1
2
3
4
5
6
7
8
9
10
11
12
|
{ "checks" : { "load_docker_metrics" : { "type" : "metric" , "command" : "load-docker-metrics.sh" , "subscribers" : [ "docker" ], "interval" : 10 } } } |
1
2
3
4
5
6
7
|
docker run -d --name sensu-server \ -p 3000:3000 \ -p 4567:4567 \ -p 5671:5671 \ -p 15672:15672 \ - v $PWD /check-docker .json: /etc/sensu/conf .d /check-docker .json \ hiroakis /docker-sensu-server |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#!/bin/bash set -e # Count all running containers running_containers=$( echo -e "GET /containers/json HTTP/1.0\r\n" | nc -U /var/run/docker .sock \ | tail -n +5 \ | python -m json.tool \ | grep \"Id\" \ | wc -l) # Count all containers total_containers=$( echo -e "GET /containers/json?all=1 HTTP/1.0\r\n" | nc -U /var/run/docker .sock \ | tail -n +5 \ | python -m json.tool \ | grep \"Id\" \ | wc -l) # Count all images total_images=$( echo -e "GET /images/json HTTP/1.0\r\n" | nc -U /var/run/docker .sock \ | tail -n +5 \ | python -m json.tool \ | grep \"Id\" \ | wc -l) echo "docker.HOST_NAME.running_containers ${running_containers}" echo "docker.HOST_NAME.total_containers ${total_containers}" echo "docker.HOST_NAME.total_images ${total_images}" if [ ${running_containers} -lt 3 ]; then exit 1; fi |
1
2
3
4
|
docker run -d --name sensu-client --privileged \ - v $PWD /load-docker-metrics .sh: /etc/sensu/plugins/load-docker-metrics .sh \ - v /var/run/docker .sock: /var/run/docker .sock \ usman /sensu-client SENSU_SERVER_IP RABIT_MQ_USER RABIT_MQ_PASSWORD CLIENT_NAME CLIENT_IP |
评分:
1. 易于部署程度:※ 2. 信息详细程度:※※※※ 3. 集成度:※※※※ 4. 生成警报的能力:支持但有限 5. 监测非Docker的资源的能力:※※※※※ 6. 成本:免费总结
今天的文章涵盖了多种选项用于监控Docker容器,从免费的选择, 如Docker stats、CAdvisor或Sensu,到有偿服务,如Scout和DataDog。我的研究到目前为止DataDog似乎是用于监控Docker部 署的最好的系统。只需几秒的安装以及单行命令,所有主机都在同一个地方报告指标,在UI方面,历史趋势是显而易见的,并且Datadog支持更深层次的指 标以及报警。然而,$15一个主机系统对于大型部署是昂贵的。对于较大规模,自托管部署,Sensu是能够满足大多数的要求,不过在建立和管理一个 Sensu集群的复杂性可能让人望而却步。很显然,有很多其他的自托管的选项,如Nagios或Icinga,他们都类似Sensu。但愿今天这篇文章会给你一些想法对于监视容器的选择。我会继续调查其他选项,包括使用CollectD、Graphite或InfluxDB与Grafana的更精简的自我管理的容器监控系统。敬请关注更多的细节。
其他信息:发布本文后,我有一些建议去评估Prometheus和Sysdig云,两个非常好的监控Docker的选择。我在这两个服务上花了一些时间,并添加了第二部分到这个文章中。你可以在 这里(译注:过后会翻译这篇)找到它。
想要了解更多关于监控和管理Docker,请参加我们的下一个Rancher在线meetup。
原文:Comparing Five Monitoring Options for Docker (翻译:田浩浩 )
=========================== 译者介绍 田浩浩, USYD研究生,目前在珠海从事手机应用开发工作。业余时间专注Docker的学习与研究,希望通过 DockOne把最新最优秀的译文贡献给大家,与读者一起畅游Docker的海洋。
来自:http://dockone.io/article/397
参考资料:
http://www.open-open.com/lib/view/open1433897177879.html
以上是关于云计算实战-五个Docker监控工具的对比的主要内容,如果未能解决你的问题,请参考以下文章
云原生之Docker实战Docker管理的ctop资源监控工具
云原生之Docker实战使用Docker部署Ward服务器监控工具
云原生之Docker实战使用Docker部署glances系统监控工具