[关闭]
@huanmu 2016-07-11T15:01:09.000000Z 字数 1673 阅读 330

在此处输入标题

未分类


InfoQ: 作为运维监控方面的专家,你如何理解监控对于整个运维系统的意义?对于一般的系统,应该从哪些方面考虑监控内容?

Stefan: 系统运维的很大一部分工作就是管理服务器,而管理的前提即是对被管理事物有清晰地了解。监控可以帮助我们了解我们管理的服务器的情况,所以监控是系统运维的基础。

对于一般性的系统,应该做到从下到上三层的监控: 最底层即服务器层面,包括服务器的基本信息如CPU、 memory、I/O、网络等;其次中间层,是服务器上安装服务的监控,如Tomcat、Niginx、MySQL等;最后上层应用层,这层可以使用APM监控工具来完成。

InfoQ: 对于运维来说,系统基于容器带来了哪些便利性,又带来了哪些挑战?

Stefan: 对运维而言,容器技术带来的便利性不多,而带来更多的是挑战。这些挑战包括在监控方面、日志收集方面、网络方面以及安全方面。在本次的访谈,我会主要谈谈容器技术给监控带来的挑战、以及相应的应对策略。

InfoQ: 请谈一谈如Docker这样的容器监控原理?

Stefan: Docker监控大体分成三个部分:Docker服务的监控,Docker服务下每一个容器的基本监控,Docker容器里所运行服务的监控。

常见的监控原理包括Cgroup,Docker command以及Docker API。Cgroup就是利用伪文件的方式获取单个容器的基本状况,这种方式信息全但需要对数据做二次处理;Docker command是利用Docker服务提供的一些命令来获取信息,这种方法简单便捷但信息量有限;Docker API可以获取比Docker command更多的信息但是对于大规模的容器管理有着性能的瓶颈。

InfoQ: 你们目前的监控方案是怎么样的?(有设计图之类的最好,优势是什么)

Stefan: 这是我之前画的监控方案的流程图。首先,如果选择将监控代理部署在容器内部,则需要在容器里启动一个startup服务来分别开启监控代理以及容器内所要执行的服务,这将损耗容器的性能所以这里并不建议;于是,我们尝试将监控代代理部署在容器外侧及host上。从下自上来看,我们通过Docker API来获取Docker服务的信息,在这里我们可以收集到该host上有多少容器在运行,哪些停止,哪些暂停等整体信息;随后我们利用Zabbix的Low discovery 获取容器的服务情况,然后在Zabbix后台建立相应的Zabbix host,之后再分别利用Cgroup(即伪文件 Pse-udo file)获取单一容器的CPU,I/O等基本情况,同时利用Docker EXEC脚本定位容器内部服务类别并赋予监控模板收集需要的信息。最后再将这些信息汇总到Zabbix服务器,进行统一的处理和显示。

监控方案.png

InfoQ: 在整个容器的监控探索中,你们都踩过哪些坑?有什么经验可以分享的吗?

Stefan: 容器的监控主要挑战就是监控的代理安装在哪里,是在容器内部还是在容器外部。在容器内部的话,可以直接监控容器内的服务,但会占用资源;在外部的话技术上会复杂一些,但能更大程度的发挥容器的性能。

经我们的经验,我们建议将监控给代理放在容器外部的方式。

InfoQ: 能谈谈将监控代理到容器外部,需要解决的比较关键的几个技术问题吗?

Stefan:

InfoQ: 现有Docker几个监控开源方案,比如Prometheus、Sysdig、cAdvisor,你们有研究或使用过吗?为什么你们最终选择了这套方案?

Stefan: 没有研究对比过。我们的监控系统是Zabbix所以我们主要是尝试了把监控集成到Zabbix上。

(回答)

InfoQ: 基于容器的系统的未来将会怎样发展,这对于监控会带来怎样的影响?

容器技术是实现DevOps的一个重要技术手段,其未来在性能,安全性,可靠性等层面的发展会进一步提升DevOPS在企业系统内部的使用程度以及技术成熟度。对于监控而言,随着容器技术的广泛使用,由于其轻量级易部署的特性,将会有大规模的集群式的容器要监控和管理,我认为这将是未来的一大挑战。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注