#写在前面#

随着技术的发展,可观测技术越来越多的应用到各个领域中,在应用开发中,可观测性帮助判断系统内部的健康状况。在系统出现问题时, 帮助定位问题、排查问题、分析问题;在系统平稳运行时,帮助评估风险,预测可能出现的问题。那么什么是可观测?它为什么重要?在容器和微服务中又有什么作用呢?


可观测性,是通过分析系统输出的外部数据来衡量系统运行状态的能力。

如果仅使用外部数据就可以评估运行状态,则系统被认为是“可观测的”。虽然该术语最近流行起来,但该术语其实起源于几十年前的控制理论(自我调节系统的描述和解释),最近它是越来越多地被应用在如何提高分布式 IT 系统的性能方面。在分布式IT系统中,可观测性使用三种类型的监控数据——指标、日志和跟踪——来实现系统的可观测能力,借助可观测能力团队能够找到众多问题的根本原因并优化系统性能。

最近,众多企业,例如AWS,以微服务,无服务或容器技术的形态实现了云原生基础设施架构。这些分布式系统中,事件溯源涉及到公有云,私有云或混合云中的数千个进程,因而传统的监控技术和工具很难准确的跟踪通信链路和相互间的依赖。

团队可以利用可观测性更有效地监控系统,发现和关联处于复杂关系链中的事件,从而追溯到根本原因。此外,系统管理员、IT 运营分析师和开发人员能够利用可观测性了解系统的整个架构。

在本文中,我们将仔细研究可观测性:可观测性的定义、怎么实现可观测性以及团队能从可观测性中获得什么?


01

监控和可观测性有什么区别?


监控和可观测性是相互依赖的不同概念。监控是您为提高系统的可观测性而执行的一项操作。可观测性是该系统的属性,如功能或可测试性。

具体来说,监控是随着时间的推移观察系统性能的行为。监控工具收集和分析系统数据,并将其转化为可操作的经验。从根本上说,应用程序性能监控 (APM)等监控技术可以告诉您系统是正常还是宕机,或者应用程序性能是否存在问题。

对监控数据的聚合和关联还可以帮助您对系统做出更大的推断,例如,页面加载时间可以告诉开发人员有关网站或应用程序的用户体验的信息。

而可观测性是根据系统输出的外部数据来推断系统内部状态的一种方式。它使用监控产生的数据和经验来全面了解您的系统,包括其运行状况和性能。因此,系统的可观测性部分取决于监控指标能否很好的解释系统的性能。

另一个重要的区别是监控要求您预先知道重点监控什么。而可观测性让您可以通过观察系统随时间的变化来提出相关问题,从而得出结论什么是最重要的,需要被监控。


02

为什么可观测性很重要?


可观测性之所以重要是因为您可以通过它更好地控制复杂系统。简单系统的运行模块较少,比较容易维护,通常通过监控 CPU、内存、数据库和网络状况就足以了解系统并解决部分线上问题。

分布式系统的互连组件数量要多得多,因此可能发生的故障数量和类型也更多。此外,分布式系统不断变更,每次更改都可能产生新的故障类型。在分布式环境中,理解正在发生的问题是一项巨大的挑战,主要是因为它比简单的系统产生更多的“不知道不知道”。由于传统监控需要“知道不知道”,因此通常无法充分解决这些复杂环境中的问题。

可观测性更适合分布式系统的不可预测性,主要是因为它允许您在问题出现时询问有关系统行为的问题。例如:“为什么X坏了?” 或“现在是什么导致延迟?” ,这些都是可观测性可以回答的问题。


03

什么是容器和微服务中的可观测性?


容器和微服务中的可观测性暴露了线上应用程序的状态,所以开发人员可以更好地识别和解决性能问题。

容器服务(例如 Docker、Kubernetes 等)和微服务解决了与日俱增的业务中断风险,以及和巨石架构相关的问题:单个代码库的变更会影响整个应用程序及其依赖。容器和微服务将应用程序分解为独立的服务,允许开发人员修改和重新部署特定服务而不是整个应用程序。

然而,基于容器的架构带来了新的挑战。相互依赖的微服务通常分散在多个主机上,随着基础设施的扩展,线上的微服务数量也会增加。这使得开发人员很难知道线上正在运行什么,从而导致交付周期延长、宕机时间增长等问题。

