什么是OpenTelemetry?
OpenTelemetry(OTel)是一个开源项目,为收集、处理和导出分布式系统(例如微服务架构)的遥测数据提供厂商中立的标准。这种简化且通用的可观测性方法,让开发人员能够更轻松地分析软件的性能和行为,从而更便捷地诊断和调试应用中的问题。OTel收集以下数据:
- 追踪:“问题出在哪里?”
- 指标:“是否存在问题?”
- 日志,“问题是什么?”
OTel不是编程语言,也不是产品。这个开源项目始于2019年,目前由云原生计算基金会(CNCF)维护。
观看此视频,了解如何开始使用:
OTel生成的数据类型
追踪
跟踪记录操作期间发生的事件,例如处理单个请求。跟踪由一系列跨度组成,每个跨度代表一个工作单元。
例如,Web请求的跟踪可能包含三个跨度:
- 接受请求
- 查询数据库
- 发送响应
跟踪将可能包含多个服务的数据流划分为一系列按时间顺序排列的片段,帮助您轻松了解:
- 每个片段中发生的所有步骤
- 各数据块的执行顺序
- 每个步骤的持续时间
- 每个步骤的元数据
OTel生成跟踪数据后,下一步是将其导出到跟踪后端或工具中进行分析。OTel为常用后端提供了一组导出器,例如Jaeger、Zipkin和AWS X‑Ray。这些服务提供用于分析和可视化跟踪数据的工具。
指标
在OTel中,指标是对操作系统行为特定方面的度量,并以键值对的形式随时间持续收集(称为指标标签)。键值对为随时间采集的度量提供上下文。例如,Web服务响应时间指标可能包含HTTP状态码、端点和HTTP方法等标签。所有指标还带有时间戳,以便按时间顺序排列。
日志
日志是了解特定服务运行状况的传统且常用方法。日志通常以文本形式生成,必须经过解析才能从中获取洞察。OTel对日志的支持仍处于实验阶段。
要进一步了解我们的解决方案架构师将OTel的可观测性功能集与其他可观测性工具进行比较后得出的结论,请参阅我们博客上的《将OpenTelemetry集成到现代应用参考架构:进展报告》。
OTel插桩
OTel可与许多常用编程语言、库和框架集成。不同语言的支持完善程度有所差异。例如,JavaScript插桩库自称其追踪和指标实现已达到“稳定”状态,对日志的支持也较为稳定。此外,这些库还提供自动插桩选项,无需在服务逻辑中添加任何插桩专用代码,即可开始接收追踪数据。相比之下,Go等语言对指标和日志的支持尚不够成熟,也缺少自动插桩功能。
遥测目标
设置遥测检测机制时,建议先明确一组具体目标,而不是“发送所有数据,然后期待从中获得洞察”。诚然,在查看数据之前,无法全面了解所有可能性,但设定一些最低要求有助于确保服务顺畅运行和维护。
其中可能包括以下技术问题:
- 我想知道服务何时面临压力并需要扩容。
- 我想知道我的服务是否频繁重启。
但也可能涉及产品和用户体验方面的问题,例如:
- 我希望用户能在5秒内看到系统中的新消息。
- 我希望消息发送后1分钟内发出通知。
以我们的教程如何使用OpenTelemetry追踪来了解微服务中的示例为例,可以将以下内容定义为主要目标:
- 了解请求完成新消息流所经历的所有步骤。
- 检查用户流程是否已成功完成。
- 确认在“正常”情况下,用户流程的端到端执行时间少于5秒。
- 了解notifier服务是否及时处理由messenger服务分派的事件。
OTel 实现
OTel为开发者提供一套统一的应用程序编程接口(API)、软件开发工具包(SDK)和插桩库,帮助开发者以一致且标准化的方式对应用程序进行插桩。
由于OTel生成的数据格式被视为行业标准,因此多种遥测数据聚合和可视化解决方案均支持该格式。您可以选择本地部署解决方案,例如本教程中使用的Jaeger;也可以选择软件即服务(SaaS)解决方案,例如SumoLogic或SigNoz。
要管理所有三类遥测数据,除了OTel之外,只能组合使用多种工具。这会使微服务架构及其基础设施本已复杂的运行管理变得更加复杂。
OTel中的API是什么?
API定义了软件组件相互交互所使用的方法、函数和协议。OTel API定义了一套标准方法和协议,开发人员可使用这些方法和协议对应用进行插桩并收集遥测数据。
OTel中的SDK是什么?
SDK是由标准或应用程序的开发者提供的软件开发工具,可帮助开发人员更轻松地构建符合该标准或能与该应用程序交互的应用程序。SDK通常包括库、代码示例、文档,以及用于测试、调试和性能调优的工具。OTel提供用于追踪、指标和资源管理的SDK。
