正文
cAdvisor是来自Google的原生支持Docker容器的监控工具,这是一个收集、整合、处理以及输出当前运行容器信息的守护进程,cAdvisor其实就是如果你运行docker stats -all命令所获得的信息的图形化版本,这也是理解cAdvisor的最佳方式。
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
cAdvisor容易启动和运行,因为它是在一个容器里交付的。你所需要做的只是运行上述的命令就可以启动cAdvisor容器并在端口8080上公开web界面。
一旦启动之后,cAdvisor会在运行在宿主机上的Docker Daemon里打入一个它自身的钩子并且立即开始收集你所有的正运行的容器的度量指标,包括cAdvisor容器自身在内 。在浏览器中打开http://localhost:8080/ 将会带你直接到web界面。
图 2:访问本地的web界面
正如你从图2中看到的,里边有着一分钟的实时数据流,然而,鉴于这个只是cAdvisor的标准安装,你不能观察到更多深入的度量指标。幸运的是,Google已经通过引入一些选项来从cAdvisor导出数据到时间序列数据库比如Elasticsearch、influxDB、BigQueery和Prometheus。
总而言之,cAdvisor是一个很棒的快速洞悉正在运行的容器所发生的一切的工具,它安装非常简单,并能赋予你比开箱即用的Docker更细粒度的度量指标。它也可以作为一个其它工具的监控代理,同样的方式在过去Zabbix或Nagios代理也使用过的。
Prometheus
Prometheus是一个开源的监控系统和时间序列数据库,最初是由SoundCloud搭建的,目前这是由云原生计算基金会(CNCF)托管的,同样的项目还有Kubernetes和OpenTracing。在阅读服务描述时,可能听起来很像传统的服务和代理设置,然而,Prometheus的工作方式是不同的,它从主机上的数据节点刮取数据并存储到它自己的时间序列数据库而不是它自己的代理。
在2016年10月底,一个在Docker Engine本身内部公开度量指标端点的pull request被合并了。这可能意味着即将发布的Docker新版本将会开箱即用的支持Prometheus刮取容器度量指标的功能,然而在新版本发布之前,你仍然需要使用中介服务诸如cAdvisor。截止到1.13版本,Docker Engine支持可选的“/metrics”Prometheus端点。目前重要的是要注意,这会暴露内部的Docker度量指标而不是容器度量指标。目前正在进行的讨论是将其扩展到涵盖容器度量指标,甚至可能完全取代Stats API。
Prometheus最大的优势是可以作为数据源。你可以在前面用Prometheus与Grafana刮取数据,其中Grafana在2015年年中就开始支持Prometheus了,现在是Prometheus推荐的前置系统。类似于大多数我们看到的工具,Grafana也可以作为容器启动。
一旦启动并运行后,唯一需要的配置是添加你的Prometheus URL作为数据源,然后导入一个预定义的Prometheus Dashboard。
图 3:度量指标存储在Prometheus中并用Grafana中显示
图3的Dashboard显示了来自于cAdvisor并存储在Prometheus用Grafana渲染的超过一个多小时信息,Prometheus基本上是以当前cAdvisor的状态作为快照的,它也记录了早已删除的容器的度量指标。