2023 年 1 月 OpenTelemetry 终端用户讨论摘要

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

来自 Henrik Rexed (Dynatrace)、Michael Hausenblas (AWS)、Pranay Prateek (SigNoz)、Rynn Mancuso (Honeycomb) 和 Reese Lee (New Relic) 的贡献。

每个月,OpenTelemetry (OTel) 社区的用户会聚在一起讨论他们如何在实际生活中使用 OpenTelemetry。为美洲 (AMER)、欧洲中东非洲 (EMEA) 和亚太地区 (APAC) 的用户举办了会议。讨论采用 精益咖啡(Lean Coffee)格式进行,与会者被邀请将他们想讨论的主题发布到 Agile Coffee 板上,如下所示,所有与会者投票决定他们想谈论的内容。

这是结识 OpenTelemetry 社区中其他用户、学习和分享在实际中如何使用 OpenTelemetry 的宝贵经验的好方法。每次会议都会有一位 OTel 治理委员会成员和/或维护者参加,以帮助回答问题、倾听用户反馈,并提供有关所讨论主题的额外背景信息和见解。

这是我们每月 OTel 终端用户讨论摘要系列博客文章的第一篇,从 2023 年 1 月的会议开始。

我们讨论了什么

本月,我们在三次会议中看到了几个共同的主题。

我们将深入探讨这些以及更多内容!

讨论亮点

以下是本月讨论的摘要。

OpenTelemetry Collector

1- OpenTelemetry 转换语言 (OTTL)

问: Exporters 是否会支持 OTTL(一种用于转换 OpenTelemetry 数据的语言)?用例:需要转换数据,但不想在 processor 中进行。

答: 由于关注点分离,OTTL 不太可能被添加到 exporters 中;但是,这可能是 connectors(一种新的 Collector 组件,充当 exporter/receiver 对来连接管道)或 routing processor 的用例。路由处理器从 HTTP 请求或属性读取数据,并将其路由到指定的 exporter。

2- 服务图处理器

问: 如何使用 OpenTelemetry 生成服务图、生成指标并将数据发送到可视化工具?

答: Service Graph Processor 可生成服务图。此处理器仍处于 alpha 阶段,因此,关于服务图在依赖关系映射方面存在一些已知问题。一个 span 没有完整的上下文,为了获得完整的图景,您需要将 spans 发送到集中式服务。

3- 管道中数据的分叉

问: 如果我想使用 Collector 将不同数据集发送到不同的后端,最好的方法是什么?

答: 可以使用 Connectors(一种新的 Collector 组件,充当 exporter/receiver 对来连接管道)来解决此问题。Connectors 即将发布。有关更多信息,请参阅 Connector PR

另一种方法是使用 routing processor。路由处理器从 HTTP 请求或属性读取数据,并将其路由到指定的 exporter。这是通过建立新的网络连接来完成的,这可能会使此方法效率低下。

4- 管理遥测数据中的时间漂移

问: 当服务器上的时钟不同步时,可能会导致一些数据点在未来被记录。是否可以在 OTel Collector 上实现一些功能来缓解这种情况?

答: 时钟偏移总是会发生。时钟无法完全同步,尤其是在微服务架构中。生成遥测数据的系统的所有者更能理解时钟的细微差别。Collector 不适合解决这个问题。

5- Collector 的高级部署和配置

问: 我应该何时水平扩展我的 pod,何时修改单个 collector 的配置?何时添加更多 collector 或更改 collector 配置?

答: 在部署和配置 Collectors 时,需要考虑一些因素。

  • 如果您的 Collector 中只有无状态组件,您可以根据指标进行扩展(添加更多副本)。
  • 您可能需要根据您正在进行的处理类型来分片您的管道。例如,创建一个 metrics 管道、一个 logs 管道和一个 traces 管道,因为这些管道的工作负载是不同的。
  • 您可能需要根据正在处理的数据类型来拆分您的 Collectors。如果有一个命名空间,其中有更多数据是 个人身份信息 (PII),您可能希望为该命名空间有一个专用 Collector,它使用 attributes processor

