《【蔡建宇】字节跳动 Model-Driven 思路在可观测性系统中的设计和实践.pdf》由会员分享,可在线阅读,更多相关《【蔡建宇】字节跳动 Model-Driven 思路在可观测性系统中的设计和实践.pdf(47页珍藏版)》请在三个皮匠报告上搜索。
1、字字节节跳跳动动MMo od de el l-D Dr ri iv ve en n思思路路在在可可观观测测系系统统中中的的设设计计和和实实践践蔡蔡建建宇宇字节跳动基础架构研发工程师字节跳动基础架构研发工程师蔡蔡建建宇宇contents字字节节内内的的服服务务端端可可观观测测系系统统存存在在的的问问题题和和挑挑战战01总总结结和和展展望望04MMo od de el l-D Dr ri iv ve en n思思路路在在可可观观测测系系统统的的实实践践过过程程(观观测测对对象象,指指标标建建模模,S SL LI I,排排障障归归因因)03MMo od de el l-D Dr ri iv ve e
2、n n思思路路介介绍绍字字节节内内的的服服务务端端可可观观测测系系统统存存在在的的问问题题和和挑挑战战微微服服务务部部署署、拓拓扑扑复复杂杂导导致致排排障障困困难难某个入口服务发现异常,可能是下游七八跳的底层服务导致容器,物理机,网络,中间件,存储组件等等同样容易引发应用的问题,不确定会影响哪些业务大服务可用性,延时(P99)异常时,难定位到具体某个请求字字节节内内的的服服务务端端可可观观测测系系统统存存在在的的问问题题和和挑挑战战缺缺乏乏标标准准和和最最佳佳实实践践引引导导用户最关心的SLI告警/大盘,常常是自建的自定义告警/自定义Grafana大盘,缺乏标准化和关联缺乏至上而下的各个业务方
3、的统一的业务监控,和异常发现-根因定位-事故处理-问题归档的最佳实践引导业务关键指标GrafanaArgos自定义告警自建监控看板缺缺少少关关联联缺缺少少业业务务S SL LI I微服务指标Argos 微服务告警各组件指标Argos 监控大盘字字节节内内的的服服务务端端可可观观测测系系统统存存在在的的问问题题和和挑挑战战可可观观测测平平台台内内部部相相对对复复杂杂对元数据严重依赖,但元数据分散在各个平台中,一个新机房部署,往往要关注下游几十个依赖监控数据是各个组件方生产的,标准存在不统一的现象开放能力,可扩展性相对弱服务端可观测平台(Argos)trace动态元信息消息队列元信息cache元信
4、息DB元信息LB元信息物理机/容器元信息部署平台信息微服务元信息mqredis、mysql.LB、agw、mesh微服务框架部署平台tracelogmetrics事件元数据消费监控数据生产监控数据平平台台依依赖赖解解决决问问题题的的思思路路-抽抽象象模模型型trace动态元信息消息队列元信息cache元信息DB元信息LB元信息物理机/容器元信息部署平台信息微服务元信息redis、mysql.LB、agw、mesh微服务框架部署平台metricslogtrace事件可观测对象标准化观测数据SLI/业务监控metricslogtrace事件业务服务MMo od de el ls 解解决决问问题题的
5、的思思路路-用用户户故故事事识别观测对象Argos标准指标合集内置SLISLO报警内置根因分析自定义SLISLO报警内置根因分析+业务补充分析APM dashboard用户SLI 如如何何实实施施MMo od de el l-D Dr ri iv ve en n设设计计要要点点可观测对象列列举举模模型型观测指标模模型型也也可可表表示示系系统统的的配配置置和和管管理理过过程程监控大盘配置为某个服务树节点注入某个类型的告警描描述述 想想要要的的规规格格(s sp pe ec c)而而不不是是 怎怎么么实实现现metadata:name:服务成功QPSspec:when:protocol:http
6、metrics:bytedtrace.sdk.span.server.rate MMo od de el l-D Dr ri iv ve en n思思路路的的实实践践过过程程作为一个可观测系统,应该先确定要观测的对象是什么实实践践过过程程-可可观观测测对对象象业业务务容容器器和和平平台台基基础础设设施施服服务务物理服务器虚拟机存储设备网络设备容器实例容器镜像服务发现负载均衡业务场景/用户关键旅程业务线APP数据库消息队列API网关微服务缓存监控和报警服务实实践践过过程程-可可观观测测对对象象apiVersion:v1kind:ObservableObjectmetadata:name:serv
7、ice_A namespace:defaultspec:type:service attributes:protocol:http framework:hertz dimensions:cluster:values:-default -open_api dc:values:-lf -hldbhostLBmicroservicemqcontainerO OB BS SE ER RV VA AB BL LE E O OB BJ JE EC CT TS S实实践践过过程程-可可观观测测对对象象-观观测测维维度度其其他他领领域域的的观观测测维维度度可可观观测测领领域域的的观观测测维维度度科室学期学习成
8、绩学科项目级别年龄组医生职称服务类型体育比赛医疗服务所属服务镜像部署环境容器部署集群部署机房请求域名/uri服务物理服务器数据中心机房服务器类型操作系统实实践践过过程程-可可观观测测对对象象-服服务务“服服务务”观观测测对对象象接收用用户户请请求求,处处理理并并返返回回用用户户请请求求的一种观测对象对服务层的各种观测对象的一种抽象“服服务务”观观测测对对象象的的维维度度服务收到的请求请求流量的切分,如 method,cluster,dc Service AService B前端客户端to_dc=dc1dc:dc1method=m1method=m1client sideserver sidek
9、8s layerto_cluster=可可观观测测对对象象和和观观测测维维度度有有什什么么作作用用排排障障定定位位的的过过程程,其其实实是是在在准准确确的的观观测测维维度度上上关关联联游游走走的的过过程程为什么需要可观测对象实实践践过过程程-可可观观测测对对象象关关联联游游走走业务层发现问题后,需要能至上而下层层下推来定位根因精精准准维维度度上下游关联:A方法出问题,不会是B方法的下游引起的服务-容器层关联:A集群过载,不会导致B集群可用性下降实实践践过过程程-观观测测数数据据服服务务流量错误延时饱和度业业务务列表拉空率投稿延时视频播放卡顿率CPUMEMNetworkDisk物物理理机机/容容
10、器器有了观测对象后,需要梳理观测对象有哪些观测数据实实践践过过程程-字字节节内内场场观观测测数数据据存存在在的的问问题题同同含含义义打打点点同同时时且且可可能能长长期期存存在在多多个个版版本本.RPC指标存在2个版本HTTP/thrift/consumer等等类型的服务在打点可能不同go runtime指标存在3个版本容器、LB相关指标正在推进新版本实实践践过过程程-字字节节内内场场观观测测数数据据存存在在的的问问题题打打点点t ta ag g命命名名混混乱乱metrics的生产方和消费方可能不同,导致站在监控对象的视角上看各项指标时,虽然表示同一个意思,但tag key往往不相同servic
11、ecluster=default可观测对象维度lb v1:cluster_nameruntime:_clusterrpc v2:_ from_cluster _cluster _ to_clusterrpc v1:from_cluster cluster to_cluster容器打点:pass_实实践践过过程程-观观测测数数据据标标准准化化我我们们引引入入了了两两个个mmo od de el l来来解解决决以以上上的的问问题题MMe ea as su ur re emme en nt t可观测对象的某个指标,如 服务A的上游调用延时,物理机1的cpu使用率S St ta an nd da ar
12、 rd dMMe et tr ri ic cs s对底层数据源的封装,屏蔽多种类型/版本的query语法,屏蔽数据源的底层实现,统一tag命名术语实实践践过过程程-MMe ea as su ur re emme en nt t MMo od de el lapi_version:v1kind:Measurementmetadata:namespace:default key:service.request.server.throughput.success name:service.request.server.throughput.success description:chinese:服务
13、接口调用成功qps english:success throughput of service requestsspec:parent_node:service.request.server.throughput obserable_object_type:service aggregators:integrations:-standard_metrics:frame.thrift.request.server.throughput.success conditions:-key:request_source values:-frame -key:protocol values:-thrift
14、rpc_metrics_v1cluster=default,service=service1service_Acluster=defaultservice.A服务成功QPSservice.cluster=defaultrpc_metrics_v2_cluster=default,service=service1可可观观测测对对象象MMe ea as su ur re emme en nt tS St ta an nd da ar rd dMMe et tr ri ic cs s内内部部概概念念外外部部使使用用实实践践过过程程-MMe ea as su ur re emme en nt t的的运
15、运用用在确定观测对象后,指标探索中能列出相关的观测指标,用户选择指标来观测,不需要再记各个版本的打点实实践践过过程程-MMe ea as su ur re emme en nt t的的运运用用APM中每个图对应一至两个measurement,通过配置化实现监控页面实实践践过过程程-MMe ea as su ur re emme en nt t的的运运用用由于measurement是语义化的,我们能比较轻松的构建metrics、log、trace、告警各个模块间的跳转联动功能,并且在监控页,指标探索,用户大盘,业务大盘内无缝衔接,不需额外配置实实践践过过程程-对对观观测测数数据据的的进进一一步步
16、探探索索-S SL LI Imeasurement回答了一个观测对象有哪些观测数据,但没有回答最重要的观测数据是什么measurement是标准指标合集,但无法承载业务属性的观测指标WWh hy y S SL LI I实实践践过过程程-WWh hy y S SL LI I服服务务正正常常不不代代表表业业务务正正常常网络问题客户端问题拉空、卡顿等业务问题SLI可以弥补业务监控的空缺serverclient版本/实验bug拉空,卡顿网络问题终端用户体验服务端监控实实践践过过程程-WWh hy y S SL LI I业业务务问问题题要要转转化化到到服服务务问问题题上上排排障障业务问题和服务问题存在g
17、apSLI是媒介业务问题服务问题可用性延时流量搜索页打不开了发起交易失败了售后申请页不可用作品列表拉空投稿延时增大SLI实实践践过过程程-WWh hy y S SL LI I业业务务监监控控告告警警要要抓抓重重点点从入口服务出发,发散出的底层服务会非常多每个服务都会有很多类型的告警核心业务功能-SLI 服务结果性指标-SLI业务功能入口服务底层服务可用性延时接口下游CPU/MEM实实践践过过程程-S SL LI I是是什什么么用用户户关关键键旅旅程程用户关键旅程是指用户在使用产品或服务过程中的一系列关键步骤,这些步骤对于用户体验和满意度至关重要。S SL LI ISLI 用于量化用户关键旅程的
18、性能、可用性、可靠性等方面的表现,从而确保服务提供商能够持续改进服务质量,为用户提供良好的体验。实实践践过过程程-S SL LI I设设计计思思考考S SL LI I是是一一种种计计算算模模型型配置good/bad/total filter,计算 success_rate=good/totalS SL LI I和和指指标标的的关关系系把SLI理解成一个业务关键点一份SLI配置,生成 多个指标S SL LI I 可可用用来来承承载载自自定定义义指指标标的的需需求求用户需要沉淀下来的指标往往比较重要需要在业务大盘,告警等复用需要计算实实践践过过程程-S SL LI I MMo od de el l
19、apiVersion:v1kind:SLImetadata:name:Availability namespace:defaultspec:target:type:service type:requestBased good:measurement:service.request.server.throughput.total filters:-key:status value:literal_or(2*|3*)bad:measurement:service.request.server.throughput.total filters:-key:status value:literal_or
20、(4*|5*)S SL LI I配配置置、S SL LI I生生成成的的指指标标、S SL LO OSLIwindowsbasedrequestbaseddefine whatsgood or badmeasurementsuccess rateerror QPStotal QPSsuccess QPSSLOrolling 实实践践过过程程-S SL LI I的的运运用用构构造造黄黄金金指指标标(可可用用性性、流流量量、延延迟迟)根根据据S SL LI I来来生生成成业业务务大大盘盘实实践践过过程程-S SL LI I的的运运用用实实践践过过程程-A Ar rg go os s a as s
21、a a S Se er rv vi ic ce e排排障障定定位位实实践践过过程程-排排障障定定位位可可观观测测系系统统应应该该要要面面向向排排障障只关注三支柱(metrics/trace/log)是不够的,可观测性最终要对结果负责,要更快发现问题和止损排排障障自自动动化化排障经验是可沉淀的,最终会有自动化的需求内置自动化无法满足业务长尾需求,需要业务参与metricslogtrace发现问题识别影响定位止损报警自动化排障自动化自动化实实践践过过程程-A Ar rg go os s a as s a a S Se er rv vi ic ce e业业务务配配置置一一个个S SL LI I,可可
22、同同时时观观察察多多个个生生成成的的指指标标,如如果果发发现现成成功功率率下下降降,可可以以对对错错误误指指标标做做根根因因定定位位实实践践过过程程-A Ar rg go os s a as s a a S Se er rv vi ic ce e语语义义化化带带来来一一个个很很大大的的好好处处是是减减少少编编程程成成本本。metrics:=bytedtrace.span.xxxxtags:=“_method=methodB”if 服务未升级了bytedtrace if service.protocol=http metrics=fmt.Sprintf(toutiao.service.http.
23、%s.xxxx,serviceA)tags=“method=methodB”if service.protocol=thrift metrics=fmt.Sprintf(toutiao.service.thrift.%s.%s.xxx,serviceA,methodB)tags=“”data:=queryMetrics(metrics,tags)measurement:=service.request.server.throughput.totaldata:=queryMeasurement(measurement,service:+psm,service.method=+method)使用m
24、easurement后,只需要这么写如果某个SRE想要编写某段代码查询A服务的B方法的流量来做分析,使用metrics的情况,他需要这么写实实践践过过程程-A Ar rg go os s a as s a a S Se er rv vi ic ce eA Ar rg go os sArgos平台是字节内的服务端可观测平台,集成了监控报警、链路、日志、事件等功能A Aa aa aS S (A Ar rg go os s a as s a a S Se er rv vi ic ce e)AaaS 是一个将 Argos/APM 观测诊断能力自动化、服务化、开放化的产品变更拦截引流验证故障注入验证可用
25、性下降分析panic/进程退出分析业务报警排查SOP预案FAQ沉沉淀淀排排障障经经验验自自动动化化风风险险拦拦截截A Ar rg go os s a as s a a S Se er rv vi ic ce e监控日志报警trace事件A Ar rg go os s 平平台台平平台台联联动动tracelogmetricsSLI图表组件measurement复复用用底底层层能能力力实实践践过过程程-A Ar rg go os s a as s a a S Se er rv vi ic ce eA Aa aa aS S架架构构IDL自动代码生成丰富的SDKArgos生态Case记录、打标、回放业务
26、逻辑A Aa aa aS S A Ap pp pcase记录,打标,回放监控数据基础算法分析套件IDL监控警告触发源自动生成框架代码,f1ow编排维度下钻、关联分析、变点检测、离群分析metrics/trace/log/events.事件关联,单实例分析,过载分析大盘展示结果实实践践过过程程-A Ar rg go os s a as s a a S Se er rv vi ic ce efunc AnalyzerServiceCPUOverload()/打开了服务监控页obj:=aaas.NewObservableObject(“serviceA”)availability10m:=obj.M
27、easurement().ServiceAvailability(“now-10m”,“now”)/看到服务可用性低于SLO if availability10m 80%/对比cpu和可用性曲线,发现具有相关性 if cpuUsage.CorrelationTo(availability10m)0.8 /通知owner处理问题 lark.to(obj.meta().owner(),“serviceA 服务cpu负载过高引起了可用性下降,建议去xxx扩容”)像像使使用用A AP PMM平平台台一一样样来来写写排排障障代代码码基基于于A Aa aa aS S构构建建的的根根因因分分析析能能力力原原
28、子子分分析析器器错误码分析维维度度下下钻钻单机房分析单上游分析集群/方法分析关关联联分分析析下游关联分析流量异常分析事件关联分析网络分析单实例诊断过载panic/进程退出基基于于A Aa aa aS S构构建建的的根根因因分分析析能能力力递归分析单上游分析错误类型维度下钻关联分析获取因果关系静态表分析动态因果关系根据因果关系筛选出最终根因递归分析单下游是是否否单单上上游游问问题题根根据据局局部部性性问问题题做做减减枝枝是是否否单单下下游游问问题题根根因因选选择择基基于于A Aa aa aS S构构建建的的根根因因分分析析能能力力单单上上游游A AC CL L鉴鉴权权问问题题基基于于A Aa a
29、a aS S构构建建的的根根因因分分析析能能力力多多跳跳下下游游导导致致了了服服务务可可用用性性下下降降实实践践过过程程-MMo od de el l-D Dr ri iv ve en n实实践践过过程程中中的的优优点点总总结结可观测对象、Measurement、SLI是Model-Driven思路实践的一些举例,在实践过程中,我们感受到了Model-driven思路有这些优点MMo od de el l 驱驱动动了了产产品品迭迭代代产品/QA/前后端研发 各类角色对系统了解可能偏差很大对齐语言,减少沟通成本前前后后前前系系统统更更易易于于理理解解了了需要看复杂的代码和文档才能理解系统设计看模
30、型设计就能对系统有所了解后后系系统统更更好好维维护护了了许多功能需要改代码实现系统配置能力大大增强,如指标、大盘、监控能力都通过配置实现前前后后总总结结与与展展望望标标准准化化业务属性越强,标准化程度往往越低,系 统 越 难 理 解。例 如:measurement SLI bosun报警/自定义指标越往外层的监控,越容易发现问题,但往往越难标准化。例如:物理/容器监控 服务监控 业务监控MMo od de e-D Dr ri iv ve en n能能更更好好的的迎迎接接A AI IO Op ps sLLM AaaS 可以有很多交互可以探索标标准准化化 自动化 智能化T TH HA AN NK KS S