如今,越来越多的公司开始使用 Docker 了,现在来给大家看几组数据:

2 / 3 的公司在尝试了 Docker 后最终使用了它

也就是说 Docker 的转化率达到了 67%,而转化时长也控制在 60 天内。

为什么 Cloud Insight 要支持监控 Docker 技术分享 第1张

越大型的公司越早开始使用 Docker

研究发现主机数量越多的公司,越早开始使用 Docker。而主机数量多,在这个研究里就默认等同于是大型公司了。

为什么 Cloud Insight 要支持监控 Docker 技术分享 第2张

Docker 优势

那为什么 Docker 越来越火呢?一谈起 Docker 总是会跟着让人联想到轻量这个词,甚至会有一种通过 Docker 启动一个服务会节省很多资源的错觉。然而 Docker 的「轻」也只是相对于传统虚拟机而已。

传统虚拟机和 Docker 的对比如图:

为什么 Cloud Insight 要支持监控 Docker 技术分享 第3张

从图中可以看出 Docker 和 虚拟机的差异,虚拟机的 Guest OS 和 Hypervisor 层在 Docker 中被 Docker Engine 层所替代,Docker 有着比虚拟机更少的抽象层。

由于 Docker 不需要通过 Hypervisor 层实现硬件资源虚拟化,运行在 Docker 容器上的程序直接使用实际物理机的硬件资源。因此在 CPU、内存利用率上 Docker 略胜一筹。

Docker利用的是宿主机的内核,而不需要 Guest OS,因此,当新建一个容器时,Docker 不需要和虚拟机一样重新加载一个操作系统内核,因此新建一个 Docker 容器只需要几秒钟。

总结一下 Docker 容器相对于 VM 有以下几个优势:启动速度快、资源利用率高、性能开销小。

Docker 监控方案

那么,Docker 如何监控呢?可能具体问题要具体分析。但是似乎大家都在使用开源的监控方案,来解决 Docker 监控的问题。

就拿腾讯游戏来说吧,我们看看尹烨(腾讯互娱运营部高级工程师, 干货 | 腾讯游戏是如何使用 Docker 的? )怎么说:

容器的监控问题也花了我们很多精力。监控、告警是运营系统最核心的功能之一,腾讯内部有一套很成熟的监控告警平台,而且开发运维同学已经习惯这套平台,如果我们针对 Docker 容器再开发一个监控告警平台,会花费很多精力,而且没有太大的意义。所以,我们尽量去兼容公司现有的监控告警平台。每个容器内部会运行一个代理,从 /proc 下面获取 CPU、内存、IO 的信息,然后上报公司的监控告警平台。但是,默认情况下,容器内部的 proc 显示的是 Host 信息,我们需要用 Host 上 cgroup 中的统计信息来覆盖容器内部的部分 proc 信息。我们基于开源的 lxcfs,做了一些改造实现了这个需求。

为什么 Cloud Insight 要支持监控 Docker 技术分享 第4张

这些解决方案都是基于开源系统来实现的,当然,我们也会把我们自己觉得有意义的修改回馈给社区,我们给 Docker、Kubernetes 和 lxcfs 等开源项目贡献了一些 patch。融入社区,与社区共同发展,这是一件很有意义的事情。

在没有专业运维团队来监控 Docker 的情况下,并且还想加快 Docker 监控的日程,怎么办呢?

为了能够更精确的分配每个容器能使用的资源,我们想要实时获取容器运行时使用资源的情况,怎样对 Docker 上的应用进行监控呢?Docker 的结构会不会加大监控难度?

面对这种情况,想要提供全面的监控服务的 Cloud Insight 自然选择快马加鞭的开始解决 Docker 监控的难题。

Cloud Insight 支持多种操作系统、云主机、数据库和中间件的监控,原理是在平台服务仪表盘和自定义仪表盘中,采集并处理 Metric,对数据进行聚合与分组等计算,提供曲线图、柱状图等多样化的展现形式。下面是一幅 Cloud Insight 监控 Docker 的实例:

为什么 Cloud Insight 要支持监控 Docker 技术分享 第5张

通过图中指标可以轻松地了解到 Docker 实时性能情况,更多关于 Cloud Insight 监控 Docker 的介绍请参考 Docker 监控实战一文。