OpenTelemetry 采用与赋能

问: 那么,您已决定在您的组织中使用 OpenTelemetry……接下来呢?在不让开发人员感到不知所措的情况下,推广 OpenTelemetry 采用并让他们对使用 OpenTelemetry 感到兴奋的最佳方法是什么?

答: 社区提出的一些建议:

  • 寻找愿意成为 OpenTelemetry 推广者的人。
  • 让新手开发人员与更熟悉 OpenTelemetry 的开发人员配对。
  • 直到插桩了几个服务,才能看到 OpenTelemetry 的真正价值,才能了解事物是如何被串联起来的。
  • 开发人员必须在思想上准备好开始插桩他们的代码。请记住,这可能意味着要修改现有代码以进行插桩。
  • 采用 OpenTelemetry 的“大爆炸”方法可能不是最佳选择,因为它可能对组织来说过于庞大。从一两个组件开始。

OpenTelemetry 语言 API 和 SDK

1- 新语言的插桩

问: 如何查找有关不同语言 OTel 实现的信息,例如 DartLua

答: CNCF Slack 始终是开始搜索的好地方。那里有特定于语言的频道,遵循 otel-<language_name> 的命名约定。如果您找不到您所需语言的频道,请随时在 OpenTelemetry CNCF Slack 频道GitHub 上发起讨论,例如 这个关于 OTel for Perl 的 issue。请同时查看 此页面以获取更多信息。

2- Python 插桩

问: Python 自动插桩的成熟度如何?使用 OpenTelemetry Python 的用户有哪些经验?

答: Python 自动插桩处于 beta 阶段;但是,有些公司已在生产环境中使用 OTel Python,因此它可能不会导致生产环境出现任何问题。作为 SIG,OTel Python 试图最大限度地减少发布破坏性更改,但与所有事物一样,无法保证不会发生破坏性更改。关于 Python 插桩何时被标记为稳定,目前没有确切的时间表。

杂项

1- OpenTelemetry 示例

问: 用户可以在哪里了解更多关于 Exemplars 的信息以及它们在现实世界中的使用情况?

答: Exemplars 用于关联 OpenTelemetry metricstraces。Exemplars 目前处于开发的早期阶段,仍有许多工作要做。有关 Exemplars 状态的更多信息,请查看 CNCF Slack 中的 #otel-metrics 频道。另请参阅 Michael Hausenblas 最近关于此主题的演讲

2- Trace 和 Logs 之间的关联

问: 是否有更轻松地将 traces 与 logs 相关联的方法?

答: 实现关联需要时间和持续的努力。对于某些语言(例如 Java、Go),关联工作比其他语言更成熟。最好的方法是在与您的情况相关的特定语言的存储库中提出此问题。一种可能的解决方法是从日志级别开始追踪,这样每个日志都会有自己关联的追踪。

3- 剖析

问: OpenTelemetry 中 Profiling 的状态如何?

答: 有一个关于 profiling 的 OTel 提案,该提案已被接受并正在积极进行中和讨论中。目前的重点是最终确定协议,然后才能开始 SDK 工作。您可以在 GitHub 上的 profiling 存储库以及 GitHub 上的 Profiling Vision pull request 中查看。

4- 上下文传播

问: 浏览器无法自动跟踪上下文传播,因此必须手动完成。当前解决方法带来了很多开销。如何解决这个问题?

答: 解决此问题的方法是加入 JavaScript SIG 并在此处提出问题。如果有人正在积极开发 API 来在内部解决此问题,将其贡献给 OTel 社区将非常有益。

会议记录和录音

要深入了解以上主题,请查看以下内容:

今后,我们将录制所有终端用户讨论会议。

立即加入我们!

如果您有关于您如何在组织中使用 OpenTelemetry 的故事要分享,我们很乐意倾听!分享方式

请务必在 MastodonTwitter 上关注 OpenTelemetry,并使用 #OpenTelemetry 标签分享您的故事!

最后修改日期:2025 年 5 月 27 日:[chore] Accessible links 5 (#6053) (860f5141)