Translator|布加迪评论|孙书娟在运行云原生应用时,可观察性至关重要。在云原生世界中,应用程序功能来自在多个位置运行的众多微服务之间的交互。微服务应用程序的松散耦合特性可能意味着每个微服务都以自己的方式报告其活动。如果没有聚合和关联此遥测数据的工具,即使不是不可能,也很难从头到尾跟踪请求的处理过程。这种精细的、逐步的跟踪对于故障排除和性能调整至关重要。在寻找多功能的可观察性工具时,NGINX现代应用程序参考架构(MARA)项目背后的团队选择了OpenTelemetry。这篇博文解释了为什么OpenTelemetry对微服务架构如此重要,以及它如何改变云原生应用程序的格局。OpenTelemetry驱动Observability2.0OpenTelemetry于2019年巴塞罗那KubeCon大会上首次宣布,此后吸引了大批贡献者。今天,它仍然是云原生计算基金会(CNCF)的一个非常受欢迎的项目。越来越多的贡献者表示OpenTelemetry已经成熟,开始弥合愿意尝试新事物的早期采用者与渴望成熟产品的实用主义者之间的差距。OpenTelemetry专注于数据,特别是最有效地理解、检测和改进应用程序所需的数据和数据流(遥测)。数据只有在可以大规模聚合、分析和可视化时才有用。尽管OpenTelemetry不提供数据可视化的指导,但它可以让我们不再担心我们得到的是什么数据,而是专注于我们可以用数据做什么。OpenTelemetry简化了跨数据源和应用程序关联事件的任务。这导致了Observability2.0,这是衡量云中应用程序活动的新基准。由于数据的自动关联,我们不再局限于只知道应用程序是否正在运行。现在我们可以了解任何请求通过我们的应用程序所采用的确切数据路径。为实现这一目标,OpenTelemetry的两个功能方面至关重要:分布式跟踪和应用程序智能。为什么现代应用程序架构需要分布式跟踪?虽然分布式跟踪已经存在多年(可以追溯到Solaris中的DTrace),但过去十年的许多变化增加了对它的需求。使用Cynefin框架,我们可以突出当今现代应用程序面临的一些变化和挑战:Cynefin框架展示了当我们从简单走向复杂时,我们的实践或实践如何变化。挑战在于我们走在两条不同的道路上,每条道路都有自己的特点;在从简单到复杂之后,试图走捷径往往会导致混乱和不完整的进展。让我们来看看哪些元素塑造了您在现代应用程序和云原生之旅中的道路。在第一条路径(Cynefin图中的Y轴)中,我们拥有现代应用程序,它们通常是微服务架构,每个应用程序都完成特定的工作。在第二条路径(X轴)中,复杂的环境是短暂的,因为微服务实例按需创建和关闭,并根据网络问题移动到不同的主机。我们还必须考虑亚马逊网络服务(AWS)、微软Azure和谷歌云平台(GCP)等云环境的出现和爆炸式增长。这种类型的云的一个优势是弹性响应——能够灵活地向上或向下扩展资源以满足当前需求的能力。再加上容器编排(最常使用Kubernetes)的影响,随着资源的数量和位置随时间变化,我们开始看到混乱的行为。(即使这种相对有限的视图也令人困惑,而像无服务器功能这样的元素会使它更加混乱。)在现代架构中,有许多单独的部分生成我们需要监控和维护应用程序的遥测数据,数据负载巨大且复杂的。由于我们无法完全控制基础设施和通信路径,因此问题可能无法可靠地重复或轻易触发。我们需要能够跟踪所有活动和相关元素的技术,以便我们能够了解和分析不断变化的环境,不仅可以识别反复出现的问题,还可以识别异常以及相关的应用程序和网络状况。这时候OpenTelemetry应运而生。OpenTelemetry在分布式跟踪中的未来分布式跟踪支持跟踪多种类型的新指标,但最常见的指标与每时间单位的请求数、每时间单位的错误数以及该时间单位内聚合请求的百分比有关。相关指标有多长。在OpenTelemetry中,所有生成指标的应用程序都可以通过遥测(传输)层将它们发送到一个公共收集点,这有助于对齐和关联来自生成数据的松散耦合服务的数据。这包括与底层基础设施保持一致。简而言之,使用OpenTelemetry获取和发送非常详细的指标变得更加容易。OpenTelemetry还有助于处理时间戳漂移和偏差,这使得关联事件变得困难。OpenTelemetry为每个请求分配一个跟踪号(TraceId),但数据仍然会受到漂移和倾斜的影响,这是云原生架构中经常出现的问题。漂移和偏斜可能是由持续时间不同的报告路径或不同主机上的时钟之间缺乏紧密同步引起的。通过在流量处理期间跟踪组件之间的通信,分布式跟踪允许OpenTelemetry测量各个跨度(工作单元和跟踪的基本模块),而无需对相关应用程序进行深入检测。结合这三个信号(遥测类别),我们可以纠正问题并将应用程序恢复到生产级质量:指标-“有问题吗?”痕迹——“哪里出了问题?”日志-“出了什么问题?”问题?”此时我们回到了可观察性2.0。能够获取跟踪并立即查看哪些指标对应于哪些跟踪给了我们很大的力量。例如,当指标表明存在问题时,分布式跟踪可以让您跟踪所有返回到导致初始问题的特定请求的方式,并跟踪请求实现的每个步骤的进度。由于我们的跟踪由跨度按它们发生的顺序组成,因此我们可以跟踪请求在他们旅程的每一步。知道发生了什么,以什么顺序(从最初的事件,到指定的问题,再到最终的结果),使我们能够专注于应用程序的特定部分并集中我们的注意力。听起来很简单,分布式跟踪方面OpenTelemetry可以让我们深入了解用户遇到的一切,充当请求成功和执行时间的代理。作为用户,我关心我的请求。作为站点可靠性工程师(SRE),我关心聚合请求。A作为应用程序所有者,我还担心尾部延迟:在某些情况下,尾部延迟可能会导致一小部分重要用户的性能不佳。OpenTelemetry为我提供了这三种功能,以及从聚合内容中提取详细信息的能力,因为它本身旨在使所有应用程序上的所有数据都可供用户使用。具有AI和ML的应用程序智能来自OpenTelemetry的新数据流还使我们能够在开发和运营响应方面实现自适应和自动化。有了所有这些积累的数据,我们可以使应用程序更智能、更具适应性。自适应应用程序顾名思义:自动智能地调整其行为以适应环境变化的应用程序。通过启用遥测数据的可访问性和标准化,OpenTelemetry使自适应应用程序的旅程变得顺畅。随着不同类型的产品开始输出相似的指标,如果我们利用OpenTelemetry(ML)算法中已建立的语义约定,我们将更容易在请求处理期间关联它们的操作并将此信息提供给人工智能(AI)和机器学习以便应用程序和基础架构可以动态适应。总结标准化遥测对于OpenTelemetry的用户和将其用作遥测通道的应用程序来说是一个明显的举措。可以从多个数据源收集数据并将其转发到任何兼容的聚合和分析工具。此外,OpenTelemetryCollector使供应商不必自己实施收集器。相反,他们可以努力改进代码以执行有意义的分析,并且可以智能地采取行动,可以构建新工具来帮助理解这个复杂而混乱的新世界。事实上,OpenTelemetryCollector(基于开源创新)可以处理几乎所有现有格式,同时使该技术面向未来。OpenTelemetry专注于了解我们的应用程序所需的主要数据类别,使我们的应用程序能够更深入地了解复杂的现代应用程序环境中的性能和问题。通过关联我们的数据、遵守语义和标准约定,OpenTelemetry使现代应用程序的旅程变得顺畅。随着OpenTelemetry项目的不断成熟和采用的不断增加,这显然是我们加深理解的一种方式。我们还希望OpenTelemetry将有助于应用AI和ML技术来解决复杂问题、自动修复并展示云原生应用程序如何变得更具适应性和性能更好。原标题:WhyOpenTelemetryIsTakingCloudNativetoNewHeights,作者:DaveMcAllister
