面向开发者的 OpenTelemetry


从开发者的角度来看,OpenTelemetry 引入了复杂的挑战,这些挑战可能显著影响应用程序的开发、部署和监控。第一层复杂性源于需要在各种环境和云服务(包括 Kubernetes、Go、Java、AWS、GCP 和 Azure)中集成 OpenTelemetry。每个平台都有独特的要求和复杂性,需要开发者全面了解才能确保成功实施。OpenTelemetry 的快速开发速度进一步加剧了这一集成挑战,可能导致文档不足,并要求开发者不断更新知识和技能以跟上最新变化。

此外,在利用 Kafka、gRPC 和 Docker 等技术的复杂系统中配置 OpenTelemetry 会带来额外障碍。开发者必须应对复杂的配置和潜在的集成问题,例如使用 Spring Boot 等框架时可能出现的版本冲突。这些挑战不仅限于设置和配置,还延伸到性能优化和高级插桩技术领域。开发者的任务是增强延迟和跟踪能力,以改善各种系统和服务的应用程序性能,这一过程需要深入研究复杂的插桩方法。

24 个月内 Stack Overflow 问题增加 425%

Line graph showing OpenTelemetry questions over time on StackOverflow
来源:Stack Overflow

除了这些技术挑战之外,OpenTelemetry 在云原生和高流量环境中的部署和可扩展性也引起了重大关注。开发者必须仔细规划和执行部署策略,以避免性能瓶颈并确保系统弹性。这要求在云原生技术方面拥有扎实的基础,并理解如何在这些环境中有效地扩展应用程序。随着 OpenTelemetry 不断发展,及时了解新兴趋势和社区讨论对于开发者成功应对这些挑战至关重要。

克服这些障碍的共同努力不仅促进了创新,还推动了最佳实践的发展,这些最佳实践可以带来更高效、更有效的应用程序监控解决方案。

分解 OpenTelemetry 开发者的挑战

1. 跨环境集成

在 Kubernetes、Go 和 Java 等不同环境中实施 OpenTelemetry,需要了解每个环境的特定复杂性以及如何在其中对应用程序进行插桩。

2. 云服务适应性

OpenTelemetry 需要适应各种云服务,例如 AWS、GCP 和 Azure。

3. 复杂系统配置

设置 OpenTelemetry 涉及应对包含 Kafka、gRPC 和 Docker 等技术的复杂系统配置。这包括了解如何在这些系统中配置 OpenTelemetry 并处理潜在的集成问题。

4. 编码和框架集成

在 Spring Boot 等框架中集成 OpenTelemetry 可能带来特定的编码挑战,包括版本冲突。这要求开发者了解如何在这些框架中初始化和配置 OpenTelemetry。

5. 性能优化

改进 OpenTelemetry 的延迟和跟踪能力以增强跨不同系统和服务的性能是一项重大挑战。这涉及了解如何手动定义 Span 和 Trace,以及如何配置 OpenTelemetry Collector 以收集遥测数据。

6. 高级插桩技术

OpenTelemetry 提供了复杂的插桩方法,但由于项目开发速度快且这些方法复杂,理解和实施这些技术可能具有挑战性。

7. 部署和可扩展性

在云原生和高流量环境中部署和扩展 OpenTelemetry 可能很困难。例如,这涉及了解如何在 Kubernetes 集群中有效地将 OpenTelemetry 部署为 DaemonSet 和 Deployment。

8. 监控和可观测性最佳实践

使用 OpenTelemetry 实现最佳可观测性需要了解监控策略的最佳实践。由于这些策略的复杂性以及需要对 OpenTelemetry 的功能有深入了解,这可能具有挑战性。

OpenTelemetry 的快速发展以及围绕可观测性的新趋势和讨论的出现,可能对开发者构成挑战,尤其是那些刚接触该项目的开发者。这要求开发者及时了解最新趋势和社区讨论。

Topics map for developer challenges on Stack Overflow
来源:Stack Overflow

最受关注的 OpenTelemetry 开发者话题

Bar chart showing top OpenTelemetry topics on Stack Overflow
来源:Stack Overflow

1. OTel Collector

提供的 Stack Overflow 讨论和问题侧重于与 OpenTelemetry (OTel) Collector 配置和操作相关的几个关键主题,特别是在其与 Jaeger 交互以处理跟踪数据方面。

**配置和设置:** 用户正在使用各种导出器和接收器(例如 Jaeger 和 OTLP)配置 OTel Collector,并在设置正确的配置文件和 Docker Compose 配置方面面临挑战,以确保服务之间的正常通信。

**错误处理和调试:** 在设置或运行 OTel Collector 时,会出现错误消息,例如 TRANSIENT_FAILURE 状态和反序列化错误,这表明与 Jaeger 后端连接存在问题或 Collector 设置存在错误。

**与 Jaeger 集成:** 讨论表明尝试将 OTel Collector 与 Jaeger 集成,包括设置正确的端点并确保 Collector 可以将跟踪数据发送到 Jaeger 后端。

