OpenTelemetry 社区演示公告

博客文章在发布后不会更新。这篇文章已经发布一年多了,其内容可能已过时,部分链接可能无效。在依赖任何信息之前,请务必核实。

摘要

OpenTelemetry 社区已采纳一个(由 Google 提供的)优秀的现有演示,并正在将其做得更好。每个 GA SDK(Swift 除外)都将得到体现,演示支持将扩展到 Metrics 和 Logs,并且将为每个信号记录规范场景,包括故障注入等!

如果您想跳过细节,请克隆我们的 存储库,然后从命令行运行 docker compose up1。有一些 技术要求,请务必查看。

首次构建此演示需要 15-20 分钟,我们建议您在此期间做些伸展运动并稍作休息。

您的命令行输出应如下所示

Console output

恭喜!您现在可以尽情享受购物疗法并提交遥测数据了。这真是一场胜利。

共同体的成功

有两个普遍存在的问题是推动我们联合演示工作的驱动力。

随着 OpenTelemetry 的成熟,用户和企业越来越希望获得有关如何将服务集成到新范式或演示应用程序的最佳实践指南,以便他们能够自己尝试新工具。然而,社区工作组和供应商缺乏一个单一的、复杂的平台来展示他们的技术。向世界打招呼只能带我们走这么远。

多个供应商已经编写了自己的演示应用程序,但完全负责开发和持续支持。现有的演示在功能上都有各自的不足,缺少某些语言、对后端选择的限制,并且过度依赖插桩库。

项目目标

  • 为开发人员提供一个强大的示例应用程序,供其学习 OpenTelemetry 插桩。
  • 为可观察性供应商提供一个单一的、支持良好的演示平台,他们可以进一步自定义或直接使用。
  • 为 OpenTelemetry 社区提供一个活生生的实例,演示 OTel API、SDK 和工具的功能和能力。
  • 为 OpenTelemetry 维护者和工作组提供一个平台,以在真实场景中演示新功能/概念。

当前状态

作为起点,我们选择了一个流行的 GCP 微服务演示的 fork。我们的首批功能添加包括通过将项目整合到一个 Docker Compose 文件来简化本地部署,更新文档,并用 Ruby 示例替换现有的服务。除此之外,GCP 演示的现有功能集保持不变。

  • 10 个应用程序微服务,支持 6 种语言(C#、Go、Java、Node.js、Python 和 Ruby)
    • Ruby 支持是在发布日期前的最后两周内添加的
  • 设计为可在本地 Docker 上运行
  • 使用 Redis 缓存
  • 使用插桩库进行自动插桩 Tracing 支持 gRPC、Redis 和 HTTP 库
  • Jaeger 可视化分布式追踪,由 OpenTelemetry Collector 转发
  • 始终开启采样(100% 的遥测数据都会被提交)和合成负载生成

当前架构

Current architecture

自带后端(BYOB)

Jaeger 非常棒(真的),但如果您想使用自己选择的 APM 供应商来尝试呢?您可以通过简单地更改 Collector 配置文件 来使用他们的数据进行发送,或者使用您供应商的演示 fork。

Lightstep 发布了一篇 精彩博客,介绍了如何从他们 fork 的演示版本开始发送数据来驱动他们的体验。

未来状态

即将推出的新功能

我们有很多激动人心的改进正在计划或进行中,旨在将此应用程序转变为 OpenTelemetry 全面能力的规范示例。以下是即将推出的功能的部分列表,但我们并不局限于此处列出的项目。

  • C++、Erlang/Elixir、PHPRust 的语言示例 C++
  • 将支持扩展到所有 GA SDK 的 MetricsLogs
  • 消耗 Metrics 的可视化组件
  • 多种插桩技术的实现
  • 使用 sidecar 中的代理进行自动插桩
  • 所有信号的手动插桩
  • 服务水平目标(SLO)SLO 的定义和跟踪
  • 在需要时引入其他插桩库
  • 演示添加 Baggage 和其他自定义标签的能力
  • 继续构建其他云原生技术,如
  • 增强的 OpenTelemetry Collector 网关功能,用于摄取、转换和导出
  • 基于概率的采样
  • 功能标志服务,用于演示各种场景,如故障注入以及如何从依赖功能标志的服务发出遥测数据

未来架构

Future architecture

未来展望

我们仍处于旅程的开始阶段,但这个项目有着巨大的动力。如果您有兴趣贡献,我们非常欢迎您的支持。我们的 GitHub 存储库中有关于如何参与的链接,您可以在那里 跟踪我们的整体进展


  1. docker-compose 已弃用。有关详细信息,请参阅迁移到 Compose V2。 ↩︎