一般来说,可观察性是指您仅根据所了解的外部输出对复杂系统内部状态或条件的理解程度。 系统的可观察性越高,您就能越迅速、越准确地从发现的性能问题找到根本原因,而不必进行额外的测试或编码。
在 IT 和云计算中,可观察性还表示一些软件工具和实践,用于汇总、关联和分析分布式应用程序以及运行此类应用程序的硬件和网络所产生的持续性能数据流,旨在更高效地监控、诊断和调试应用程序和网络,从而满足客户体验期望、服务级别协议 (SLA) 和其他业务需求。
作为一个相对较新的 IT 主题,可观察性常常被误认为是炒作的概念,或者就是系统监控、应用程序性能监控 (APM) 和网络性能管理 (NPM) 的“另一种说法”。 事实上,可观察性是 APM 和 NPM 数据收集方法的一种自然演变,旨在更好地适应云原生应用程序部署越来越迅速、分布越来越广的动态本质。 可观察性不能取代监控 – 它能够实现更出色的监控以及 APM 和 NPM。
“可观察性”一词来自于控制论,这是与根据系统反馈自动控制动态系统相关的一个工程领域,例如,流经管道的水流、汽车上下坡的速度等。
在过去 20 年左右的时间里,IT 团队主要依靠 APM 来监控和诊断应用程序。 APM 会定期采样和汇总已知与应用程序性能问题相关的应用程序和系统数据,即遥测数据。 它根据关键性能指标 (KPI) 来分析遥测数据,将结果汇总到仪表板中,以便向运营和支持团队发出警报,提醒他们注意那些解决或预防问题所需处理的异常情况。
APM 足以有效监控和诊断单体式应用程序或传统的分布式应用程序,这类应用程序会定期发布新代码,而且应用程序组件、服务器和相关资源之间的工作流程和依赖关系十分明确或者易于跟踪。
但如今,组织正在迅速采用各种现代开发实践(例如敏捷开发、持续集成和持续部署 (CI/CD)、DevOps、多种编程语言)以及云原生技术(例如微服务、Docker 容器、Kubernetes 和无服务器功能)。 因此,他们正以前所未有的速度将更多服务推向市场。 但在这个过程中,他们会频繁地在众多地点以许多不同的语言部署新应用程序组件,而且部署的周期差异非常大(无服务器功能的周期只有几秒甚至不到一秒),APM 的一分钟一次的数据采用频率已经跟不上步伐。
他们需要更多更高质量的遥测数据,这些数据可用于为每个应用程序用户请求或事务创建高精度、背景信息丰富且完全相关的记录。 于是,可观察性闪亮登场。
可观察性平台通过集成应用程序和基础架构组件中内置的现有检测功能,并提供一些工具来为这些组件增添新的检测功能,从而持续发现和收集性能遥测数据。 可观察性关注以下四种主要遥测类型:
- 日志。 日志是应用程序事件记录,具有粒度细、带时间戳记、完整而且不可改变等特点。 日志可用于创建每个事件的高精度毫秒级记录,并以相关背景信息作为补充,可供开发人员“回放”以进行诊断和调试;当然,除此之外,日志还有其他许多用处。
- 指标。 指标(有时也称为时间序列指标)是一段特定时间内的应用程序和系统运行状况的基本测量数据,例如,应用程序在 5 分钟内使用了多少内存或 CPU 容量,或者应用程序在使用高峰期间的延迟是多少
- 跟踪。 跟踪会记录每个用户请求的端到端“旅程”,即从 UI 或移动应用程序开始,经过整个分布式架构,再回到用户的过程。
- 依赖关系(也称为依赖关系图)显示每个应用程序组件对其他组件、应用程序和 IT 资源的依赖程度。
收集这些遥测数据后,该平台会实时地将这些数据关联起来,向 DevOps 团队、站点可靠性工程 (SRE) 团队和 IT 人员提供结合了背景的完整信息 – 包括可能表明、导致或用于解决应用程序性能问题的事件、发生位置和发生原因。
许多可观察性平台都会自动发现系统中可能出现的新遥测数据源(例如对另一个软件应用程序的新 API 调用)。 由于它们处理的数据量远远超过标准的 APM 解决方案,因此许多平台都包含 AIOps(面向运营的人工智能)功能,以从噪音(与问题无关的数据)中筛选出信号(指示实际问题的数据)。
可观察性的最大优点在于:如果所有其他条件都一样,与可观察性差的系统相比,可观察性强的系统更容易理解(笼统和细节层面均如此),更容易监控,更新新代码更简单、更安全,也更容易修复。 再具体一点,可观察性直接支持敏捷/DevOps/SRE 以更快速度交付更优质软件的目标,它使组织能够做到:
- 发现和解决“不知道的未知问题”- 即您并不知道存在的问题。 监控工具的主要局限性在于:它们仅监测“知道的未知问题”- 即您已经知道要监测的异常条件。 可观察性会发现您可能从不知道或想过要监测的条件,然后跟踪它们与特定性能问题的关系,并提供背景信息以找出根本原因,从而加快解决问题的速度。
- 在开发过程中尽早捕捉和解决问题。 可观察性在软件开发流程的早期阶段就融入了监控。 DevOps 团队可尽早发现和修复新代码中的问题,以免它们影响客户体验或 SLA。
- 自动扩展可观察性。 例如,您可以在 Kubernetes 集群配置过程中指定检测和数据汇总,并从集群启动时开始收集遥测数据,直到集群关闭。
- 启用自动化补救和自我复原式应用程序基础架构。 将可观察性与 AIOps 机器学习和自动化功能相结合,根据系统输出来预测问题并加以解决,无需管理人员干预。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/302022.html