**连接故障排除:** 用户正在排查 OTel Collector 和 Jaeger 之间的连接问题,寻找诊断和解决 Collector 无法将跟踪数据发送到 Jaeger 的状态的方法。

**Collector 性能:** 关于增加跟踪缓冲区大小和处理大量跟踪数据的问题表明,需要了解和管理 OTel Collector 在不同环境中的性能。

这些主题反映了开发者和运维人员在跟踪和可观测性技术栈中部署和管理 OTel Collector 时面临的实际挑战和注意事项。

2. OpenTelemetry + Jaeger

提供的 Stack Overflow 问题和讨论中的文本围绕使用 OpenTelemetry 和 Jaeger 进行分布式跟踪相关的几个核心主题展开。

**配置挑战:** 开发者在设置和配置 OpenTelemetry 和 Jaeger 时面临问题,例如设置顶层服务名称、向 Jaeger Exporter 添加请求头以及配置多个 JaegerGrpcSpanExporter。

**数据传播:** 关于如何在所有 Span 相关的调用中传播特定数据(如租户标识符)以及如何在响应头中包含活动 ID 的问题。

**集成问题:** 开发者在尝试将 OpenTelemetry 和 Jaeger 与不同环境和应用程序(例如 ASP.NET Core、Docker Compose 下的 Node.js 应用以及部署在 Kubernetes 集群中的 Spring Boot Java 应用)集成时遇到问题。

**错误处理:** 一些开发者在设置和使用 OpenTelemetry 和 Jaeger 时遇到特定的错误代码和编译错误,这表明需要更好的故障排除资源。

**弃用担忧:** 关于某些特性或工具(如 JaegerExporter)被弃用的担忧,以及如何过渡到较新工具或方法的问题。

这些主题突出了开发者在不同环境和配置中设置和使用分布式跟踪工具(如 OpenTelemetry 和 Jaeger)时面临的复杂性和挑战。

3. 分布式跟踪

Stack Overflow 讨论中描述的跟踪相关挑战可以总结为几个关键主题。

**跟踪传播:** 确保跟踪 ID 在应用程序的不同层中正确传播的困难,包括跨越异步边界以及在用不同语言或框架编写的服务之间。

**可见性和调试:** 跟踪未显示在预期的后端或用户界面(例如 Jaeger 的 UI)中的问题,这可能是由于配置错误或网络问题引起的。

**与工具集成:** 将跟踪与各种工具和平台(包括 Apollo GraphQL、Datadog、Dynatrace 和 OpenSearch)集成的挑战,这些工具在开发环境和生产环境中的行为可能不同。

**跨标准兼容性:** 关于使用不同跟踪标准或库(例如 OpenCensus 和 OpenTelemetry)时跟踪数据兼容性的担忧,以及跟踪上下文是否可以在这些系统之间识别。

**配置复杂性:** 正确配置跟踪的复杂性,包括设置 Collector、Exporter 和 Instrumentation,如果操作不当,可能导致静默失败或数据丢失。

**性能和可扩展性:** 管理跟踪对性能的影响,例如处理大量跟踪数据或配置采样率以平衡细节和开销。

**数据丰富:** 希望使用额外信息(例如方法参数或自定义指标)丰富跟踪数据,以及难以找到这些特性的文档或支持。

**跟踪上下文管理:** 创建和管理跟踪上下文,尤其是在微服务架构中,服务可能使用不同的跟踪系统或需要自定义跟踪 ID 和 Span ID。

这些主题反映了在现代软件系统中实现分布式跟踪的技术和操作复杂性,强调了稳健配置、清晰文档和有效故障排除实践的必要性。

4. Prometheus 和 OpenTelemetry

Stack Overflow 讨论揭示了开发者在使用云原生应用程序中的指标时面临的几个挑战和注意事项,特别是与 OpenTelemetry 和 Prometheus 结合使用时。

**插桩和导出:** 开发者正在尝试使用 OpenTelemetry 对 .NET 应用程序进行插桩并将指标导出到 Prometheus,但遇到一些问题,例如在某些设置中缺少 Prometheus Exporter。

**指标规范:** 希望以与 Prometheus 兼容的格式暴露特定指标,例如 EF Core 连接池指标。

**指标过滤:** 用户正在寻找根据标签组合过滤掉特定指标的方法,然后再将它们发送到中央聚合器,但当前的配置选项存在困难。

**与 CI/CD 工具集成:** 有关于 GitHub Actions 监控工具的查询,这些工具类似于 GitLab CI 中可用的工具,这表明 CI/CD 管道与可观测性平台之间需要更好的集成。

**学习曲线:** 在 JavaScript 环境中刚接触 OpenTelemetry 的用户正在学习如何设置指标 Exporter,例如 Prometheus Exporter,并将其与他们的应用程序集成。

**错误处理:** 有报告称在尝试导出指标时出现错误,例如 HTTP 404 Not Found,这表明指标 Exporter 的设置和配置存在挑战。

总之,这些讨论强调了在现代软件环境中设置和管理指标的复杂性。开发者正在寻找提供清晰文档、易于与现有工具集成以及能够根据监控需求过滤和自定义指标的解决方案。

