为什么我们需要可观测性 ?

80 阅读9分钟

作者:观测云产品技术专家 王海名

什么是可观测性?

可观测性(Observability)是指在复杂的系统中,通过监测、测量、收集数据和信息,以及分析这些数据来深入了解系统的运行状态、性能、行为和问题。在信息技术领域,可观测性是指通过收集和分析系统内外的数据,帮助了解应用程序、服务或系统的健康状况、性能指标、故障等情况,以支持快速诊断和问题解决。 Google出版的《SRE(Site Reliability Engineering)手册》对可观测性的定义为:可观测性(Observability)是指通过记录系统内部状态的指标、日志、事件和分布式追踪,使得团队能够推断出系统的内部状态,并能够根据这些信息判断系统是否正常运行,可观测性可以帮助工程师理解系统的行为。 CNCF(Cloud Native Computing Foundation)也对可观测做了定义:可观测性(Observability)是指通过度量、日志和追踪来理解系统运行的方式。可观测性使得工程师可以了解系统的内部状态、行为和性能,以便于故障排除、性能优化和系统改进。 在 IT 和云计算中,可观测性还表示一些软件工具和实践,用于汇总、关联和分析分布式应用程序以及运行此类应用程序的硬件和网络所产生的持续性能数据流,旨在更高效地监控、诊断和调试应用程序和网络,从而满足客户体验期望、服务级别协议 (SLA) 和其他业务需求。

为什么需要可观测性?

在过去 20 年左右的时间里,IT 团队主要依靠基础设施监控、网络监控、APM (应用性能管理)等监控工具来监控和诊断应用程序。这些监控工具会定期采样和汇总已知与主机、应用程序性能问题相关的数据,即遥测数据(Telemetry Data)。 它根据关键性能指标 (KPI) 来分析遥测数据(Telemetry Data),将结果汇总到仪表板中,以便向运营和支持团队发出警报,提醒他们注意那些解决或预防问题所需处理的异常情况。 但如今,组织正在迅速采用各种现代开发实践(例如敏捷开发、持续集成和持续部署(CI/CD)、DevOps、多种编程语言)以及云原生技术(例如微服务、Docker 容器、Kubernetes 和Serverless功能)。在这个过程中,组织会频繁地在众多地点以许多不同的语言部署新应用程序组件,而且部署的周期差异非常大(无服务器功能的周期只有几秒甚至不到一秒),传统监控工具的一分钟一次的数据采用频率已经跟不上步伐。监控工具之间相互割裂,难以形成关联分析,导致不同团队成员难以有共同的数据看板,开发、测试、运维效率受到很大制约. 在这样情况下,组织需要更多更高质量的遥测数据(Telemetry Data),这些数据可用于为每个应用程序用户请求或事务创建高精度、背景信息丰富且完全相关的记录。 于是,可观测性闪亮登场。

可观测性的优点

可观测性的最大优点在于:如果所有其他条件都一样,与可观测性差的系统相比,可观测性强的系统更容易理解(宏观和微观层面均如此),更容易监控,更新新的代码更简单、更安全,也更容易修复。 再具体一点,可观测性直接支持敏捷/DevOps/SRE 以更快速度交付更优质软件的目标,它使组织能够做到:

  • 发现和解决“Unknown-Unknown”- 即您并不知道存在的问题:监控工具的主要局限性在于:它们仅监测“已知道的未知问题(Known-Unknown)”- 即您已经知道要监测的异常条件。 而可观测性会发现您可能从不知道或想过要监测的条件,然后跟踪它们与特定性能问题的关系,并提供背景信息以找出根本原因,从而加快解决问题的速度。

  • 在开发过程中尽早捕捉和解决问题:可观测性在软件开发流程的早期阶段就融入了监控。 DevOps 团队可尽早发现和修复新代码中的问题,以免它们影响客户体验或 SLA。

  • 自动扩展可观测性:例如,您可以在 Kubernetes 集群配置过程中指定检测和数据汇总,并从集群启动时开始收集遥测数据(Telemetry Data),直到集群关闭。

  • 启用自动化补救和自我复原式应用程序基础架构:将可观测性与 AIOps 机器学习和自动化功能相结合,根据系统输出来预测问题并加以解决,无需管理人员干预。

