DevOps专题 | 大型企业级监控系统设计

avatar
@京东科技

Alt

10月30日,全球权威数据调研机构IDC正式发布《IDCMarketScape: 中国DevOps云市场2019,厂商评估》报告。京东云凭借丰富的场景和实践能力,以及高质量的服务交付和平台稳定性,取得优异出成绩,跻身“Major Players”(核心厂商)位置。 京东云DevOps能力起源于自身的业务实践,针对京东集团的复杂业务场景打造并经受住多次618、11.11电商大促的严峻考验,保证了高效高质的交付和对变化的灵活应对。能够支持复杂场景的自动化运维需求、实现工具链产品与平台化产品结合,帮助客户根据不同的需求灵活定制方案。

为了让大家更深入的理解devops,了解京东云devops具体的落地实践以及如何提升效率与保障稳定性,进一步结合自身业务设计实施devops。我们第一期将会重点为大家介绍DevOps中的监控部分,通过了解京东云自己的企业级监控是怎么来设计的,来更好地理解监控系统的样貌。

监控目标

监控是运维的生命线,其目标是快速的发现问题、定位、止损(see->know->act),缩短异常MTTR,为了达到这个目标,期望监控系统具备:

  • 丰富的数据采集能力,能对监控对象能进行深度观测。 灵活的数据加工能力,比如把相关的数据汇聚起来,得到我们需要关注的核心数据。
  • 异常检测能力,从最简单的阈值判断到各种异常检测算法,教会机器看懂是不是出现异常了。其本质上也是一种对数据的加工能力。
  • 收到异常之后,可以通过dashbord、趋势图进行问题定位,即数据的展示能力。
  • 如果做的更加深入,可以有根因推荐平台,把最近的变更、关联的告警做一些推荐,加速定位的过程。
  • 问题定位完成之后,期望把运维处理的经验沉淀下来,这样就形成了预案平台,便于更加快速的止损。
  • 当然,最重要的,一个好的监控系统需要具备高可靠性,本身监控系统就是为了发现异常,监控自身程序挂了,没有人知晓肯定是不行的,这就引申出来了,监控系统的监控怎么做的问题,可以当做一个发散的问题,大家考虑一下。

Alt

监控标准

介绍完监控目标和监控系统应该具备的功能点后,先不讨论监控系统如何实现,首先回答一个问题,如何确认监控加全了?有没有遗漏?

估计很多同学会遇到这样的问题,为此,京东云提出了一套监控标准,指导用户添加监控,确保监控“加全”,避免遗漏,详情如图所示。

Alt

监控标准分为四层,从下往上看:

  • 首先是基础监控,这一层主要解决机器、网络层面的问题,包括我们常见的cpu、内存,机器死机等问题
  • 然后是存活性监控,解决程序部署到机器上后,是否存活的问题,比如进程退出,端口发送一个ping过去,没有返回pang
  • 再上一层,则是性能监控,重点关注Google提出的四大黄金指标pv、平响,错误码和容量等,解决分布式程序的定界问题(比如通过访问MySQL的时间飙升知道是下游MySQL的问题)
  • 最上层是业务监控,模拟用户进行访问,解决服务在用户侧的表现是什么 有了标准,设计的监控系统按照标准来落地,可以给出一些数据化的运营指标,推动监控的完善。

典型监控系统设计

Alt

了解了监控目标和定义了监控标准,相当于对解决的问题域有了一些背景知识了,下面就大概介绍下典型的监控系统包含哪些功能模块,本文只是做一个大概的介绍,后续会对不同模块方向有一些专门的介绍。

上图还是分为四层,从下往上我们依次来介绍:

最底层叫数据抽象层,大家可能看到了比较熟悉的词语是CMDB,这一层把资源视角抽象为运维&运营视角,比如你搭建了一个卖书的网站,用了nginx、mysql等程序,在资源视角,这是一台台机器运行在互联的idc环境上,但可以抽象成这是一个卖书的产品,有mysql、nginx等应用,这样你的监控数据自然可以附加这种属性(标签),最终在后续数据处理的时候可以发挥作用

有了数据抽象层,统一了我们对监控实体的认知,基于这个抽象;上一层就是数据采集层,这里列举了众多采集方式,包括进程、日志、自定义、接口pull、产生数据主动push等,整个数据采集,就是一个标准化的过程,把观测对象的数据通过各种手段收集上来,转换为我们监控系统定义的数据格式。

数据采集后,就是加工的过程,我们再回忆一下,监控的目标是发现、定位、解决问题;那么必须对数据做加工,这就又可以分为以下处理流:

  • 左边这条进行了数据加工(聚合计算),比如把10台nginx的pv累加起来;而且可以按照各种维度(标签)累加,常见的需求包括监控项自身的标签(比如pv的状态码为5xx的聚合);也包括监控对象的标签(比如某个机房的pv累加起来),监控系统需要具备这种灵活的数据加工能力。
  • 中间的一路进行了数据存储,便于趋势图、dashbord能够查看到;有很多问题,还是需要靠人工经验去做判断。这里面会要求存储具备各种查询的能力,比如sum、max、min、avg、topN、分位值等。
  • 右边一路则是报警通路,进行异常检测,教会机器怎么看图,辨别出哪些指标有异常;一般是先做运算,比如发现某台机器的内存低于阈值了,然后会有一个模块去做收敛以及一些干预(比如屏蔽/升级等),最后确定要通知人员处理了,对接不同的告警方式(邮件、短信、微信)。
  • 当然还有一些离线挖掘,根因推荐,这些数据处理最终的目标还是能够让机器识别更多的异常、通过经验/算法,找到‘根因’

数据处理之后,最终是让人去使用的,最上层就是数据的展示层,要展示对用户有效的数据,用户通过数据能快速发现定位问题,并通过数据分析及时做出止损操作。也就是要让数据更好的服务用户。

综上,我们可以了解到,监控系统是以数据为中心,在数据之上扩展其处理能力的一个系统;后续我们会对各个方向再进行深入的介绍,欢迎和各位进行交流。

IDC中国企业软件市场高级分析师王楠认为:“京东云DevOps能力源于自身业务实践,是京东技术能力输出的重要组成部分,尽管推出相对较晚,但发展速度快、成熟度高,工具链和平台功能已基本涵盖DevOps的主要流程阶段。同时,京东云DevOps平台还与公有云平台深度集成,不仅极大提升了服务交付效率和稳定性,还能高效助力用户的自动研发和运维。”

点击【京东云】可了解更多京东云DevOps产品内容。

欢迎点击“京东云”了解更多精彩内容。

Alt

Alt