|
|
|
|
挪动端

微信海量数据监控的设计与理论

面临巨大的挪用量及庞大的挪用链路,单靠人力难以维护,只能依赖一个全方位监控、波动、疾速的运维监控零碎。

作者:陈晓鹏泉源:高效运维|2018-03-06 10:03

【新品产上线啦】51CTO播客,随时随地,碎片化学习

本文分享的是微信运维监控零碎的详细设计理论。在分享开端之前,我们先看如下图中微信背景零碎的近况。

面临巨大的挪用量及庞大的挪用链路,单靠人力难以维护,只能依赖一个全方位监控、波动、疾速的运维监控零碎。

我们的运维监控零碎次要有三个功用:

  • 毛病报警
  • 毛病剖析和定位
  • 主动化战略

明天我们的分享主题,次要有以下三局部:

  • 监控数据搜集轻量化
  • 微信数据监控的开展进程
  • 海量监控剖析下的数据存储设计思绪

监控数据搜集轻量化

先看一下罕见的数据搜集流程,普通从日记外面收罗,然后当地汇总打包,再发到全局效劳器外面汇总。

但是关于微信来说,200w/min 挪用量发生的是 2000亿/min 的监控数据上报,这个照旧比拟激进的估量数据。

晚期我们运用过自界说文本范例日记上报,但由于业务及背景效劳十分多,日记款式增长十分快,难以继续停止维护,并且不论是 CPU、网络、存储、统计都呈现十分大的压力,难以包管监控零碎自身的波动。

为了完成波动的分钟级、乃至秒级的数据监控,我们停止了一系列改革。

关于我们外部监控数据处置分为两个步调:

  • 数据分类
  • 定制处置战略

我们对数据停止分类,在我们外部来说有三种数据:

  • 及时毛病监控剖析。
  • 非及时数据统计,比方说业务报表等。
  • 单用户非常剖析,比方说用户一个报障过去还要独自对用户毛病停止剖析。

上面先复杂引见一下非及时数据统计及单用户非常剖析,再重点引见及时监控数据的处置。

非及时数据

关于非及时数据来说,我们有一个设置装备摆设办理页面。

用户在上报的时分会先请求 logid + 自界说数据字段,上报并非运用写日记文件的方法,而是接纳共享内存行列步队、批量打包发送的方法增加磁盘 IO、日记效劳器的挪用压力。统计运用散布式统计,现在曾经是惯例做法。

单用户非常剖析

关于单个用户非常剖析来说,我们存眷的是非常,以是上报途径跟方才非及时的途径比拟相近。

接纳牢固的款式: logid + 牢固数据字段(效劳器 IP+前往码等)。

数据上报量比方才的非及时日记还要大许多,以是我们是抽样上报的,除了把数据存入到 Tdw 散布式存储外面,还会把它转发到别的一个缓存外面停止一个盘问缓存。

及时监控数据

及时监控数据是重点分享的局部,这局部数据也是 2000亿/min 日记上报中的绝大少数。

为了完成分方位的监控,我们的及时监控数据也有许多品种型,其款式、泉源、统计方法都有差别。

为了完成疾速波动的数据监控,我们对数据停止了分类,然后针对性的对各种数据停止简化、一致数据款式,再对简化后的数据接纳最优的数据处置战略。

对我们数据来说,我们以为有上面几种:

  • 背景数据监控,用于微信背景效劳的监控数据。
  • 终端数据监控,除了背景,我们还需求存眷终规矩面详细的功能、非常监控及网络非常。
  • 对外监控效劳,我们如今有商户和小顺序等内部开辟者提供的效劳,我们及内部效劳开辟者都需求晓得这个效劳和我们微信之间有些怎样样的非常,以是我们还提供了对外的监控效劳。

背景数据监控

关于我们背景数据监控来说,我们以为按条理来说分红四类,每种有差别的款式和上报方法:

  • 硬件层面监控,比方效劳器负载、CPU、内存、IO、网络流量等。
  • 历程运转形态,比方说耗费的内存、CPU、IO 等。
  • 模块间挪用链,各个模块、呆板间的挪用信息,是毛病定位的要害数据之一。
  • 业务目标,业务总体层面上的数据监控。

