背景介绍与痛点分析
当分布式架构渐成主流可观测性Observability在行业内也越来越受到重视。可观测性是指系统可以由其外部输出来推断其内部状态系统的可观测性越强我们对系统的可控制性就越强。现如今如何提升整体系统的可观测性应用可观测工具达成业务保障可用性目标成为了每个SRE与业务开发都必须思考的课题。但是随着业务复杂度与”1-5-10(1分钟内发现问题5分钟内定位问题原因10分钟内恢复故障)可用性保障目标等的日益提升我们也发现了可观测体系在我们业务落地上的一些问题。观测视角的差异。可观测工具建设与落地方向大多处于运维视角而非业务视角。业务的差异。不同的业务、业务发展的不同阶段对于观测的建设重点差异很大。这些差异为平台侧提供观测工具与业务开发使用工具之间带来了不少痛点。游戏中心作为toC的分发类业务的一个典型项目可观测体系的建设过程可圈可点现总结其中一些经验希望对于其他业务项目有所帮助。二、可观测体系的数据基座对于可观测大家或多或少都听过可观测性的”三大支柱“指标、日志和链路2017 年Peter Bourgon 撰写的文章《Metrics, Tracing, and Logging》 系统地阐述了这三者的定义那么我们监控团队已经基本很完备的采集好了这些数据并且呈现了诸如日志中心应用监控调用链指标监控等工具是否就代表了能保证我们系统的可观测性答案当然是否定的有了西红柿、鸡蛋、盐并不能代表我们就已经能吃到西红柿炒鸡蛋了三大指标都有着自己的明显特征与使用场景独立的使用各种指标永远只适用于部分场景虽不能说完全无效但想系统化达成目标一定会比较吃力且无条理。面对较为简单的问题比如日志突然打印了空指针异常、数组越界的错误我们看下日志中心就很快能定位到具体代码行上进而分析上层参数的情况并去迅速排除故障。但是当问题复杂度略微提升比如我们依赖的服务耗时缓慢上升直至导致我们服务的可用性下降服务调用者缺陷导致对我们某个服务的调用流量异常上涨进而影响redis、mysql等基础组件最终导致同样依赖该组件的核心服务受损。出现这类问题时日志中心、应用指标超时链路都会有异常反应。除此以外绝大多数系统问题其实都是由于变更导致或触发的所以除了以上三个核心数据外还需要结合一些变更系统事件来做辅助根因定位。我们无法24小时时刻关注各项指标必须通过配置检测与告警来主动通知。日志、指标、链路、变更事件以及告警共同构成了我们可观测的数据基座。三、业务视角的可观测体系建设框架3.1 业务核心分治对于大多数系统来说我们建设可观测体系都是为了及时发现系统中出现的各类故障但是作为业务开发实践中我们会发现在这个标准下都是故障亦有差距。“游戏中心首页白屏”、“登录失败”、“下载失败” 这类问题出现即是致命伤等故障爆发后再发现是不可接受的。但是对于“游戏评论刷新延迟”“我的页成就刷新延迟”之类的故障在资源有限时可能慢一点处理也无妨。所以基于分治的思路首先要做的就是“明确业务核心边界”。如果拆解出的核心业务依然很复杂那么应当持续视角向内将业务拆解至最小的核心单元后再分部进行观测。3.2 指标体系的建立对于业务系统首要的观测指标当然是业务指标能够直接反应业务的健康度比如“游戏下载成功率”“游戏登录成功率”“游戏订单成功率”等。不过我们很多业务场景无法直接拟定业务指标经过实践一定程度上可以通过SLO指标进行替代。SLO指标是我们观测可用性的重要手段但不是越多越好SLO的意义在于通过告警帮助我们快速发现影响服务SLI的异常配置过多会带来告警过多的困扰。上文已经提及到核心业务的拆分对于微服务架构我们大部分服务是以接口调用的形式去对外提供的那么抽离出一组或多组的核心服务接口并对于这一批接口的SLI指标进行度量就可以制定自己系统的SLO目标。3.3 明确数据观测目的与意义通过建立指标体系我们就能够识别出系统中包含各式各样的指标数据通过对数据进行分类我们也能够进一步理解其对于系统的价值所在。分象限观测四、游戏中心可观测体系实践4.1 明确核心边界首先我们对游戏中心进行了核心业务的划分游戏中心首页、游戏下载、游戏预约对这三块业务进行最高优先级的保障。由于可观测体系的搭建必须依赖平台能力相关能力最终也必须沉淀回平台所以在边界划分上需要结合整体微服务架构设计公司的微服务拓扑视角上游节点调用重要调用方下游节点调用核心依赖方游戏中心服务架构视角客户端网络环境容器环境代码中间件、核心依赖组件运营后台4.2 指标体系建立1业务指标的观测对于游戏中心下载业务下载CPD指标是很核心的业务指标且直接与收入数据挂钩可以通过检测cpd接口的状态来反映业务情况。2SLO指标的观测对于首页上游客户端调用无法简单与日活、营收等数据相关联为了达成“1-5”的目标对于游戏中心的SLO指标的制定我们选取了核心接口的P95耗时与可用性指标并配置相关监控。首页接口的pageData/home p95范围大概在200-300ms根据akamai研究用户体验能明显感知到慢的程度大概是加载2秒以上附带算上网络传输与客户端渲染时间我们的服务目标定为P95800ms在可用性上全年项目SLA可用性级别为4个9在接口服务上也保持一致。4.3 多维度的观测