可观测性如何工作?

可观测性平台通过集成应用程序和基础架构组件中内置的现有监测功能,并提供一些工具来为这些组件增添新的监测功能,从而持续发现和收集性能遥测数据(Telemetry Data)。 可观测性关注以下遥测数据(Telemetry Data)类型:

  1. 日志 Log:文本记录系统和应用的活动、事件和错误,提供详细上下文。
  2. 指标 Metric:定量的性能度量,如CPU使用率、请求速率,帮助监控系统状态。
  3. 分布式追踪 Trace:跟踪请求在分布式系统中的路径和性能瓶颈。
  4. 用户体验数据 RUM:记录用户在应用中的交互、操作和反应,评估体验质量。
  5. eBPF:扩展 Berkeley Packet Filter,收集内核级别的数据,用于分析和监控。
  6. 网络性能管理 NPM:监测网络带宽、延迟和连接状况,优化网络性能。
  7. Profiling:分析代码运行时的性能特征,帮助优化应用程序。
  8. 云服务 Cloud:从云提供商获取的监测数据,跟踪资源使用和性能。
  9. 拨测数据 Uptime/synthetics:定期对系统进行外部测试,监测系统在不同地点和条件下的可用性和性能。

收集这些遥测数据(Telemetry Data)后,该平台会实时地将这些数据关联起来,向 DevOps 团队、 SRE团队和 IT 人员提供结合了背景的完整信息 - 包括可能表明、导致或用于解决应用程序性能问题的事件、发生位置和发生原因。  可观测性平台在搜集这些数据后,会以实时数仓的形式向IT团队提供服务。IT团队可以轻松地通过可观测性平台,以全新、自由、可交互式的方式地对以上几种遥测数据(Telemetry Data)进行分析,从而快速找到故障的根因或软件代码架构中的缺陷。

可观测性在国内外的发展和未来趋势

随着分布式系统、微服务、云计算技术兴起,IT 系统发生多轮演进,复杂的运维环境对监控提出了更高的要求。2018 年,CNCF 将可观测性引入 IT 领域,取代监控。可观测性也一跃成为云原生技术领域最热门的话题之一。 而在5年后的今天,可观测性技术早已从早期的运维排查问题工具,逐渐进化成业务生产过程中的生产力工具。Gartner 更是将应用可观测性列为“2023 年十大战略技术趋势”,并表示“如果能够在战略中予以规划并成功执行,可观测性应用将成为数据驱动型决策的最强大来源”。 image.png image.png 根据 Gartner 的预测,到 2026 年,成功应用可观测性的 70% 组织将能够实现更短的决策响应时间,从而为目标业务或 IT 流程带来竞争优势,这说明可观测技术已经突破了技术层面,进入业务层面。 根据对国外一些成功案例的分析,我们发现欧美发达国家企业对构建观测性的动力主要来自于三方面:

  • 云原生和微服务架构的普及: 云原生和微服务架构的广泛应用导致了系统变得更加复杂和分布式,这加强了对系统可观测性的需求。
  • 跨部门协作: 可观测性不仅在开发和运维团队之间,还在不同部门之间变得更加重要。开发、运维、安全和业务团队需要共享和理解数据,以提高系统的整体效率和稳定性。
  • AI和自动化: 人工智能和机器学习被用于处理大量的监测数据,以预测潜在问题并自动采取行动。这有助于降低故障时间,提高系统的自我修复能力。

而国内企业构建可观测性的驱动力则主要来自于以下四方面:

  • 数字化转型: 许多国内企业正在进行数字化转型,加速了对云计算、大数据和微服务架构的采用,进而提高了可观测性的需求。
  • 数据安全和合规性: 随着数据泄露事件的增加,数据安全和合规性成为了关键问题。可观测性可以帮助企业实时监测和保护敏感数据,确保符合法规要求。
  • 提质增效:疫情过后,大多数企业开始更加精细地运营,强调降低成本与提升效率,对 IT 团队则是希望用更高效的手段来处理生产环境问题、减少软件 bug 的复现定位时间、提升软件发布的质量和效率等。