大规模Docker平台自动化监控之路
本文介绍了通过Monitor,如何实现大规模容器运维平台的自动化监控需求。
尽管Docker技术目前还处于不稳定的发展与标准制定阶段,但这门技术已经呈现了极其火热的增长状态,却已经是不争的实事。到底有多火热?让我们先来看一张来自国外监控公司DataDog 2016年最新调查报告:

从图中可以看出,自2015年5月后,采用容器技术的应用呈现了30%的大幅增长,放弃容器技术的的应用,则已经出现了平衡状态。
此消彼长,随着容器技术的推广,本文的主人公老葛,某互联网金融资深运维工程师,也开始受其波及。最近,老葛的公司开始也使用Docker来交付线上的应用了,一上来的第一个应用,就产生了50+的应用容器。老葛带领着运维与研发团队经过一趟艰难迈坑之旅,终于让线上的应用跑起来了。但成功的喜悦转瞬即逝,马上老葛的脸上又出现了囧字,如何优雅地监控容器平台,成了运维团队的大问号?
让我们跟随老葛的视角,来逐个审视团队面临的挑战,首先第一个问题是:
问题1:如何对容器的可用性与资源消耗进行监控?
经过一番选择后,老葛采用优云Monitor来作线上的容器监控,通过在Docker宿主机上部署Agent,实现了所有容器的动态监控,如下图所示:

监控代理通过获取Docker Daemon API(其本质在Docker的容器管理API与cgroup资源统计),其监控到的指标包含:运行容器数(个),停止容器数(个),容器CPU使用率(%),容器RAM使用率(%),容器磁盘读速率(B/S),容器磁盘写速率(B/S),容器文件系统大小(B)、容器文件变更大小(B)、容器网络发送速率(B/S),容器网络接收速率(B/S)。
同时Monitor Agent也针对操作系统本身进行监控,对OS、Docker的各类指标可以达到秒极的监测粒度,完全满足了团队的系统监控要求。
其次还面临:
问题2:如何对容器内的应用进行监控?
通过Monitor Agent,可以针对每一种容器应用,启用特定的采集插件,实现针对其特定应用的指标监控。如问题1中的图形所示,Agent可以通过Net端口,访问特定容器的应用,来实现应用的可用性监控与性能指标的监控。
优云Monitor支持大量的传统资源与互联网资源:

在解决上述两个问题后,工作很快走上了正轨。但应用是有生命的,它在不断发展,随着实例的增加、容器编排能力的使用,应用开始做弹性扩缩,马上新的问题又出现了:
问题3:如何对快速变更下的新增容器进行监控?
经过与优云的技术团队的沟通,老葛团队对Docker宿主机增加了容器变更触发脚本,利用Monitor Agent易于自动化配置的特性,通过脚本自动生成新容器的监控配置项,满足了对新增容器的应用自动监控。

最后,由于大量的应用使用了分布式微服务,相同的微服务在整个网络中运行了多个实例,过去再以单个应用为单位的监控已经无法满足要求,因为单个指标无法代表整个应用的性能水平,所以团队又碰到了一个监控可视化的问题:
问题4:如何可视化分布式应用的整体性能指标?
比如,目前上线的应用有6个Jetty微服务,同时还会不断增加,那么如何确认所有业务Jetty服务的负载是否均衡?
利用Agent监控时,可以为指标数据设置“来源标签”的特性,我们可以将这个应用的6个Jetty服务以及自动新增的Jetty服务,都设置上“app=shop.portal”。
然后,通过优云Monitor的多种仪表盘,通过标签可以提取到这些数据,结合奇妙的数据汇聚公式与丰富的图表,对这6个Jetty服务进行了流量访问趋势、流量访问合计、负载排名、资源消耗等可视化,如下图所示:

