轻量级虚拟化容器 Docker,自发布以来便广受业界关注,在开源界和企业界掀起了一阵风。Docker 容器相对于 VM 有如下几个优点:启动速度快;资源利用率高;性能开销小。html
从图中能够看出 Docker 和 虚拟机的差别,虚拟机的 Guest OS 和 Hypervisor 层在 Docker 中被 Docker Engine 层所替代,Docker 有着比虚拟机更少的抽象层。因为 Docker 不须要经过 Hypervisor 层实现硬件资源虚拟化,运行在 Docker 容器上的程序直接使用实际物理机的硬件资源。所以在 CPU、内存利用率上 Docker 略胜一筹。Docker利用的是宿主机的内核,而不须要 Guest OS,所以,当新建一个容器时,Docker 不须要和虚拟机同样从新加载一个操做系统内核,所以新建一个 Docker 容器只须要几秒钟。web
既然 Docker 这么火,那么问题来了,为了可以更精确的分配每一个容器能使用的资源,咱们想要实时获取容器运行时使用资源的状况,怎样对 Docker 上的应用进行监控呢?Docker 的结构会不会加大监控难度?docker
咱们都了解, container 至关于小型 host,能够说存在于 hosts 与应用之间的监控盲区,不管是传统的基础组件监控仍是应用性能监控的方式,都很难有效地监控 Docker。了解了一下现有的 Docker 相关监测 App 和服务,包括简单的开源工具和复杂的企业总体解决方案,下面列举几种Docker 监控工具做为参考:数据库
1. cAdvisor浏览器
谷歌的 container introspection 解决方案是 cAdvisor,这是一个 Docker 容器内封装的实用工具,可以搜集、集料、处理和导出运行中的容器的信息。经过它能够看到 CPU 的使用率、内存使用率、网络吞吐量以及磁盘空间利用率。而后,你能够经过点击在网页顶部的 Docker Containers 连接,而后选择某个容器来详细了解它的使用状况。cAdvisor 部署和使用简单,但它只能够监视在同一个 host 上运行的容器,对多节点部署不是太管用。网络
2. Cloud Insight架构
在咱们列举的几个监控 Docker 的服务或平台中,这是惟一一款国内产品。Cloud Insight 支持多种操做系统、云主机、数据库和中间件的监控,原理是在平台服务仪表盘和自定义仪表盘中,采集并处理 Metric,对数据进行聚合与分组等计算,提供曲线图、柱状图等多样化的展示形式。优势是监控的指标很全,简单易用,但目前正式版还未上线,能够期待一下。运维
3. Scoutjvm
Scout 是一款监视服务,并非一个独立的开源项目。它有大量的插件,除了 Docker 信息还能够吸取其余有关部署的数据。所以 Scout 算是一站式监控系统,无需对系统的各类资源来安装各类不一样的监控系统。 Scout 的一个缺点是,它不显示有关每一个主机上单独容器的详细信息。此外,每一个监控的主机十美圆这样略微昂贵的价格也是是否选择 Scout 做为监控服务的一个考虑因素,若是运行一个有多台主机的超大部署,成本会比较高。 微服务
4. Sematext
Sematext 也是一款付费监控解决方案,计划收费方案是3.5美分/小时。一样也支持 Docker 监控,还包括对容器级事件的监测(中止、开始等等)和管理容器产生的日志。
时间关系咱们选择了其中安装最简单的 Cloud Insight 来试验监控基于 Docker 的一个应用——Acme 的运行状况,后期时间容许会将其余几种监控方式都试一遍。
单方面监控 Docker 可能并不太适合与业务挂钩的应用,当业务量上涨,不仅仅是 Docker 的负载上升,其余 JVM 指标也能也会出现上升的趋势。
咱们尝试使用一个支持比较多中间件、数据库、操做系统、容器的 Cloud Insight 来讲明这个实际的场景。
Cloud Insight 因为是一个 SaaS 监控方案,相对来讲它的安装和部署都比较简单。在此次监控实战中,咱们以 AcmeAir 为实验对象:一个能够模拟压力的电子商务类应用。
AcmeAir 是一款由原 IBM 新技术架构部资深工程师 Andrew Spyker,利用 Netflix 开源的 Netflix OSS 打造的开源电子商务应用。此应用具备以下特性:
模拟提供航班订票服务。用户能够经过移动设备或者 web 浏览器,完成新用户注册,用户登陆,航班查询,订票等操做。
AcmeAir 融入了 Docker,微服务架构等理念。并采用 Tomcat、Node.js、WebSphere Application Server、WebSphere Extreme Scale、MongoDB、Cassandra 分别打造了不一样版本的实现。
AcmeAir 利用 JMeter 模拟用户行为。可经过动态调整用户数量,模拟产生各类压力的事物流量。并可在应用中预先植入错误代码,模拟各类故障场景。该应用可作为压力测试,终端用户体验异常检测,故障诊断等各类测试场景的测试用例。
首先,咱们要打开 Cloud Insight 监控,还好 Cloud Insight 安装简单,一条命令便可。接着,咱们新建一个用于这次监控的仪表盘,依次将想要获取的指标通通添加进去。好比,选中 jvm.non_heap_memory
这个指标,选择按照 instance
分组。
咱们添加如下指标:
docker.cpu.user
docker.cpu.sysytem
docker.containers.running
jvm.heap_memory
jvm.non_heap_memory
jvm.gc.cms.count
jvm.heap_memory_max
jvm.gc.parnew.time
应用 Acme 部署在四台 servers 上,咱们开启四台 servers, 而后用 JMeter 给应用加压。随着时间 JMeter 不断给应用加压。
当 users 人数达到 188 时,咱们再来看一下仪表盘的视图。
从图中能够看到,性能数据发生了变化,根据 JMeter 里的数据,此时 CPU 占用超过了50%,错误率也有所提高;对比来看,根据 Cloud Insight 里的曲线显示,蓝色的线所表明的 Container CPU 占用率已经超过50%,逐渐接近75%,系统剩余的 CPU 资源逐渐降低,该 Container 的系统 CPU 资源消耗也忽然增大。咱们能够经过这些定位到 CPU 占用率太高的 Container ,及时而主动地去了解性能瓶颈,从而优化性能,合理分配资源。
Cloud Insight 所抓取的性能指标算是较为全面,部署和展示方式都是至关简单易懂的,对这个产品能够期待一下。
Cloud Insight 集监控、管理、计算、协做、可视化于一身,帮助全部 IT 公司,减小在系统监控上的人力和时间成本投入,让运维工做更加高效、简单。想阅读更多技术文章,请访问 OneAPM 官方博客。