可观测性解决了这些挑战,提供对分布式系统的可见性。开发人员可以利用可观测性更好地了解应用程序的性能和可用性。在发生故障时,它提供了快速发现、调试或修复问题所需的控制能力。


04

可观测性中使用的主要数据是什么?

如何使用?


可观测性中使用的主要数据是日志、指标和跟踪。它们通常被称为“可观测性的三大支柱”。

日志:日志是在特定时间发生的事件的文本记录,包括事件发生的时间戳和上下文相关的有效信息。日志有三种格式:纯文本、结构化和二进制。纯文本是最常见的,但结构化日志——包括额外的数据和元数据,更容易查询——正变得越来越流行。当系统出现问题时,日志通常也是最先要被查看的。

指标:指标是在一段时间内测量的数值,包括时间戳、名称、KPI 和值等属性。与日志不同,指标默认是结构化的,这使得查询和存储优化变得更加容易,也可以保存更长时间。

跟踪:一个跟踪表示某请求通过分布式系统的端到端旅程。当请求通过主机时,在其上执行的操作称为“跨度”,每个跨度的编码里都包含了微服务执行操作时的重要信息。一个跟踪都包含一个或多个跨度。您可以通过跟踪查看请求通过分布式系统的全过程,从而确定性能瓶颈或故障的原因。

当系统使用多种工具生成三类数据,或者三类数据相互独立的被运用,并不能实现系统的可观测性。只有在一个完整解决方案中融合了日志、指标和跟踪数据,才能真正实现系统的可观测性,也只有这样,团队才可以利用可观测性了解问题何时发生,以及很快聚焦于分析问题为什么会发生。


05

如何实现可观测性?


为了实现可观测性,需要利用合适的系统或工具来收集数据。不论你是自研,使用开源软件或购买商业可观测性解决方案,通常都需要涉及四个组件:

探针:这些探针从容器、服务、应用程序、主机和系统的任何其他组件采集数据,从而实现整个基础架构的可见性。

数据融合:对数据进行处理和关联,创建事件相关的上下文,以及为了实现时序可视化而必须具备的自动化或定制化的数据治理能力。

事件响应:自动化技术。基于事件处理流程和技术经验为相关人员还原中断现场数据。

AiOps:机器学习模型用于自动聚合、关联事件数据并确定其优先级,使您能够过滤掉告警噪音,检测可能影响系统的问题并在发生事件时加快事件响应速度。

06

好的可观测性工具的标准是什么?


无论您选择构建自己的解决方案还是使用开源或商业解决方案,所有可观测性工具都应该:

系统集成:如果您的可观测性工具不适用于您当前的技术栈,您的可观测性工作将会失败。确保它们支持您的环境、容器平台、消息中间件和任何其他关键软件中的框架和语言。

对用户友好:如果您的可观测性工具难以学习或使用,它们将不会被添加到工作流中——这会让您的可观测性计划止步。

提供实时数据:您的可观测性工具应通过仪表板、报表和实时查询提供重要信息,以便团队能够了解问题及其影响以及如何解决。

支持先进事件处理技术:高效的可观测性工具能够从您的堆栈、技术和操作环境中收集所有与事件相关的信息,并提炼有价值的内容,为事件添加足够的上下文以便团队可以快速解决问题。

聚合数据的可视化:可观测性工具应以易于理解的格式显示内部状态,例如仪表板、交互式摘要和其他让用户快速理解的可视化方式。

提供上下文:当事件发生时,应能提供足够的上下文做支撑,以便您了解系统性能是如何随时间而变化的、发生变化的性能指标之间是否有关联、问题的范围以及受影响服务或组件之间的相互依赖关系。如果可观测性没有提供这种级别的上下文,事件响应就会瘫痪。

使用机器学习:应包括自动处理和管理数据的机器学习模型,以便更快地对异常和安全事件进行预测和响应。

交付业务价值:务必根据重要业务指标(例如部署速度、系统稳定性和客户体验)来评估可观测性工具。


云原生和微服务带来的便利性和巨大价值已不言而喻,但同时由于微服务带来的相对复杂性,对习惯了在传统IT架构、业务架构下工作的人来说,他们很难再以传统的方式清楚地了解业务部署情况,因此可观测性和APM的重要性日益凸显。借助可观测性和APM,可以实现用统一的视角,掌握业务、应用的链路过程,让云原生、微服务更可控、可观测。