差别范例的数据简化成如下款式,方便对数据停止处置。此中底下两层都用 IP+Key 的款式,厥后呈现了容器后,运用 ContainerID、IP、Key 的款式。

而模块挪用信息,又把模块的被调总体信息抽出来,跟业务目标共用 ID、Key 的数据款式。

我们重点说一下 IDKey 数据。这个 IDKey 数据是晚期的重点监控数据,但其上报量占了数据上报的 9 成以上,像方才所说,用文本型数据上报难以做到波动、疾速。

以是我们定制了一个十分简化、疾速的上报方法,间接在内存停止疾速汇总,详细上报方案可以看上面这个图。

每个呆板外面都请求了两块共享内存,有两块的缘由是方便停止周期性的数据搜集(6s 搜集一次),每块内存的款式是:uint32_t[MAX_ID][MAX_KEY]。

我们外部只容许有三种上报方法:

  • 累加
  • 设置新值
  • 设置最大值

这三种方法都是操纵一个 uint32_t,功能耗费十分小,并且另有一个最大的长处,便是及时在内存停止汇总,每次从内存提取的记载只要均匀 1000 条左右,大幅低落秒级统计的难度。

背景数据外面另有一个紧张数据是挪用干系数据,在毛病剖析定位中有十分大的作用。

详细款式如上,可以定位毛病点(呆板、历程、接口)及影响面。它的上报量是小于 IDKey 的第二大数据,每次背景挪用都发生一条数据,以是运用日记方法照旧很难处置。

我们在效劳外部用了别的一种跟 IDKey 靠近的共享内存统计方法,比方说一个效劳有 N 个 Worker,每个 Worker 会分派两块小共享内存停止上报,再由搜集线程对数据打包后对外发送。

这个上报是框架层停止的上报,效劳开辟者不需求手工添加上报代码(微信 99% 都是运用外部开辟的效劳框架)。

终端数据监控

背景数据我们引见完了,再说一下终端监控数据。这个我们存眷的是手机真个微信 APP 一些详细的功能、非常,挪用微信背景的耗时、非常,另有网络非常方面的题目。

手机终端发生的日记数据十分宏大,假如全量上报则对终端、背景都有不小的压力,以是我们并没有全量上报。

我们对差别数据、终端版本有差别的采样设置装备摆设,背景会活期对终端下发采样战略。

终端对数据采样上报时也不会及时发送,而是用暂时存储记载上去,隔一段工夫再打包发送,力图对终真个影响最小化。

对外监控效劳

上面复杂引见一下我们最新的对外监控效劳,这个方案参考了一些云监控的方案,用户可以自行设置装备摆设维度信息和设置装备摆设监控规矩。

如今在我们的商户办理界面另有小顺序开辟者东西的页面曾经开辟了这个功用,但如今自界说上报还没有开放,只提供了背景收罗的一些牢固数据项。

微信数据监控的开展进程

下面引见了数据的上报方法,接上去引见一下我们怎样对数据停止监控。

非常检测

关于普通非常检测来说,能够都市用到三个方法:

  • 阈值,乃至在早上和早晨都是有很大差别的,这个阈值自身没法去分别的,以是这个关于我们来说只实用于大批的场景。

  • 同比,存在的题目是我们的数据都不是每天统一工夫的数据是一样的,周一到周六会存在比拟大的差别,只能低落敏感度才干包管精确性。

  • 环比,我们的数据中,相邻的数据也并非颠簸变革,数目级比拟小时尤其分明,异样只要低落敏感度才干包管精确性。

以是这三种罕见的数据处置办法都不是很实用我们的场景,在过来我们对算法停止了改良。

我们运用的第一个改良算法是均方差,便是拿过来一个月每天统一工夫的数据盘算均匀值与均方差,用多天数据顺应数据的颤动状况。

这个算法实用范畴比拟广,但是关于动摇比拟大的曲线,敏感度会比拟低,容易漏报。

我们改良的第二个算法是多项式拟合预测,实用于颠簸的曲线,就有点像改良的环比。

但假如呈现非常时数据是颠簸增长或增加,没有呈现渐变,这时也会判别为正常,呈现漏报。

以是以上两种算法固然比曩昔的算法有了不少改良,但异样存在一些缺陷。现在我们有在实验其他算法,或多种算法联合一同运用。