5. OpenTelemetry 指标

根据 Stack Overflow 讨论中提供的文本,与指标相关的挑战可以总结为几个关键主题。

**标准化:** 关于如何从 .NET 库中暴露指标的标准方式的问题,例如是使用 EventCounters 还是其他方法。数据重复:关于将同一数据作为指标和 Span 进行跟踪是否是一种反模式的担忧,这可能导致数据重复。

**可见性:** 指标未显示在预期的后端或用户界面(例如 Prometheus)中的问题,这可能是由于配置错误或网络问题引起的。

**处理延迟:** 经历指标发送与处理之间的显著延迟,这会影响数据的及时性和有用性。

**指标持久性:** 关于 OpenTelemetry Metrics Instrumentation 是否需要持久化才能正确记录指标的问题,特别是在 Pod 频繁重新实例化的环境中,例如 Kubernetes CronJob。

**标签和注解:** 不确定 k8sattributes processor 添加的是数据源还是指标的标签或注解,这会影响数据的解释和使用方式。

基于 StackOverflow 讨论,云原生应用和 AI 系统背景下的指标相关挑战是多方面的。它们涵盖了标准化问题、数据重复担忧、可见性问题、处理延迟、指标持久性问题以及标签和注解的不确定性。这些挑战突显了在 Kubernetes 等现代、动态环境中实施和管理指标的复杂性,并强调了对强大、灵活和高效指标解决方案的需求。

6. gRPC

StackOverflow 讨论揭示了开发者在使用云原生应用程序中的 gRPC 时面临的几个挑战和注意事项,特别是与 OpenTelemetry 结合使用时。

**上下文传播:** 开发者正在尝试通过 gRPC 客户端传播 OpenTelemetry 上下文,但在 gin 上下文中遇到缺少 traceparent 和 tracestate 的问题。

**使用 AWS X-Ray 进行跟踪:** 开发者在使用 AWS X-Ray 和 OpenTelemetry 跟踪 gRPC 调用时面临问题。跟踪在 gRPC 调用处停止,而不是在被调用的服务内部继续。

**多个 JaegerGrpcSpanExporter 配置:** 开发者正在尝试在 Spring Boot 应用中配置多个具有不同服务名称的 JaegerGrpcSpanExporter,但所有 Span 都被导出到所有 exporter,行为不符合预期。

**连接问题:** 开发者在尝试从另一台机器连接其应用程序到 Signoz 时遇到连接问题,导致超时错误。

**关联 Span:** 开发者正在尝试关联同一服务中 gRPC 服务器和客户端之间的 Span,但在实现方面遇到困难。

**非法请求头值:** 开发者在使用 OpenTelemetry 将 Span 上下文添加到其客户端上下文时遇到“非法请求头值”断言错误。

总之,这些讨论突显了在现代软件环境中设置和管理 gRPC 的复杂性。开发者正在寻找提供清晰文档、易于与现有工具集成以及能够有效处理上下文传播和跟踪的解决方案。这些讨论强调了对强大、灵活且用户友好的可观测性解决方案的需求,以应对现代软件系统的复杂性。清晰的文档、易于与现有工具集成以及有效的上下文传播和跟踪对于开发者成功应对这些挑战至关重要。

Bar chart of popular OTel categories in Stack Overflow
来源:Stack Overflow

1. 网络

此类别的帖子数量最多,表明在 OpenTelemetry 的背景下,网络是一个重要的讨论话题。这可能涉及关于网络监控、性能问题或遥测数据如何在网络上传输的查询。

2. 应用

讨论量排名第二的类别,表明 OpenTelemetry 在软件或应用开发中的应用是一个常见的查询领域。这里的讨论可能涉及应用插桩、应用性能监控或应用级日志记录。

3. 操作系统

此类别帖子数量少于应用,但多于计算、数据库和存储,表明在将 OpenTelemetry 与各种操作系统集成方面存在中等程度的关注或挑战,可能包括如何捕获操作系统级别的指标。

4. 计算、数据库、存储

这些类别的帖子数量最少,这可能表明虽然这些领域与可观测性相关,但在 OpenTelemetry 的背景下,它们可能不如网络和应用产生那么多问题或讨论。

OpenTelemetry 问题类型

Bar chart showing top OpenTelemetry problem types on Stack Overflow
来源:Stack Overflow

1. 插桩

帖子数量最多,表明大多数与 OpenTelemetry 相关的 Stack Overflow 讨论都集中在如何在系统中实现或使用 OpenTelemetry 插桩。

2. 集成

此类别也受到高度讨论,可能涉及 OpenTelemetry 如何与其他工具或服务集成,例如可观测性平台、日志系统或云服务。

3. 配置

显示出大量帖子,这可能包括关于配置 OpenTelemetry、设置 Agent 或根据特定用例定制 OpenTelemetry 的讨论。

4. 导出

帖子数量最少,表明虽然导出遥测数据是讨论的一部分,但其查询频率不如其他方面,例如插桩或集成。

下一节:OpenTelemetry、DevOps 和平台工程