什么是可观测性以及为什么需要它?

在分布式系统中,可观测性是衡量系统内部状态可以从其外部输出推断出来的程度。软件可观测性是监控您的软件以了解其行为并识别问题的实践。

现代分布式系统非常复杂,故障可能发生在任何级别。为了确保可靠性和正常运行时间,您需要能够尽快识别和修复问题。可观测性通过让您了解系统的各个方面来实现这一点。

在设计可观测系统时,需要考虑许多因素。您需要考虑要收集哪些数据、如何收集数据以及如何以对您有意义的方式呈现数据。您还需要考虑如何在可见性需求与隐私和安全需求之间取得平衡。您还需要考虑存储和分析多少数据与这些数据为您的业务提供的价值之间的权衡,以确保您的可观测性实施获得适当的投资回报。

为什么可观测性很重要?

简而言之,可观测性之所以重要,是因为如果实施和使用得当,它不仅会让您的用户因更好的性能和可靠性而更满意,而且它还将帮助您优化软件,从而节省硬件成本。在竞争激烈的市场中,这将使您比其他不利用现代可观测性实践来改进其软件开发流程的公司更具优势。

可观测性如何工作?

在最基本的层面上,可观测性的工作原理是检测您的应用程序以生成数据,存储该数据,然后分析您的数据以生成见解。

实施可观测性系统的第一步是使用必要的工具来检测您的软件以生成数据。这可能包括日志记录、指标和分布式跟踪库或框架等工具。这些工具协同工作,以生成系统行为的详细图片,包括有关请求、错误、性能指标等信息。

一旦系统被检测,这些工具生成的数据就需要发送到某处进行存储。这通常是某种数据仓库或针对分析工作负载优化的列式数据库。在某些情况下,出于性能原因,不同类型的可观测性数据可能会存储在不同的专用数据库中。

存储系统的选择将取决于组织的具体需求,但关键要求是它必须能够处理大量数据,并使工程师可以轻松访问这些数据以进行分析。

存储之后,最后一步是分析您的数据,以深入了解系统行为并识别问题。这可能涉及使用可视化工具生成图表和图形,以帮助工程师识别趋势和模式,使用机器学习算法自动检测异常,以及创建自动化以根据可观测性数据采取行动。

可观测性的三大支柱

用于可观测性的数据类型已被称为“可观测性的三大支柱”,即指标、日志和追踪。近年来,有些人开始认为三大支柱是不够的。在本节中,您将了解三大支柱以及一些关于超越传统三大支柱以改进可观测性的想法。

指标

指标是数值数据点,用于描述系统在某个时间点的性能和行为。一些示例包括 CPU 利用率、内存使用率、网络流量、响应时间和延迟。

指标以定期的时间间隔存储,用于监控应用程序的性能和建立基准性能。然后,指标可用于识别性能方面的趋势或异常。

日志

日志本质上是应用程序中发生的事件记录,可以包括警告、错误或仅是一般信息。日志提供了应用程序中发生事件的历史记录,是诊断问题发生时的重要组成部分。

追踪

追踪是一种创建和收集的数据类型,用于跟踪请求如何在应用程序中移动。追踪对于分布式系统或微服务尤其重要,在这些系统中,单个外部用户请求可能使用多个内部微服务。

Traces

追踪允许开发人员识别性能瓶颈并跟踪分布式系统中请求的端到端行为。

超越可观测性的三大支柱

可观测性专家中一种日益增长的观点是,可观测性的三大支柱实际上使事情变得过于复杂。归根结底,思考可观测性的方式是,我们只需要跟踪应用程序中正在发生的事件,并提供适当的上下文,使这些事件连贯且可用。

这是基于可观测性的核心目的,即帮助开发人员使其软件性能更好、更可靠。这意味着开发人员需要能够查看其系统中正在发生的事情,而做到这一点的最佳方法是使用附加到追踪的原始事件,以提供额外的上下文。

可观测性对软件工程有哪些好处?

提高开发速度

可观测性可以通过提供对系统中不同组件如何交互的可见性,显着缩短软件产品的上市时间。通过了解整个系统及其依赖项,开发人员可以快速识别可能需要数天或数周才能调试的错误和瓶颈。这种对应用程序行为的实时洞察使开发人员能够做出更明智的决策并更快地采取纠正措施。

分析实时业务影响

可观测性可以通过提供系统行为以及用户如何与新部署的功能交互的全面视图,帮助进行实时业务影响分析。通过将这些数据与分析相结合,工程师和项目经理可以弄清楚用户喜欢哪些功能,并相应地更改其开发路线图。

成本节约

通过更深入地了解应用程序内部正在发生的事情,工程师可以更轻松地了解资源的使用位置,并将精力集中在可以产生最大影响的工作上。可观测性数据可用于查找应用程序在技术上可以工作的位置,但可以对其进行优化以提高效率并降低成本。

可观测性用例

调试

可观测性最常见的用例之一是调试。当分布式系统中出现错误时,通常很难追踪根本原因。通过检测代码并使用可观测性平台收集有关系统行为的数据,可以获得有助于识别错误原因的见解,而不是毫无希望地四处搜索。

监控

监控软件性能是另一种利用已正确检测的软件生成数据的可靠方法。监控通常是更高级别的,并且跟踪软件性能的一些关键方面。一旦通过监控检测到问题,就可以进行更深入的分析。

容量规划

可观测性数据对于容量规划很有用。为了确保系统有足够的资源来满足未来的需求,您需要收集和存储有关系统当前利用率的数据。然后,这些数据可用于生成预测,以帮助识别趋势,以便可以进行适当的资源规划。这种类型的规划可以帮助防止潜在的成本意外。

