使用 OpenTelemetry 实现可观测性驱动开发

Tracetest 是一个开源工具,用于支持分布式微服务应用程序的开发和测试。
1 位读者喜欢此文。
Business woman on laptop sitting in front of window

图片来自 Mapbox Uncharted ERG, CC-BY 3.0 US

可观测性驱动开发 (ODD) 正被认为是复杂、基于微服务架构的“必需品”。 Charity Majors 创造了这个术语,并在几篇文章中对此进行了撰写,包括 可观测性:一份宣言。她在以下引言中解释了这个术语:

在编写代码时,您是否将可观测性直接融入到代码中? 最好的工程师会采用一种“可观测性驱动开发”的形式 —— 他们在编写软件时就理解它,在发布时包含检测,然后定期检查以确保它看起来符合预期。 您不能事后才附加它,“在完成时”。

OpenTelemetry 提供管道

OpenTelemetry 项目拥有行业支持,可以成为在分布式应用程序中实现可观测性的“管道”。 在 云原生计算基金会 (CNCF) 项目中,OpenTelemetry 项目的贡献者社区规模仅次于 Kubernetes,它是在 2019 年 OpenTracing 和 OpenCensus 项目合并后形成的。 从那时起,几乎所有行业的主要参与者都宣布了对 OpenTelemetry 的支持。

OpenTelemetry 涵盖了三个可观测性信号——日志、指标和分布式追踪。 它标准化了检测代码、收集数据并将其导出到后端系统的方法,以便进行分析并存储信息。 通过标准化收集这些指标的“管道”,您可以确保在从一个供应商切换到另一个供应商,或者决定使用 OpenSearch 等开源解决方案在内部进行分析和存储时,不必更改嵌入在代码中的检测。 供应商完全支持 OpenTelemetry,因为它消除了在每种编程语言、每个工具、每个数据库、每个消息总线以及这些语言的每个版本中启用检测的繁琐任务。 使用 OpenTelemetry 的开源方法使所有人受益!

使用 Tracetest 弥合差距

因此,您想进行 ODD,并且您有一个使用 OpenTelemetry 检测代码的标准。 现在您只需要一个工具来弥合差距,并帮助您使用 OpenTelemetry 开发和测试您的分布式应用程序。 这就是我的团队构建 Tracetest 的原因,Tracetest 是一个开源工具,用于支持分布式微服务应用程序的开发和测试。 它与使用的开发语言或选择的后端 OpenTelemetry 数据源无关。

多年来,开发人员一直使用 Postman、ReadyAPI 或 Insomnia 等工具来触发他们的代码、查看响应并针对响应创建测试。 Tracetest 扩展了这个旧概念,以支持团队的现代、可观测性驱动的开发需求。 追踪在工具中占据重要地位。 Tracetest 使您能够触发代码执行,查看来自该代码的响应和 OpenTelemetry 追踪,并根据响应和追踪中包含的数据构建测试。

Image of Tracetest functionality.

(Ken Hamric, CC BY-SA 4.0)

Tracetest:触发、追踪和测试

Tracetest 如何工作? 首先,您定义一个触发事务。 这可以是一个 REST 或 gRPC 调用。 该工具执行此触发器并向开发人员显示返回的完整响应。 这启用了一个交互式过程,可以更改底层代码并执行触发器以检查响应。 其次,Tracetest 与您现有的 OpenTelemetry 基础设施集成,以拉取由触发器执行生成的追踪,并向您显示追踪的完整详细信息。 Span、属性和时序都是可见的。 开发人员可以调整他们的代码并添加手动检测,重新执行触发器,并在工具中直接查看他们对追踪所做的更改的结果。 最后,Tracetest 允许您根据事务的响应和追踪数据构建测试,这种技术称为基于追踪的测试。

[ 相关阅读: 您需要在 CI/CD 中了解的关于自动化测试的内容 ]

什么是基于追踪的测试?

基于追踪的测试是解决旧问题的新方法。 如何针对复杂的系统编写集成测试? 通常,旧方法涉及在测试中添加大量复杂性,以便它可以了解系统中发生的事情。 测试需要一个触发器,但它还需要做额外的工作来访问系统中包含的信息。 它需要数据库连接和身份验证信息,监视消息总线的能力,甚至还需要添加到代码中的额外检测以启用测试。 相比之下,基于追踪的测试消除了所有复杂性。 它可以做到这一点,因为一个简单的事实——您已经使用 OpenTelemetry 完全检测了您的代码。 通过利用测试下的应用程序产生的追踪中包含的数据,Tracetest 可以对响应数据和追踪数据进行断言。 可以提出的问题示例包括:

  • gRPC 调用的响应是否具有 0 状态代码并且响应消息是否正确?

  • 两个下游微服务是否都从消息队列中拉取了消息?

  • 作为流程的一部分调用外部系统时——它是否返回 200 的状态代码?

  • 我的所有数据库查询是否在 250 毫秒内执行完毕?

Image of Observability driven development in Tracetest.

(Ken Hamric, CC BY-SA 4.0)

通过结合执行代码、查看返回的响应和追踪,然后根据两组数据构建测试的能力,Tracetest 提供了一个工具,使您能够使用 OpenTelemetry 进行可观测性驱动的开发。

试试 Tracetest

如果您准备好开始,下载 Tracetest 并试用它。 它是开源的,因此您可以为代码做出贡献并帮助塑造 Tracetest 的基于追踪的测试的未来!

标签
Photo of Ken Hamric
在开发软件产品方面拥有 30 多年的经验。 之前创立了两家成功的初创公司,最近的一家 CrossBrowserTesting.com 于 2016 年被 Smartbear 收购。 目前是 Tracetest.io 的创始人,Tracetest.io 是一个开源工具,允许您使用 OpenTelemetry 开发和测试您的分布式系统。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 授权。
© . All rights reserved.