可观测性是什么? 入门指南
如果您之前对可观测性重要性,益处,以及组成不甚了解,本文是一个合适的指南手册。
什么是可观测性?
可观测性被定义为根据系统产生的输出数据(如日志,指标和链路追踪)来衡量当前系统运行状态的能力。
可观测性目前被广泛的用于提升分布式 IT 系统的稳定性(系统复杂度成倍提升,在故障或者异常时很难快速定位和解决),它利用指标、日志和链路追踪三种类型数据,为分布式系统内部运行状态提供了深度透视能力,协助 DevOps 工程师解决各种问题并提升系统性能。
如果您还不明白什么是可观测性,那么让我们这样说吧: 可观测性是可以帮助团队高效调试其系统的工具或技术解决方案。可观测性基于探索事先未定义的属性和模式(帮助我们主动地探索事先未定义的属性和规律,类似于解谜过程中的探索和揭示隐藏信息的能力)。
为什么可观测性很重要?
在大规模分布式系统上开展工作的跨职能团队,具备可观测性能力,特别是在生产环境中,可以精确的识别异常,做出更快速有效的反应。
通过可观测性系统,一旦确定导致应用程序性能下降的原因,就可以在它影响整体系统的性能或导致系统停摆之前来修复它。
可观测性带来的收益不仅限于 IT 场景,当您收集和洞察可观测性数据时,您还可以看到数字服务对您所在组织产生的影响。
通过透视系统运行状况的视角能够让您从监测用户体验 SLO (服务水平目标)的结果,来确保软件发布达到业务目标,并且根据业务影响选择各事项的优先次序。
可观测性与监控之间的区别
对于初级 DevOps 或刚刚开始 SRE(站点可靠性工程师)的人来说,彻底理解可观测性与监控之间的区别非常重要。
以下是 DORA( DevOps 研究和评估)团队研究关于可观测性和监控的内容。
监控是可以帮助团队观察和了解其系统状态的工具或技术解决方案。监控基于收集一组预定义的指标或日志。
可观测性是可以帮助团队高效调试其系统的工具或技术解决方案。可观测性基于探索未预先定义的属性和模式。
利用系统输出到外部数据来识别系统内部状态的能力被定义为可观测性。
在 IT 领域,我们可以把可观测性理解为利用日志、指标和链路追踪来理解软件内部状态的能力。
同时,监控是指从系统中获取数据(日志、指标和链路追踪)的过程。
大多数监控工具都提供了一个拖拽交互的仪表盘来显示您所选择的数据和它们各自的指标。然而,这种方法存在一个重要的缺点,因为通常团队根据个人偏好来构建此类仪表板,可能会导致重要指标的遗漏、性能异常和数据缺失的问题。
其次,大多数监控工具要么可能是是因为安全问题,要么可能是由于代理程序采集数据的能力不足,在复杂的云原生应用和容器化环境不能很好兼容。
相比之下,可观测性工具在兼容性方面表现更好,因为它们专注于收集整个基础设施中的日志、链路追踪和指标数据,还能够及时通知 DevOps 工程师,使他们能够在问题变成实际问题之前就能察觉到并采取行动。
- 简而言之,监控告诉您系统发生了故障,而可观测性可以帮助您找出系统故障的原因。
可观测性有什么好处
可观测性对于终端用户、企业和 IT 团队都带来了显著的优势。下面列举了可观测性的主要好处以及可观测性的重要性:
-
应用程序性能监控:全面的端到端可观测性帮助企业更快地识别性能问题,甚至能够捕捉由于采用云原生和微服务架构而引起的问题。借助先进的可观测性解决方案,可以自动化更多的任务,提高运维和开发团队的生产力和创造力。
-
DevSecOps 和 SRE :可观测性应该是应用程序及其底层基础设施的基本特征,而非单纯使用新工具的结果。软件设计团队和开发团队需确保其所开发的程序易于观测。在软件交付的整个生命周期中,DevSecOps 和 SRE 团队能够利用和理解可观测数据,以创建更强大、更安全、更具弹性的应用程序。
-
基础设施、云和 Kubernetes 的监控:可观测性的一个好处是它有助于基础设施监控。基础设施和运维( I&O )团队可以利用可观测性解决方案提供更好的异常事件上下文环境,从而更快地识别和解决问题,优化资源利用率,并提高对基础设施和应用程序的管理能力。
-
终端用户体验:舒适的用户体验可以提升企业的声誉和收入,为其带来竞争优势。通过可观测性解决方案,企业能够在终端用户察觉问题之前发现并解决这些问题,并在用户提出之前实施改进措施,从而提高客户满意度和留存率。
可观测性的主要组成部分是什么?
指标、日志和分布式链路追踪是可观测性的三个主要方面,也被称为“可观测性的三大支柱”。将这三个支柱相结合,而不是单独使用它们,可以显著提高微服务架构中应用的监控和管理能力。由于微服务架构的复杂性,传统的监控方法可能无法满足对系统的全面观测和调试需求。
事件日志、指标和链路追踪是可观测性的三大支柱,它们不仅可以单独使用,还可以通过综合利用它们的数据来提供更全面的观测。通过综合使用三支柱的数据,我们可以更好地理解和优化系统的性能和行为。这对于 DevOps 团队来说,将显著提升其生产力,并为用户提供更好的体验。
日志
事件日志记录包含时间戳,并且是三个支柱中信息提供最详细信息的一个。通常情况下,开发人员负责在代码中进行日志记录。
而且由于大多数软件包和编程语言已经内置了日志记录功能,因此实现事件日志记录非常简单。
事件日志在面对非典型或极端事件的场景下表现出色,它能够提供更详细的信息和上下文,这是通过平均值和百分位数指标无法涵盖或揭示的。
因此,事件日志能够帮助我们更好地了解分布式系统中较少发生但对系统性能和稳定性具有重要影响的意外行为。
指标
在一段时间内收集的数据可以通过数值指标的形式进行表示。这些指标利用数学建模和预测能力,可以更加全面地了解系统在当前和未来时期内的行为方式。
通过对指标的存储、处理、压缩和检索进行优化,我们能够实现更长时间范围内的数据保留,并且简化查询操作。因此,指标数据非常适合用于创建展示历史模式的仪表板。
同时,使用指标还可以逐渐降低数据的分辨率。在一定的时间段后,我们可以将数据聚合成每日或每周的频率指标。这样做可以有效减少数据的复杂性,同时方便分析和理解数据。
链路追踪
分布式系统中的端到端请求流程可以被编码成一条完整的调用链,这个调用链代表了一系列分散事件的具体请求路径。
链路追踪数据的结构类似于事件日志,它们记录了请求的不同阶段。每个独立的请求链路可以深入了解请求的结构,并且展示了请求在不同组件或服务上经过的路径。了解请求的结构有助于理解不同组件或服务之间的异步交互方式,以及这种异步交互对请求的执行时间、顺序和并发性等方面的影响。整个请求路径可以帮助软件工程师和 SRE 清晰地了解涉及的各个组件或服务。
通过理解请求的完整生命周期,我们可以调试多个服务的请求,以确定延迟增加或资源使用量增加的原因。这使得我们能够更好地分析和优化系统性能。
可观测性如何运作?
可观测性平台是一个集成现有指标数据的工具,它能够为应用程序和基础设施组件添加新的监测数据。该平台的主要功能是持续地识别和收集性能数据,并提取关键信息。
一般而言,可观测性平台会收集指标、链路追踪和日志数据,并且实时地将它们串联起来。通过将这些数据整合到一起,该平台为 DevOps 团队、SRE 团队和 IT 人员提供了详尽的上下文信息,包括每个事件的具体细节、发生位置和原因。这样的上下文信息对于识别、分析和解决应用程序性能问题非常有价值。
可观测性实现面临哪些挑战?
虽然实现可观测性一直以来都是一个具有挑战性的难题,但是随着云服务的复杂性日益增加并且企业加速采用云服务的趋势,解决这个问题变得至关重要。特别是在微服务和容器化应用的环境下,云服务所产生的监控数据变得更加广泛和复杂。与过去相比,它们不仅数量更多,而且种类和规模也更大,超出了传统监控系统所能提供的数据范畴。
关于可观测性实现,通常会面临以下困难:
-
数据孤岛:由于存在众多采集代理程序、用不同的数据源和独立的监控工具,各工具之间没有很好的集成或协同工作,很难全面理解应用程序、各种云服务和数字渠道(包括 Web 、移动网络和物联网)之间的相互依赖关系。
-
大规模、高速度、多样性和复杂性挑战:在使用 AWS、Azure 和 GCP ( Google Cloud Platform )等现代云服务基础设施的架构中,各服务和组件产生的原始指标数据量非常庞大,选择之前的监控方案,几乎不可能找到答案(很难有效地处理和分析这些数据,从中获取有用的信息和答案)。使用 Kubernetes 和容器进行快速扩缩容的能力,导致了更频繁的数据生成和变动,增加了对数据管理和分析的挑战。
-
缺乏预生产环境:尽管进行了预生产模拟高负载的测试,但开发人员依然缺少准确观测或理解实际情况的方法,代码发布前无法在生产环境中,了解到真实用户的操作(真实行为、网络延迟、不同地理位置的访问等因素)如何影响应用程序和基础设施。
-
排查故障耗费大量时间:为了解决问题并试图确定问题源头,实施团队,运维团队,基数设施团队,开发团队和数字体验团队( DX ,客户与企业所有数字渠道互动的方式,是您整体客户体验的重要组成部分)都被纳入故障排除工作。但是结果是,宝贵的时间被浪费在猜测和理解指标数据上。
可观测性与 DevOps 有何关系?
在 DevOps 中,可观测性是必不可少的。如果您想充分利用 DevOps 所提供的所有优势,可观测性是一个关键要素。因为 DevOps 方法论的一个关键目标之一就是项目交付的一致性(consistent project delivery)。
DevOps 的概念要求实施 CI/CD(持续集成和持续交付)。了解变更对应用程序可能会产生的影响是及其重要的!此外, 它使开发者在产品分发给用户时能够控制活动,确保用户获得更好体验。
通过实施可观测性的方法和工具,您可以处理复杂性问题。首先,它通过观测应用程序的输出来帮助您能够深入了解应用程序和系统的运行情况,从而更好地识别和解决潜在的问题。此外,它可以帮助我们精确定位问题,并确定问题发生的具体时间和位置。
如何实践可观测性?
要实现可观测性,您的系统和应用程序必须提供指标收集必要的指标数据。您可以通过自己创造的工具、利用开源软件或购买商业的可观测性解决方案来创建一个可观测的系统。
以下是开始实践可观测性的几个步骤:
-
确定业务目标:通过优化系统资源来减少基础设施支出、并且通过支持容量规划以促进业务增长,以及提高关键业务指标的表现(如平均恢复时间),强大的可观测性配置可以帮助提高利润或净收入。 通过向支持人员提供额外的上下文数据,可以促进问题的透明度,甚至创造积极的客户体验。然而,针对不同的业务目标,所需的可观测性配置可能会有很大的差异。一旦您确定了主要的业务目标,您需要制定一个可观测性策略,以确保您拥有适当的手段和工具来支持这些目标的实现。
-
关注正确的指标:精心设计的可观测性方法,您可以在问题出现之前就预测到潜在的错误或故障,并准确定位根本原因。 为了追求透明度,需要进行多种数据收集、分析以及其他监控和测试技术,以便全面了解和评估所涉及的内容。
-
事件日志:对于架构和开发团队来说,事件日志是分布式系统中可观测性的重要数据源。有很多专为捕获和存储事件日志设计的工具,如Prometheus、Middleware和Splunk。 这些事件信息可能包括系统的各种过程的成功信息、重大系统故障、意外停机或导致系统过载的流量变化。 因为它为开发人员提供了关键的取证信息,用来发现有缺陷的组件或有交互有问题的部分,所以这对于调试和定位错误处理尤为重要。
-
访问可视化数据:当成功采集到可观测性数据时,这些原始数据必须被压缩成通用的格式。通常再使用各种可视化工具对这些数据进行可视化渲染。 通过这样方式,团队成员就可以高效的将该信息传递或分享给其他相关的团队。
-
选择合适的可观测性平台:在选择合适的可观测性平台时,请考虑以下因素:
- 工具是否免费?
- 是否使用开源采集代理工具?
- 工具是否易用?
- 是否具备发挥该工具最大潜力所需的技术知识储备?
- 工具的处理能力可以适应何种数据规模?
通过回答这些问题和其他与业务相关的问题,将帮助您做出明智的决策。
结论
一个可观测性系统需要与业务平台进行适配和兼容,否则可能会带来一些问题。这些问题包括:
- 系统变得笨重:如果系统无法适应不兼容的平台,可能导致系统变得复杂、难以管理和使用。
- 增加运营成本:为了维护和支持系统,在不兼容的平台上可能需要额外的资源和投入,从而增加了运营成本。
- 缺乏效果和可见性:如果系统无法提供令人满意的功能和足够的可见性,就无法有效监控和了解系统的运行情况。
因此,在实施过程中,我们需要明确希望通过可观测性系统解决的关键问题,以确保系统能够提供精准且有用的数据和可靠的见解。这些数据和见解可以帮助我们深入了解运营情况、问题和趋势,从而支持企业的决策和运营。
如果没有明确的指导方向,在构建可观测性系统时可能会出现混乱的网络,其中存在着相互冲突的问题,无法提供一致性的用户体验和支持。因此,需要有明确的目标和计划,以确保系统的稳定性和有效性。
本文翻译自:https://devopscube.com/what-is-observability/,译者王梓禾,更多可观测性体系建设思路,请参考《面向故障处理的可观测性体系建设》