什么是 OpenTelemetry?
什么是 OpenTelemetry?
OpenTelemetry(OTel)是一套开源软件工具集,用于对指标、日志和链路等遥测数据进行插桩、生成、收集和导出,以便进行分析。现代应用具有复杂、互连的软件系统,为了完成一次用户请求,这些系统会与多个内部服务和外部第三方交换数据。要在使用不同编程语言和技术构建的各种系统中收集遥测数据(即进行插桩),可能颇具挑战。OpenTelemetry 由多家跟踪解决方案提供商协作推出,旨在为插桩提供统一基础。各提供商不再各自推出自己的解决方案,而是共同支持 OpenTelemetry 定义的标准格式。
OpenTelemetry 中的遥测数据是什么?
OpenTelemetry 支持指标、日志、链路和 Baggage,这些统称为“信号”。信号是分布式系统中某一时刻的测量值或发生的事件。
指标
指标是对运行中服务的累计测量值或某一时刻的测量值。例如,数据吞吐率、请求响应时间,以及特定时间段内的错误数,都属于指标。每个指标由名称、种类(即类型,例如计数器或直方图)、可选单位和可选描述定义。指标还可以按时间段聚合。指标是在对服务或应用进行插桩时定义的。
日志
在 OpenTelemetry 中,日志提供了一种标准化的方式,用于处理不同服务和功能中带时间戳的日志,例如现有的系统日志。借助日志模型,现有日志可以转换为标准化格式。
链路
链路数据类型是一种数据形式,能够展示单个请求在系统中跨多个分布式服务的完整路径。一条链路包含一个或多个 Span,每个 Span 都是一次独立操作或一个工作单元。在单条链路内,Span 按父子层级关系组织成无环图,并从唯一的根 Span 开始展开。
链路的一个应用示例是密码重置操作。用户输入电子邮件地址并选择重置密码后,会触发如下事件:
- 发送电子邮件
- 启动重置有效期计时器
- 递增密码重置计数器,以防止欺诈
用户必须点击邮件中的链接才能重置密码。可能的指标包括:该任务的平均总耗时、每项操作的平均耗时、每日错误数,以及每周达到密码重置限制的次数。
Baggage
Baggage 是一种键值对机制,用于把数据附加到一条链路中的所有 Span 上。例如,在电商交易中,整个链路可能都需要用到订单 ID。如果在链路上使用 Baggage 时,库存函数内部并不存在该订单 ID,那么库存函数中的 Span 将会附带与订单函数相同的订单 ID。
为什么 OpenTelemetry 对可观测性很重要?
可观测性这一概念常常出现在站点可靠性工程(SRE)中,后者是系统管理与应用监控的一个领域,旨在提升应用的可靠性。可观测性指的是从系统外部测量和分析产品或服务各项性能表现的能力。
要实现可观测性,需要在系统内部进行插桩并收集数据,以输出定量的遥测数据。随后,这些遥测数据可用于以下任务:
- 检查某个指标是否达到服务级别目标
- 在系统出现问题时进行根因分析
- 确定哪些系统组件可能因性能不佳而需要重构代码或重新配置系统
可观测性的实现可能涉及到许多工具,这使得整个过程十分复杂,并且对每个应用而言完全不同。
可观测性的标准化
OpenTelemetry 是云原生计算基金会(CNCF)的一个开源项目。它为各种工具、编程语言、基础设施和运行时提供了一套通用且标准化的可观测性框架。借助这一开放、标准化的框架,开发人员和运维团队无论使用什么工具或基础设施,都能快速、轻松地创建、管理和导出遥测数据。遥测数据从服务或应用发出,随后由可观测性后端或工具接收并处理,以便进行进一步的跟踪和分析。
OpenTelemetry 有哪些优势?
在 OpenTelemetry 出现之前,开发人员和运维团队要么购买采用专有数据类型的昂贵闭源解决方案,要么使用自定义数据收集代码自行构建一套方案。无论哪种方式,都需要投入大量精力和成本。2021 年,OpenTracing 与 OpenCensus 项目合并,OpenTelemetry 正式发布。自此,这一复杂问题领域有了更好的解决方案。
无供应商锁定
与其他遥测解决方案不同,OpenTelemetry 让组织能够完全控制和拥有自己的遥测数据。专有供应商可能会通过其解决方案将组织“锁定”,以此留住客户。而 OpenTelemetry 是开源且供应商中立的,全球的个人和组织都能使用并推动该项目发展,不受经济或地域障碍的限制。
高度集成
OpenTelemetry 的设计目标是尽可能与广泛的解决方案和编程语言集成,因此不存在供应商锁定问题,用户无需受限于某一组特定要求,也不会被绑定到某个特定的产品套件上。它与多种工具和平台原生集成,包括 Grafana、AWS、Splunk、Prometheus 和 Jaeger。此外,OpenTelemetry 还为 Python、C++、PHP、Java、Go 以及其他编程语言提供应用程序编程接口(API)和软件开发工具包(SDK)。
云原生
OpenTelemetry 是一个云原生框架,专为分布式云基础设施和工具而设计。
云原生应用采用微服务架构,将应用拆分为多个更小的独立服务,每个服务负责特定的业务功能。容器则把代码及其所有依赖项打包在一起,使应用能够在不同计算环境之间快速、可靠地运行。
OpenTelemetry 的分布式链路追踪功能,可以追踪并观测流经分布式系统的服务请求。您可以将它与应用容器一起部署,使用 Kubernetes 进行编排,并利用云服务来存储和分析遥测数据。
可移植
得益于丰富的集成,OpenTelemetry 也具有很强的可移植性。当业务或用例有需要时,您可以替换或更换不同的工具或解决方案。
OpenTelemetry 如何运作?
OpenTelemetry 在分布式系统中依靠上下文传播来运作。上下文传播使得任何类型的信号,无论来自哪个服务、系统、网络或架构,都能与其他位置产生的信号关联到同一个对象中。
插桩
插桩是指如何以及在何处定义日志、指标和链路。要生成并发出这些信号,服务和应用必须通过代码插桩,或采用零代码定制方式完成插桩。需要注意的是,OpenTelemetry 的零代码方案目前仍有一定局限。插桩完成后,服务或应用在运行时就会生成遥测数据。
传输到可观测性后端
默认情况下,OpenTelemetry 使用 OpenTelemetry 协议(OTLP),在客户端-服务器系统中通过 gRPC 和 REST 对遥测数据进行编码和传输。这些数据可以直接由合适的可观测性后端接收并处理。您也可以选择将遥测数据从插桩代码直接导出到各种解决方案。当涉及到更复杂的系统时,OpenTelemetry 收集器对象可以从多个来源收集遥测数据,然后将其导出到可观测性工具。
AWS 能提供哪些帮助?
作为领先的云服务提供商,AWS 的基础设施上运行着全球许多分布式和容器化应用。借助适当的 OpenTelemetry 插桩和可观测性工具,您可以准确监控这些分布式应用,从而改善用户体验并满足预期的性能要求。
适用于 OpenTelemetry 的 AWS Distro 是一个安全、生产就绪、开源且性能可靠的发行版,专为 OpenTelemetry 的数据、插桩和运行时而设计。
适用于 OpenTelemetry 的 AWS Distro 可与 Amazon CloudWatch 集成。CloudWatch 是 AWS 提供的一项监控服务,用于监控云资源以及您在 AWS 上运行的应用。它能够收集和跟踪指标、监控日志文件并设置告警。用户可以收集数据、分析和查看自定义指标、创建仪表板、识别趋势并设置告警,从而主动监控应用。
适用于 OpenTelemetry 的 AWS Distro 还可与 AWS X-Ray 集成。X-Ray 是一项完全托管的服务,可帮助开发人员在生产环境中分析和调试分布式微服务应用。它能够端到端地展示请求在应用中的流转过程,并呈现应用底层组件的映射图。您可以借此识别并排查性能问题和错误的根本原因。
立即创建免费账户,开始在 AWS 上使用 OpenTelemetry。
Browse all cloud computing concepts
Browse all cloud computing concepts content here:
Did you find what you were looking for today?
Let us know so we can improve the quality of the content on our pages