初学者指南:可观测性是什么?
什么是可观测性?
可观测性,顾名思义,指的是系统状态能够被观察与度量的特性。在信息技术领域,可观测性被精确定义为根据系统生成的输出数据(涵盖日志、指标及跟踪信息)来测量和理解系统当前状态的能力。
Opentelemetry 网站对可观测性给出了深刻的阐述:可观测性赋予我们从外部视角洞察系统的能力,使我们能够在不了解系统内部工作机制的前提下,对系统提出疑问并寻求答案。它进一步使我们能够轻松应对新出现的问题(即“未知的未知”),并帮助我们深入探究“为何会发生这种情况”。向系统提出问题,本质上意味着我们具备收集系统执行与行为信息,并从中获取洞见的能力。
实例解析
想象您负责管理一个包含多个微服务(如前端、产品、购物车、订单、支付等)的电子商务网站。突然,网站加载速度变慢。若无可观测性支持,您可能需要深入代码、数据库响应时间、API及第三方服务延迟等多个方面,手动排查各组件以定位问题。然而,借助可观测性工具,您可以直接“提出问题”,例如:
- 近一小时内,网站的平均响应时间是多少?
- 错误率是否出现波动?
- 哪个服务或组件的响应时间最长?
- 数据库查询的响应时间如何?
- 是否有特定请求或事务出现延迟?
- 速度变慢是全局现象还是特定区域的问题?
这些问题均可通过应用程序日志、指标及跟踪数据得到解答。
日志库负责记录应用程序中的事件,指标提供系统运行的数字数据(如响应时间、请求数等),而跟踪则通过 OpenTelemetry 或 APM 代理等库,追踪请求在分布式系统中的流动路径。 通过分析这些数据,您可以迅速确定,例如,速度变慢可能是由于某个特定服务响应时间过长,这可能是由于最近的代码变更或负载增加所致。这样,问题的解决变得更为迅速且高效。
可观测性与监控的区别
对于DevOps工程师或初入SRE领域的人员而言,明确可观测性与监控之间的区别至关重要。
根据DORA的研究,监控与可观测性存在显著差异:
监控是一种工具或技术解决方案,旨在通过收集预定义的指标或日志集,使团队能够监视并了解系统状态。可观测性则是一种更为高级的工具或技术解决方案,它允许团队主动调试系统。可观测性基于探索未预先定义的属性和模式,旨在深入了解系统的内部状态。监控主要关注已知问题及应用程序/系统指标,通过为特定指标设置警报和阈值,以便在出现问题时及时通知团队。而可观测性则更为深入,它不仅关注何时出错,更致力于探究为何出错。可观测性的核心在于其探索性和调查性,允许您就应用程序行为提出任意问题,并诊断未预料到的问题。例如,当网站速度意外下降时,您可利用可观测性工具分析数据模式、追踪请求并查看日志,以确定是否是最近的代码部署导致了内存泄漏,进而影响了响应时间。简而言之,监控负责告知您系统出现故障,而可观测性则帮助您找出故障的根本原因。
可观测性概念概览
可观测性构建于三大支柱之上:指标(Metrics)、日志(Logs)及跟踪(Traces)。
- 日志(Logs):记录应用程序中的事件。日志条目通常包含时间戳、事件描述、严重性级别及其他上下文信息。开发人员负责在代码中嵌入日志。大多数软件库和语言都提供内置功能,日志的实现相对简单。日志格式多样,包括纯文本、结构化、二进制及自定义格式。
- 指标(Metrics):以数字表示的数据,通过在一段时间间隔内测量得到。指标在可观测性中扮演着关键角色。它们使您能够一目了然地了解系统状态及随时间的变化趋势。
- 链路追踪(Traces):分布式跟踪是一种方法,用于跟踪和监视请求在分布式系统(尤其是微服务架构)中的流动路径。
通过分析追踪数据,开发人员可以识别瓶颈、了解不同组件对系统性能的影响,并解决问题。开源分布式跟踪工具(如 Jaeger 或 Zipkin)能够将跨度序列以时间线的形式展示,从而更易于理解请求的流动及延迟情况。
可观测性平台的工作机制
可观测性平台需要收集各类数据,然后串联分析。而各类数据的采集非常驳杂,比如常用的中间件、数据库,就有上百种,还有不同语言、不同框架编写的应用程序,不同的云、虚拟化基础设施,所以很多公司建设了很多零散的数据采集、存储的子系统。一个靠谱可落地的可观测性平台,通常是要和这些既有的系统进行集成对接,然后再进行数据的串联分析。最终为 SRE、DevOps、研发团队提供全面的上下文信息,帮助他们更快速、更准确地定位问题。
落地可观测性的益处
作为 SRE 或者 IT 技术团队,核心价值就是快速角度稳定的技术能力助力业务团队达成商业目的。可观测性让 IT 系统跑的更稳,如果系统出现问题,可以更快速地定位问题,减少故障时间,提升用户体验。同时,可观测性还可以帮助团队更好地理解业务,通过数据洞察,更好地优化系统,提升业务效能。
可观测性的底座是数据,当大家凡事基于数据驱动,很多问题就会迎刃而解。不知道你有没有发现,多个团队交流时经常各说各话,大家不但认知不同,基于的数据也不同。有了可观测性,大家可以基于同一套数据进行讨论,这样就能更快地达成共识,更快地解决问题。
落地可观测性的挑战
可观测性的落地并不容易,因为数据的采集、存储、分析是一个复杂的过程。首先,数据的采集就是一个大问题,因为数据来源非常多,而且数据的格式、协议也不一样,哪些数据重要,哪些数据应该采集,都需要专业人士的经验,比如 MySQL 数据库,有几百个指标,分别是什么意思,大部分初级 DBA 都难以讲明白。其次,数据的存储也是一个问题,因为数据量大,数据的存储、检索、分析都是一个大问题。
如果要从头建设这么一套系统,其建成的效果难以保证,因为这是一个复杂的系统工程。所以,如果有人没钱,建议让员工基于开源攒这么一套体系,如果有钱没人,建议请外部供应商,如果既没钱也没人,那就只能让现有的员工重点投入指标监控领域,其他领域暂时不要投入太多精力。因为指标监控领域是最容易落地的,而且效果也是最明显的。
总结
可观测性是 IT 系统稳定运行的基石,它通过数据的收集、分析,帮助团队更快速、更准确地定位问题,提升系统稳定性,提升用户体验。同时,可观测性还可以帮助团队更好地理解业务,通过数据洞察,更好地优化系统,提升业务效能。可观测性的落地并不容易,因为数据的采集、存储、分析是一个复杂的过程。如果要落地可观测性,建议先从指标监控领域入手,逐步扩展到日志、链路追踪等领域。