专栏名称: 狗厂
目录
相关文章推荐
51好读  ›  专栏  ›  狗厂

B 站监控体系——OpenTalk技术干货系列

狗厂  · 掘金  ·  · 2018-03-22 02:35

正文

一、监控系统分层

由于早期B站高速发展,巨石架构基于CMS系统搭建,导致代码紊乱。

从研发角度切入,来分析监控系统。

1. 业务层: 监控系统需要关注业务指标,如携程网的酒店下单量,大众点评、唯品会的商品购买指标、实时业务,B站的注册成功率等。

2. 应用层:

(1)端监控,如:河北地区APP无法打开,需要通过端采集数据上报,查找原因;

(2)链路层监控(APM监控),如:唯品会跟踪订单的完整交易流程,或是完整调用链路,查找异常;

(3)日志监控,通过回溯旧日志,浏览TLF等,发现异常。

3. 系统层: 关注网络、AOC、CDN的质量,关注中间件、数据库的问题等。

早期B站仅有Zabbix系统,监控思路是从下往上,效率低下。基于上述监控分层,对B站进行监控系统改进。

二、B站监控系统的演进

(一)B站监控系统改进步骤

1.编写ELK日志分析系统,让研发人员有日志可看,不用重复登录系统查看;

2.将巨石架构逐步转变为微服务化架构;架构转变之后,我们发现系统发生问题时,很难定位Root cause。

3.基于谷歌的Dapper编写监控系统,用于快速查找问题;

4.编写负责PC端、移动端链路上报的Misaka系统,监控运营商信息;

5.编写Traceon系统,关注业务指标和异常监控,将业务指标报表输出给内容、产品同事,把敏感的变更告知监控系统报警。同时将监控报警短信、邮件,发送给 运维、开发,甚至运营、客服和产品同事。

(二)如何通过监控入口,研发找到系统问题

B站的内部指标:在登录运维系统后,核心业务与非核心业务发现故障的时间分别为5分钟之内和20分钟之内。

监控入口类别:

1. 大盘

  • 变更:大部分故障是由于变更(发布、修改配置、版本更新)引起的,大盘是看到整个变更的试件,做出变更防御进行动作收集。
  • 当前报警:异常治疗
  • 失败率
  • 全链路

2. 前段:通过提供端,进行服务的服务质量监控;

3. 异常:对失败率、异常汇总统计入口;

4. 业务:投稿成功率等这类指标;

5. 链路:方便查询特定业务链路情况;

6. 系统: 核心网络、CDN、IDC等;

通过以上六个监控入口不同职责的人员,找准自己所属入口,进行监控,发现问题解决问题。

(三)将监控系统化整为零,分而治之

把监控系统全部打通到一个系统里是非常困难的,所以需要把监控系统化整为零。

那么如何串联如此多的监控系统?

借鉴谷歌的traceid,使用traceid把包括日志、链路、HDB接口,前端等在内的全业务系统串联起来,通过Skyeye发现问题,address定位问题。比如:某次B站首页发生故障,前端上报traceid到Misaka,Misaka标红后,研发人员发现故障原因在于ELK。

从研发的角度来说,当监控系统发现故障时,需要及时做出正确报警和报警规划。

1.正确报警:避免误报,做到好的收点。

2.报警规划:比如当核心机房出现问题时,大量接口全部报警,这会影响运维人员判断。需要通过智能报警,自动汇聚一个完整的ELK。

最后总结一下:做好一套监控体系,需要将它拆分成数个小系统,化整为零。通过traceid、address等关联起来,分而治之。

(四)Dapper系统

早期B站包含多种语言,机房分布在多个地方,系统非常复杂。

举个例子,用户浏览移动端首页,一次请求到达服务端,查看编辑推荐、运营推荐、大数据推荐以及分区推荐数据等,涉及多个服务,用户耗时过多,如果发生故障也难以发现原因,效率低下。

后来B站参考谷歌Dapper,发现完整请求是一个树型调用,会记录在系统中完成一次特定的请求后所有的工作信息。只需要在公共组件中植入代码就可以做到。

Dapper采样率为抽样采样。

多数系统是全量采量,但是谷歌内部更倾向抽样采量。B站Dapper也采用抽样采样,如果系统发生故障,一旦出现,之后必然会再次出现,抽样采样命中率很高。B站内部也采用多种采样方式(固定采样1/1024、可变采样、可控采样),这种做法,对于网络、存储的压力也较小。

举一个代码实例:HTP请求,发生拦截。服务器请求中加入这种注入后,可以非常方便的采集到埋点。







请到「今天看啥」查看全文