网络安全

可观测性使您的软件更易于保持安全。可观测性数据可用于监控可能表明有人试图攻击系统的可疑活动。可以设置异常检测来实时检测潜在问题,可以在漏洞被利用之前检测到漏洞,事件调查更容易,并且由于到位了检测,一般的事件响应时间将会缩短。

性能优化

通过监控关键指标(如响应时间、错误率和用户参与度),可观测性可以帮助识别软件可能性能不佳或存在优化机会的领域。可观测性对于分布式系统尤其有用,在分布式系统中,由于系统的所有交互组件,识别瓶颈更加困难。

可观测性工具

InfluxDB

InfluxDB 是一个开源的、面向列的时序数据库,可用于使用单个工具存储所有类型的可观测性数据。InfluxDB 支持 SQL 查询,并与许多不同的可视化工具集成。它还具有各种客户端库,因此您可以使用您喜欢的语言及其库生态系统来查询和处理您的可观测性数据。

Prometheus

Prometheus 是一种开源监控工具,使开发人员可以轻松监控其应用程序和基础设施。Prometheus 具有高度可扩展性,可提供有关应用程序和系统性能的详细见解。它还提供警报功能,使开发人员能够快速识别和解决性能问题。

Grafana

Grafana 是一种开源可视化工具,用于创建时序和其他可观测性数据的精美可视化效果。它使开发人员能够从其数据中快速轻松地创建交互式仪表板和图形。Grafana 还提供警报功能,使开发人员能够随时了解任何性能问题。

Kibana

Kibana 是一个开源数据探索和可视化平台。它允许用户轻松探索和可视化其数据并创建强大的可视化效果。Kibana 还与其他开源工具(如 Elasticsearch 和 Logstash)集成,以提供对其数据的更多见解。

Jaeger

Jaeger 是一个开源分布式追踪平台。Jaeger 提供有关应用程序和系统性能的详细见解,并具有可视化功能,可以查看和分析 span 和 trace。

OpenTelemetry

OpenTelemetry 是一个开源项目,提供一组 API、库、代理和收集器,用于从应用程序和服务生成、收集和导出遥测数据。

OpenTelemetry 提供了一组用于检测应用程序的标准 API,这使得采用和与其他可观测性工具集成变得更加容易,从而消除了潜在的供应商锁定。该项目由一个庞大而活跃的开发人员和公司社区提供支持,这确保了该项目将获得长期支持。

常见问题解答

传统监控和可观测性之间有什么区别?

可观测性是软件监控中一个较新的概念,它提供了比传统监控工具更全面的方法。可观测性工具专注于提供对系统各个方面的可见性,以便识别问题并实现快速解决。这在微服务架构中尤为重要,在微服务架构中,移动部件很多,并且可能难以识别问题的根源。可观测性工具的工作原理是从系统的各个部分收集数据,并提供统一的视图,从而更轻松地发现问题。

相比之下,传统监控工具倾向于关注系统的特定领域,例如网络或数据库。这可能会使识别问题变得更加困难,因为这些问题在一个领域中可能不明显,但在另一个领域中可能可见。可观测性提供了更全面的系统视图,可以帮助更快地识别问题并更有效地解决问题。

可观测性和 DevOps 是密切相关的概念,有助于实现相同的目标。DevOps 专注于确保软件得到高效开发和部署,而可观测性有助于实现该目标。

以下是可观测性如何帮助 DevOps 的几个具体示例

  • 可观测性数据通过提供有关新部署如何影响关键指标的见解,帮助实现持续反馈

  • DevOps 部署管道可以在暂存或生产环境中使用可观测性来及早确定潜在问题,并在必要时根据收到的数据自动回滚部署。可观测性数据提供的额外上下文也可以构建更可靠的自动化。

  • 由于可观测性数据侧重于整个应用程序如何工作,因此它使团队之间的协作更加容易,因为他们可以看到其部署如何影响应用程序中的其他团队和服务。

由于云原生应用程序的架构性质,可观测性对于云原生应用程序尤为重要。由于云原生软件经常使用微服务,因此使用可观测性数据查看它们如何交互的能力至关重要。

云原生应用程序通常利用容器等来部署软件,并使用 Kubernetes 等工具来管理这些容器。可观测性数据可用于监控这些容器的健康状况,并跟踪整个系统的总体资源使用情况。这些数据可用于确保应用程序在短期内正常运行,并在长期内帮助优化应用程序以降低成本并提高最终用户的整体性能。

可观测性的起源是什么?

软件工程中的可观测性概念起源于控制理论,控制理论是工程学的一个领域,涉及动态系统的行为。在控制理论中,可观测性是指即使无法直接测量内部状态,也能够根据系统的外部输出来推断系统的内部状态。这个概念后来被应用于软件工程,在软件工程中,它指的是通过分析其外部输出(如日志、指标、遥测数据和追踪)来理解复杂系统的行为和状态的能力。

通过收集和分析来自这些外部输出的数据,软件工程师可以深入了解系统的行为和健康状况,并快速有效地诊断和解决问题。随着系统复杂性的增加,将可观测性原则应用于软件工程变得越来越重要,这使得在没有高级工具和技术辅助的情况下诊断问题和维持可靠性变得更加困难。

InfluxDb-cloud-logo

最强大的时序
数据库即服务

免费开始使用
Influxdbu

开发者教育

为时序应用程序开发者提供的培训。

查看所有教育