可观测性是指根据系统生成的数据,衡量并推断其当前状态的能力。这些数据通常包括日志、指标、追踪信息和事件。举例来说,可以通过检查微服务应用的指标来了解其运行状况。

可观测性如何发挥作用?

可观测性让组织能够全面了解复杂系统的运行状况。通过收集、存储和分析数据,开发人员可以识别并排查应用中的问题。

可观测性始于实时收集数据。随后,收集到的数据会集中存储,以供分析。分析可通过机器学习算法、可视化方法或多种统计技术的组合来完成。

分析结果会向开发人员以及运维、安全和其他相关团队发出警报,提醒他们注意应用或系统中的任何异常。警报可实现自动化,并根据业务或应用需求,在达到预设阈值、严重性级别或其他条件时触发。识别并定位异常后,开发人员可以利用这些数据进行调试并解决问题。

可观测性数据示例

可观测性数据主要包括日志、指标、追踪和事件。

  • 日志:带有时间戳和元数据的文本记录。这些记录或消息通常由应用或系统生成。日志记录是软件开发中实现可观测性的常用方式之一。
  • 指标:在运行时采集的服务测量数据。这些数值测量数据包括CPU使用率、内存使用率和错误率,用于跟踪应用或系统的性能和运行状况。
  • 追踪: 记录请求的完整路径,或某项操作在分布式系统各节点间的流转过程。追踪记录请求的处理方式及完成所需的时间。这些数据有助于识别瓶颈及其他延迟问题。
  • 事件:记录特定时间点发生的重大变化或事件。事件数据可能包括环境中的状态变化、用户操作、安全警报或关键部署。此类记录提供上下文信息,帮助团队了解变化发生的原因。

监控与可观测性有何不同?

监控是指观察和检查系统或应用程序内部流程进展的能力。监控高度依赖指标。简而言之,它可以直观呈现环境,并支持针对已知问题进行测试。相比之下,可观测性可提供更新、更深入的数据,帮助判断是否可能存在问题。随后,可以深入探究问题的根本原因,从而洞察未来趋势。

监控与可观测性并非完全不同。二者都是数据分析方法和可视化技术,可帮助开发人员更快获得洞察。

明确上述定义后,下表将进一步探讨软件应用中监控与可观测性之间的四项细微差异。这些差异分为范围、粒度、灵活性和分析四个方面。

监控可观测性

范围

衡量指标(例如,系统正常运行时间、CPU使用率、错误率)

根据系统输出理解其运行机制

粒度

按固定频率(基于预定义指标)聚合收集的数据或对其进行采样

收集并分析细粒度数据,深入洞察和了解系统行为

灵活性

具体取决于供应商,采用预定义的仪表板或告警阈值,部署后难以修改

采用灵活且适应性强的方法,并使用易于调整的工具,以适应不断变化的情况和要求

分析

识别特定事件或异常并作出响应

为开发人员提供所需工具,帮助他们确定问题原因并逐步实施解决方案,从而加强主动分析和故障排除

遥测在可观测性中发挥什么作用?

软件可观测性中的遥测,是指实时收集和传输软件系统性能与行为数据的做法。这些数据(响应时间、错误率、资源消耗等)用于监控和了解系统的当前状态,并帮助开发人员发现提升性能的机会。

在讨论遥测时,OpenTelemetry (OTel)经常成为话题,因为它提供了一种简化方法,让开发者能够更轻松地实现可观测性。OTel是一套开源工具和库,可对软件系统遥测数据(日志、指标和跟踪)的收集方式进行标准化。

如需进一步了解OTel及其对云原生领域的影响,请参阅《OpenTelemetry如何改变应用追踪与设计方式》。

高级可观测性技术

除了使用传统解决方案外,越来越多的组织开始探索先进技术,以简化数据收集,并实现更动态的实时可观测性。

eBPF (扩展伯克利数据包过滤器)从Linux内核收集遥测数据。这种直接内置于Linux内核的沙盒执行引擎,让开发人员无需修改内核源代码或运行资源占用较高的代理,即可运行自定义的轻量级内核级跟踪。例如,团队可以绘制微服务拓扑并跟踪容器间流量,从而快速发现性能问题或瓶颈。

AIOps (面向IT运维的人工智能)平台提供近实时洞察和执行能力。这些平台利用人工智能和机器学习快速检测异常、分析模式、帮助用户直观呈现洞察并自动执行操作。平台可以自动执行相关功能,以改善用户体验、优化流量以降低成本,并修复安全漏洞。

可观测性的优势

可观测性有助于开发人员更深入地了解其应用,从而能够:

  • 更快调试:经过详细分析的数据可帮助开发人员更快地诊断和调试系统问题。
  • 提升性能:监控关键指标并识别阻碍因素,有助于开发人员根据数据做出决策,从而提升应用性能。
  • 提高可靠性:可观测性数据有助于开发人员主动解决可能影响用户体验的系统故障。
  • 改善协作:长期积累的标准化数据集让团队能够基于一套通用指标轻松协作解决问题。

可观测性的缺点

可观测性确实存在一些缺点,最常见的包括:

  • 开销增加:实施可观测性可能需要使用专用工具来跟踪应用或系统指标,从而增加成本,同时还需要提供额外的数据存储空间。
  • 复杂性增加:需要额外的检测和监控,而集成这些附加工具可能会增加应用的复杂性。
  • 信息过载:可观测性可能会产生大量数据,团队很快就会难以管理;数据过多还会导致难以确定哪些问题需要优先立即解决。

常见问题

应用可观测性与传统监控的主要区别是什么?

传统监控使用指标跟踪流程,并以可视化方式呈现环境的当前状态。相比之下,可观测性通过收集和分析细粒度数据来提供深入洞察,并主动发现可能隐藏的问题。

可观测性数据主要有哪四种类型?

可观测性平台通常收集和分析四类数据:日志、指标、追踪和事件。日志是系统生成的带时间戳记录。指标是应用或服务在运行时的测量数据。追踪记录请求的处理过程及其耗时。事件记录环境在特定时间点发生的重要变化。

什么是OpenTelemetry(OTel),它为何如此重要?

OpenTelemetry(OTel)是一套开源工具和库,用于规范软件系统遥测数据的收集。OTel将应用插桩与后端工具解耦,帮助团队避免受制于特定的可观测性平台供应商。它还为所有主流编程语言提供一致的约定和API。

如何在云原生Kubernetes工具和无服务器平台中实现可观测性?

过去,由于Kubernetes工具和无服务器平台在性能数据的格式、命名和传输方式上互不兼容,很难同时为二者实现可观测性。开源OpenTelemetry(OTel)工具和库提供单一的通用协议(OpenTelemetry Protocol[OTLP])以及统一的字段定义,使团队能够为Kubernetes和无服务器平台实现可观测性。

eBPF如何提升应用可观测性?

扩展伯克利数据包过滤器(eBPF)是直接内置于Linux内核的沙盒执行引擎。开发人员无需修改源代码或运行资源占用较高的代理,即可执行自定义跟踪。这样既能识别性能问题、尽量减少资源占用,又能全面掌握系统活动。