可观测性一词来源于工程领域,近年来在软件开发领域也日益流行。简而言之,可观测性是指根据外部输出以了解系统内部状态的能力。IBM对可观测性的定义为:
通常,可观测性是指基于对复杂系统外部输出的了解就能够了解其内部状态或状况的程度。系统越可观测,定位性能问题根本原因的过程就能越快速且准确,而无需进行额外的测试或编码。
在云计算中,可观测性还指对分布式应用系统及支撑其运行的基础设施的数据进行聚合、关联和分析的软件工具和实践,以便对应用系统进行更有效地监控、故障排除和调试,从而实现客户体验优化、服务水平协议 (SLA) 和其他业务目标。
随着IT架构变得越来越复杂,系统管理和故障排除也变得更加复杂。在许多场景中,传统的方法已经不足以确保最佳性能。可观测性通常被认为是监控的衍生物。监控通常会涉及跟踪一组特定指标,比如CPU 使用率或网络流量,并能在这些指标超过阈值时发出告警。监控存在一定的局限性,而可观测性涉及收集和分析更广泛范围的数据,提供系统行为的更全面视图。
在软件开发中,可观测性是指根据应用生成的数据了解应用行为和性能的能力,这些数据包括日志、指标、跟踪等数据。通过分析这些数据,开发人员可以了解应用程序的运行情况,并确定可以改进的方向。
可观测性案例
平台安全是可观测性的一个实际应用案例。
平台安全团队从多个来源接收到大量多种格式数据。分析杂乱、质量低的数据,会减慢检测漏洞、寻找新威胁以及在发生漏洞时作出反应的速度。此外,随着多种安全工具的部署,不同安全工具之间还存在无法共享信息的问题。
解决方案是定义可观测性过滤器,以识别潜在的安全威胁并提高待分析传入数据的质量。下一步是使用外部数据库的支持数据来丰富数据以帮助分析识别安全威胁,从DNS信息、IP地址再到用户标识等内容都是可以添加的。
可观测性的优势
可观测性的一个主要好处是它可以帮助开发人员快速识别和排除应用程序的问题。通过分析应用程序生成的遥测数据,开发人员可以了解它如何运转并确定可以改进性能的方向。这有助于减少停机时间并提升总体的用户体验。
借助自动化,监控和控制的及时性和准确性将得到改善。同时,将能够帮您减少整体监控并降低维护成本。
可观测性的支柱
可观察性通常被认为是建立在三个支柱之上:
日志
许多进程都可以创建其活动的日志。通常它们对可观测性很有用,但在一些情况下需要调整以增加日志中显示的详细信息级别才能发挥作用。
跟踪
日志非常有用,但是向前和向后的追踪也是必要的,这可以查看事件发生的原因及其后果。
指标
指标是我们衡量异常的方式,如果有必要,异常指标会触发纠正措施。简单地说,您需要知道正常状态,并检测偏离正常状态的情况。所以具有定义正常状态的指标是必须的。
可观测性的实施
使用一些旧工具也可以实现可观测性,但它们在适用性和覆盖范围方面有一些限制。要实现可观测性,需要一个包含技术和工具本身的工具箱,并涵盖可观测性的三个支柱:日志、跟踪和指标。
这些工具允许管理人员、监控人员和开发人员从各种来源(包括应用程序代码、基础设施和用户行为)收集和分析数据。通过结合使用这些工具,系统管理员可以全面了解整个系统或单个系统的行为和性能,这可以帮助他们更准确快速地识别和解决问题。
仪表
第一步是部署测量整个系统或单个系统性能的工具。这些工具需要涵盖日志、指标和跟踪,实现对有关系统行为和性能数据的收集。将网络管理和控制系统连接起来可以提高可观测性。
收集
在您安装仪表盘之后,您需要收集系统生成的数据。日志框架、指标收集系统和跟踪库等工具可用于收集数据。
您需要查看每个工具提供的数据,并确定存储、安全忽略或丢弃哪些数据。
存储
定义如何存储手机的数据是接下来的步骤。将数据存储在集中位置,比如数据库或者数据湖中,会方便您稍后查询或分析数据。云存储在这方面非常有用。许多企业使用分类系统,其中新数据立即可用,而历史数据仍在在线存储库中保留一段时间。自动检索系统可以访问离线保存的旧数据。
定期备份数据是日常操作流程的一部分。如何定义立即、在线和离线存储之间的分界点将根据业务需求而异。
分析
接下来您可以开始分析收集到的数据,以了解系统的行为和性能。分析过程涉及使用仪表板、警报系统和机器学习模型等工具。
您可以立即分析数据,以识别和管理使用情况的变化,例如观察营销活动对电子商务应用程序的影响。您还可以分析历史趋势。例如,北半球买地毯的高峰期通常在秋季,也就是10月初左右。历史分析会揭示业务中类似的模式。
可视化
可视化是重点。呈现数据有各种形式,如图表和图形。可视化有助于识别系统行为中的趋势和模式。可视化工具有很多,甚至 Microsoft Excel也可以完成此过程。
总体而言,实现可观测性需要结合工具、流程和最佳实践,让您在整体和细粒度级别上了解系统的行为和性能。这有助于企业和部门决策者更快地识别和解决问题。
最后
可观测性是一个强大的概念,可以帮助开发人员深入了解其应用程序的行为和性能。通过收集和分析遥测数据,开发人员可以快速识别和解决问题,从而改善整体用户体验并减少停机时间。