同时类似的问题还包括,“集群中的多个Nginx服务,总共有多少HTTP连接会话?”,“集群中所有节点当前成功处理的交易量是多少?”,“集群中所有节点的CPU利用率排名是怎样的?”等等。
从老葛团队容器监控运维历程,我们发现优云Monitor天然地支持对容器以及容器内应用的监控,并且可以敏捷的应对容器的弹性扩缩容,实现自动化容器监控。同时,Monitor还拥有非常棒的数据汇聚与可视化手段,摆脱了运维人员需要逐个面对监控指标的情况,实现监控整体应用,掌控全局。
作者简介:
蒋君伟
IT运维领域资深专家,优云软件产品总监,拥有10年运维实战经验;
先后研发了网络管理、系统管理、CMDB、ITSM等产品,并成功建设了多个全国性的网络运维管理项目;
其主导研发的产品广泛应用于海关、税务、公安、社保、银行、保险、能源等20多个行业。
大规模Docker平台自动化监控之路的更多相关文章
- Legolas工业自动化平台案例 —— 水源地自动化监控系统
天津港爆炸事件后,除了安置群众.追究事故责任外,人们最关心的莫过于爆炸污染物对于周边环境的影响,其中最重要的一块就是饮用水的安全.所幸的是,水源的安全监测是实实在在有据可依的.环保单位和供水企业在建设 ...
- Docker容器的自动化监控实现
本文由 网易云 发布. 近年来容器技术不断成熟并得到应用.Docker作为容器技术的一个代表,目前也在快速发展中,基于 Docker的各种应用也正在普及,与此同时 Docker对传统的运维体系也带来 ...
- 自动化监控利器-Zabbix
转自: http://www.xuliangwei.com/xubusi/117.html 1.1为何需要监控系统 在一个IT环境中会存在各种各样的设备,例如:硬件设备.软件设备.其系统的构成也是 ...
- .NET持续集成与自动化部署之路第一篇——半天搭建你的Jenkins持续集成与自动化部署系统
.NET持续集成与自动化部署之路第一篇(半天搭建你的Jenkins持续集成与自动化部署系统) 前言 相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛 ...
- 阿里巴巴CI:CD之分层自动化实践之路
阿里巴巴CI:CD之分层自动化实践之路 2018-05-30 摘自:阿里巴巴CI:CD之分层自动化实践之路 目录 1 自动化 1.1 为什么要做自动化? 1.2 自动化的烦恼 1.3 自动化的追 ...
- 使用Grafana 展示Docker容器的监控图表并设置邮件报警规则
一.Docker 容器监控报警方式 接着上篇文章的记录,看到grafana的版本已经更新到4.2了,并且在4.0以后的版本中,加入了Alert Notifications 功能,这样在对容器 监控完, ...
- 第5章Zabbix自动化监控
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; t ...
- 基于ASP.Net Core学习Docker技术第一步:在CentOS7安装Docker平台
Docker技术几年前就火了,伴随着今年来devops的流行,这项技术一直被技术社区追捧.提起Docker很容易被默认为是Linux平台下的技术,.NET的技术跟他似乎没有沾边,不过那是对非.NET ...
- inux监控平台搭建-监控项
linux监控平台搭建-监控项 本人运维某生态互联网监控平台服务.过程中遇见了很多问题.目前互联网有很多的开源监控工具:nagios.zabbix.falcon.cacti...各有优点.这里不讲解监 ...
随机推荐
- CentOS下 Uptime 命令
对于一些人来说系统运行了多久是无关紧要的,但是对于服务器管理员来说,这是相当重要的信息.服务器在运行重要应用的时候,必须尽量保证长时间的稳定运行,有时候甚至要求零宕机.那么我们怎么才能知道服务器运行了 ...
- 根据IP定位城市
根据IP定位城市:http://www.sucaihuo.com/js/35.html 示例:http://www.sucaihuo.com/jquery/0/35/demo/
- POJ 1837 Balance(01背包变形, 枚举DP)
Q: dp 数组应该怎么设置? A: dp[i][j] 表示前 i 件物品放入天平后形成平衡度为 j 的方案数 题意: 有一个天平, 天平的两侧可以挂上重物, 给定 C 个钩子和G个秤砣. 2 4 - ...
- WebService远程调用(代码调用)
在做多个系统集成的时候,由于各系统厂商采用不同的架构,在项目实施前期,各业务对业务理解不够深入,系统接口可能会有较多变化, 在此背景下,动态调用webserivce就变得灵活了,降低了系统集成的耦合度 ...
- jQuery 选择器实例
语法 描述 $(this) 当前 HTML 元素 $("p") 所有 <p> 元素 $("p.intro") 所有 class="intr ...
- Python Scrapy 自动爬虫注意细节(2)
一.自动爬虫的创建,需要指定模版 如: scrapy genspider -t crawl stockinfo quote.eastmoney.com crawl : 爬虫模版 stockinfo : ...
- .Net WebAPI文档自动化
1.在VS2015中右键选择工程: 2.点击NuGet程序包: 3.输入Swagger在线搜索: 4.安装:Swagger.Net.UI和Swashbuckle包: 5.打开SwaggerNet.cs ...
- C++11新特性之五——可变参数模板
有些时候,我们定义一个函数,可能这个函数需要支持可变长参数,也就是说调用者可以传入任意个数的参数.比如C函数printf(). 我们可以这么调用. printf(); 那么这个函数是怎么实现的呢?其实 ...
- Runtime 中的 _cmd、 IMP
IMP IMP-指向实际执行函数体的函数指针 #if !OBJC_OLD_DISPATCH_PROTOTYPES typedef void (*IMP)(void /* id, SEL, ... */ ...
- 【CSS系列】块级元素和行内元素
块级元素: 块级元素生成一个元素框,默认会填充其父元素的内容区,旁边不能有其他元素,换句话说,它在元素框之前和之后生成了“分隔符”. 列表项是块级额元素的一个特例,除了表现方式与其他块元素一致,列表项 ...