监控设置装备摆设

除了算法自身,我们在监控项设置装备摆设也存在题目的,由于我们的效劳十分多。

以是能够超越了 30 万的监控项要人手设置装备摆设,每次设置装备摆设察看曲线选择差别算法,差别的敏感度,并且过一段工夫之后数据发作变革,需求重新调解。以是这种操纵不行继续。

现在我们在实验对监控项停止主动设置装备摆设,比方运用汗青数据,汗青非常样本,抽取特性,停止数据分类,再主动套用最优的监控参数。

这个我们正在实验获得了一些效果,但还不是很美满,还在改良中。

海量监控剖析下的数据存储设计思绪

下面分享了数据怎样停止收罗、监控,最初再引见一下数据是怎样存储的。

关于我们来说数据存储异样紧张,像方才提到每分钟监控要拿一个月数据出来。

另有比方我们的毛病剖析,一个模块有非常需求读取一切呆板挪用信息、CPU、内存、网络、种种历程信息等,假如呆板数特殊多,一次读取的数据量会超越 50w*2 天。

以是我们对监控数据存储的读写功能要求十分高。起首写入功能根本要求是总入库量能够一分钟有 2 亿条以上,单机至多要求 500w/min 能入到这个数据量。数据读取功能需求能支持每分钟读取 50w×22 天的监控读取。

数据构造上,我们种种数据是多个维度的,比方挪用干系的维度十分多,还要支持按 client 端、svr 端、模块级、主机级等差别维度的局部婚配的盘问,不克不及只支持复杂的 key —— value 盘问。

留意我们的多维度 key 分红了 main key 和 sub key 两局部,前面会有引见为什么如许做。

曩昔我们监控数据存储改革时参考了其他一些开源方案,但在事先没有找到完全契合功能、数据构造要求的现成方案,以是我们自行研发了本人的工夫序列效劳器。

起首对数据写入来说,假如一分钟一条记载,则数据量过大,以是我们会先缓存肯定工夫的数据,隔一段工夫批量兼并成一天一条记载。

这也是现在比拟常用的提拔写入功能的做法。我们数据缓存的工夫是一个小时。

而我们自行开辟的 key-value 存储,要害点是 key 的完成。起首 key 会常驻内存。

别的由于数据量很大,一台机不行能撑得住,以是我们用的是多机集群,运用 hash(main_key)对数据停止写入和盘问。

而局部婚配盘问是运用改革的二分查找法完成前置婚配盘问。 如许完成的盘问功能十分高,可以超越 100w/s,并且加个盘问后果缓存功能更高。

不外它也存在一些题目,比方 hash(main_key) 数据不平衡,并且 1 天一条记载,key 占内存太多。

由于下面的题目,我们做了第二个改良。

第二个改良的办法是把 Key-Value 拆分红 key-id-value ,经过 id 分派效劳控制 value 数据平衡,key-id 7 天重新分派一次,增加内存占用。

关于存储来说另有一个最大的题目便是容灾,既然是对效劳器停止监控,本身的容灾才能要求也十分高。

普通来说做到高容灾、数据强分歧性比拟难,但微信背景曾经开源了自行研发的 phxpaxos 协议框架,运用这个框架可以很容易完成数据容灾。

别的 phxpaxos 框架的多 master 特性可以提拔并发读取功能。

陈晓鹏,2008 年进入腾讯,2012 年调入微信运维开辟组担任运维监控零碎的改革,是微信以后运维监控零碎的次要设计开辟职员。

【编辑引荐】

  1. 12月份新增开源项目:手机都可以变团体监控零碎了?
  2. 通博888810都冷静搜集了哪些数据?微软:通知你便是了
  3. 每个零碎办理员都要晓得的30个通博8888官网零碎监控东西
  4. 运用iftop下令监控网络带宽
  5. 怎样在Debian 9上装置和运用Netdata功能监控东西?
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
各人都在看
猜你喜好

读 书 +更多

盘算机病毒剖析与防治简明教程

本书片面翔实地引见了种种病毒的原理,以操纵零碎的开展为主线,联合病毒的开展进程来综合剖析病毒。在剖析东西上,较多天时用了剧本言语、...

订阅51CTO邮刊

点击这里检查样刊

订阅51CTO邮刊