让子弹飞
120.34M · 2026-03-13
1分钟看图掌握核心观点
图 1 VS 图 2,您更倾向于哪张图来辅助理解全文呢?欢迎在评论区留言
当分布式架构渐成主流,可观测性(Observability)在行业内也越来越受到重视。可观测性是指系统可以由其外部输出,来推断其内部状态,系统的可观测性越强,我们对系统的可控制性就越强。现如今如何提升整体系统的可观测性,应用可观测工具达成业务保障可用性目标,成为了每个SRE与业务开发都必须思考的课题。但是随着业务复杂度与”1-5-10"(1分钟内发现问题,5分钟内定位问题原因,10分钟内恢复故障)可用性保障目标等的日益提升,我们也发现了可观测体系在我们业务落地上的一些问题。
这些差异,为平台侧提供观测工具与业务开发使用工具之间带来了不少痛点。游戏中心作为toC的分发类业务的一个典型项目,可观测体系的建设过程可圈可点,现总结其中一些经验,希望对于其他业务项目有所帮助。
对于可观测,大家或多或少都听过可观测性的”三大支柱“:指标、日志和链路,2017 年Peter Bourgon 撰写的文章《Metrics, Tracing, and Logging》 系统地阐述了这三者的定义:
那么我们监控团队已经基本很完备的采集好了这些数据,并且呈现了诸如日志中心,应用监控,调用链指标监控等工具,是否就代表了能保证我们系统的可观测性?答案当然是否定的,有了西红柿、鸡蛋、盐,并不能代表我们就已经能吃到西红柿炒鸡蛋了,三大指标都有着自己的明显特征与使用场景:
独立的使用各种指标,永远只适用于部分场景,虽不能说完全无效,但想系统化达成目标一定会比较吃力,且无条理。面对较为简单的问题,比如日志突然打印了空指针异常、数组越界的错误,我们看下日志中心就很快能定位到具体代码行上,进而分析上层参数的情况,并去迅速排除故障。但是当问题复杂度略微提升,比如:
出现这类问题时,日志中心、应用指标,超时链路都会有异常反应。除此以外,绝大多数系统问题其实都是由于变更导致或触发的,所以除了以上三个核心数据外,还需要结合一些变更系统事件来做辅助根因定位。我们无法24小时时刻关注各项指标,必须通过配置检测与告警来主动通知。
日志、指标、链路、变更事件以及告警,共同构成了我们可观测的数据基座。
对于大多数系统来说,我们建设可观测体系都是为了及时发现系统中出现的各类故障,但是作为业务开发,实践中我们会发现在这个标准下:都是故障,亦有差距。“游戏中心首页白屏”、“登录失败”、“下载失败” 这类问题出现即是致命伤,等故障爆发后再发现是不可接受的。但是对于“游戏评论刷新延迟”,“我的页成就刷新延迟”之类的故障,在资源有限时,可能慢一点处理也无妨。
所以基于分治的思路,首先要做的就是“明确业务核心边界”。如果拆解出的核心业务依然很复杂,那么应当持续视角向内,将业务拆解至最小的核心单元后,再分部进行观测。
对于业务系统,首要的观测指标当然是业务指标,能够直接反应业务的健康度,比如:“游戏下载成功率”,“游戏登录成功率”,“游戏订单成功率”等。不过我们很多业务场景无法直接拟定业务指标,经过实践,一定程度上可以通过SLO指标进行替代。
SLO指标是我们观测可用性的重要手段,但不是越多越好,SLO的意义在于通过告警帮助我们快速发现影响服务SLI的异常,配置过多会带来告警过多的困扰。上文已经提及到核心业务的拆分,对于微服务架构我们大部分服务是以接口调用的形式去对外提供的,那么抽离出一组或多组的核心服务接口,并对于这一批接口的SLI指标进行度量,就可以制定自己系统的SLO目标。
通过建立指标体系,我们就能够识别出系统中包含各式各样的指标数据,通过对数据进行分类,我们也能够进一步理解其对于系统的价值所在。
分象限观测
首先我们对游戏中心进行了核心业务的划分:游戏中心首页、游戏下载、游戏预约,对这三块业务进行最高优先级的保障。由于可观测体系的搭建必须依赖平台能力,相关能力最终也必须沉淀回平台,所以在边界划分上需要结合整体微服务架构设计:
公司的微服务拓扑视角
游戏中心服务架构视角
(1)业务指标的观测
对于游戏中心下载业务,下载CPD指标是很核心的业务指标,且直接与收入数据挂钩,可以通过检测cpd接口的状态来反映业务情况。
(2)SLO指标的观测
对于首页上游客户端调用,无法简单与日活、营收等数据相关联,为了达成“1-5”的目标,对于游戏中心的SLO指标的制定我们选取了核心接口的P95耗时与可用性指标,并配置相关监控。首页接口的pageData/home p95范围大概在200-300ms,根据akamai研究用户体验能明显感知到慢的程度大概是加载2秒以上,附带算上网络传输与客户端渲染时间,我们的服务目标定为P95<800ms,在可用性上全年项目SLA可用性级别为4个9,在接口服务上也保持一致。
(1)整体健康度的定时观测与发版后观测
抽离核心观测数据来快速实现整体核心SLI指标的观测,是发现一些全局影响故障最直接的手段。如果一段时间所有接口的rt都缓慢上涨,那么一定代表着系统出现了影响面最大的故障。通过定时报告的配置,既防范了个人的观测习惯风险,也提升了移动端的观测能力。版本发布后的定期报告观测,也是我们当前观测版本变更后可用性的主要手段。
(2)服务的核心依赖观测
在游戏中心业务中,需要从推荐、dmp标签、游戏资讯、大数据四个业务方获取核心数据,那么这四个服务相关接口的SLO就需要作为核心依赖观测项。
(3)服务的日志观测
(4)中间件的观测
对于游戏中心业务,redis是最为核心的中间件,redis的稳定直接影响首页各个业务的健康度。对于redis的ops、实例cpu都进行检测,结合热key、大key分析,能够有效识别问题和风险。
通过告警入口的下钻串联,搭建了 “告警通知→问题详情→业务看板→关联拓扑” 的通用问题排障路径。
在专家经验的沉淀上,对于业务、SLO等相关告警,通过处理流程建议文档、文档知识库、日志知识库,构建agent值班助手来共享团队知识。
可观测体系建设并非一劳永逸的事情,随着业务变化而变化,也随着团队组织架构变化而变化。对于监控平台,构建统一可观测体系的难点,一方面在于技术本身的制约,如何应对大规模数据的存储、性能挑战;另一方面则在于如何与千差万别的业务进行沟通、合作,融合业务专家经验,抽象出共性的问题。那么作为业务开发,持续提升可观测理解水平,深入挖掘沉淀业务专家经验,才能协同好平台一起做好这件事。现如今,行业AIOPS的发展日新月异,我们系统化的构建可观测体系也是融入该浪潮中,在实现的工具自动化的目标之后,我们也希望朝着智能化的建设迈出一步。