点击一键订阅《云荐大咖》专栏,获取官网举荐精品内容,学技术不迷路!
随着分布式应用越来越广泛,分布式应用须要依赖弱小的可观测性设施来提供监控保障,弱小的可观测性设施须要依赖高质量的遥测数据。尽管曾经有许多开源或者商业供应商提供了遥测数据监测采集计划。然而在没有统一标准的状况下,采集的遥测数据兼容性差,保护监测客户端也给使用者带来惨重的累赘。
Opentelemetry 能够为开发者们提供对立的,与第三方无关的遥测数据采集计划,以解决上述的各种问题。
源起
Opentelemetry 源于 OpenTracing 与 OpenCensus 两大开源社区的合并而来。OpenTracing 在 2016 年由 Ben Sigelman 发动,旨在解决开源 Tracing 实现反复开发监测客户端,数据模型不对立,Tracing 后端兼容老本高的问题。OpenCensus 则是由 Google 外部实际而来,联合了 Tracing 和 Metrics 的监测客户端开源工具包。
因为两大开源社区各自的影响力都不小,而存在两个或多个 Tracing 的规范这个事件自身跟社区组建的宗旨相违反。于是两大开源社区一拍即合,成立了 OpenTelemetry。
为什么须要
从使用者角度来看,接入 Tracing 监测客户端,对业务代码有肯定入侵性。一旦接入了一个供应商的监测客户端,就很难切换到其余供应商提供的监测客户端。而从 Tracing 服务端供应商的角度来说,服务端除了要可能解决本人 Tracing 客户端的数据外,还须要兼容其余供应商 Tracing 客户端产生的数据,保护老本越来越高。尤其是在分布式应用逐步遍及的状况下,如文章结尾所说,Opentelemetry 的价值更加显著。
Opentelemetry 我的项目组成
Opentelemetry 的我的项目次要分为四个局部内容
跨语言标准阐明
收集、转换、转发遥测数据的工具 Collector
各语言监测客户端 API & SDK
主动监测客户端与第三方库 Instrumentation & Contrib
跨语言标准阐明
标准阐明蕴含话题内容比拟宽泛。其中有蕴含遥测客户端外部实现所须要的标准,也有蕴含遥测客户端与内部通信所须要实现的协定标准。
代码仓库:opentelemetry-specification
遥测客户端外部实现所须要的标准,如监测客户端根本架构、设计准则,遥测信号(Traces/ Metrics/ Logs)与辅助对象(Baggage/ Context/ Propagator)的概念与模型定义,实现遥测客户端须要实现的类与性能的设计等。这部分内容本文就不做具体介绍,能够在 specification/overview.md 以及相应对象文件夹上面的 datamodel.md/ api.md/ sdk.md 能够进行查阅。
遥测客户端与内部通信所须要实现的协定标准次要是指 OpenTelemetry Protocol(简称 OTLP)。OTLP 是 Opentelemetry 原生的遥测信号传递协定,尽管在 Opentelemetry 的我的项目中组件反对了 Zipkin v2 或 Jaeger Thrift 的协定格局的实现,然而都是以第三方奉献库的模式提供的。只有 OTLP 是 Opentelemetry 官网原生反对的格局。
OTLP 的数据模型定义是基于 ProtoBuf 实现的,如果你须要实现一套能够收集 OTLP 遥测数据的后端服务,那就须要理解外面的内容,对应能够参考代码仓库:
代码仓库:opentelemetry-proto
收集、转换、转发遥测数据的工具 Collector
在 Tracing 实际中有一个准则,遥测数据收集过程须要与业务逻辑解决正交。意思就是遥测数据收集并传递到遥测后端服务的过程不占用业务逻辑的信道 / 线程,尽量较少监测客户端对原有业务逻辑的影响。Collector 是基于这个准则实际的产物。
代码仓库:opentelemetry-collector
从架构层面来说,Collector 有两种模式。一种是把 Collector 部署在利用雷同的主机内(如 K8S 的 DaemonSet),或者部署在利用雷同的 Pod 外面(如 K8S 中的 Sidecar),利用采集到的遥测数据,间接通过回环网络传递给 Collector。这种模式统称为 Agent 模式。
另一种模式是把 Collector 当作一个独立的中间件,利用把采集到的遥测数据往这个中间件外面传递。这种模式称之为 Gateway 模式。
两种模式既能够独自应用,也能够组合应用,只须要数据进口的数据协定格局跟数据入口的数据协定格局保持一致。
Opentelemetry Architecture
在 Collector 外部设计中,一套数据的流入、解决、流出的过程称为 pipeline。一个 pipeline 有三局部组件组合而成,它们别离是 receiver/ processor/ exporter。
receiver
负责依照对应的协定格局监听接管遥测数据,并把数据转给一个或者多个 processor
processor
负责做遥测数据加工解决,如抛弃数据,减少信息,转批处理等,并把数据传递给下一个 processor 或者传递给一个或多个 exporter
exporter
负责把数据往下一个接收端发送(个别是遥测后端),exporter 能够定义同时从多个不同的 processor 中获取遥测数据
Collector Pipeline
从下面的设计能够看出,Collector 除了提供让遥测数据收集与业务逻辑解决正交的能力,还充当了遥测数据对接遥测后端的适配器。Collector 能够接管 otlp, zipkin, jaeger 等任意格局的数据,而后以 otlp, zipkin, jaeger 等任意格局的数据转发进来。这所有只取决于你须要输出或输入的格局是否有对应的 receiver 和 exporter 实现。otlp 相干的实现都是在 opentelemetry-collector 仓库中。而 otlp 以外的协定实现,则是能够参考上面代码仓库。
代码仓库:opentelemetry-collector-contrib
各语言监测客户端 API & SDK
Opentelemetry 为每种语言提供了根底的监测客户端 API & SDK 包。这些包个别都是依据 opentelemetry-specification 外面的倡议与定义,以及联合语言本身的特点,实现了在客户端采集遥测数据的根本能力。如元数据在服务间、过程间的传递,Trace 增加监测与数据导出,Metrics 指标的创立、应用及数据导出等。以下为各语言监测客户端 API & SDK 包对应的代码仓库表。
依照 Opentelemetry 我的项目的布局,2021 年上半年大部分组件实现 Tracing 的反对。以目前的工夫点(2021 年 12 月)来看,C++/.NET/Golang/Java/Javascript/Python/Ruby 监测客户端对 Tracing 反对曾经进入 Stable 状态。Erlang/Rust/Swift 监测客户端对 Tracing 反对则是进入了 Beta 测试阶段。
而 Opentelemetry 我的项目布局对于 Mertics 的反对则晚一些。心愿在 2021 年下半年大部分组件可能实现 Metrics 的反对。以目前状况来看,各语言客户端包对于 Metrics 反对还处在 Alpha 测试阶段。而对于 Logs 的反对,则是打算在 2022 年开始。
Instrumentation & Contrib
如果单纯应用监测客户端 API & SDK 包,许多的操作是须要批改利用代码的。如增加 Tracing 监测点,记录字段信息,元数据在过程 / 服务间传递的装箱拆箱等。这种形式具备代码侵入性,不易解耦,而且操作老本高,减少用户应用门槛。这个时候就能够利用公共组件的设计模式或语言个性等来升高用户应用门槛。
利用公共组件的设计模式,例如在 Golang 的 Gin 组件,实现了 Middleware 责任链设计模式。咱们能够援用 github.com/gin-gonic/gin 库,创立一个 otelgin.Middleware,手动增加到 Middleware 链中,实现 Gin 的疾速监测。
利用语言个性的,例如 Java 应用 Java Agent 的能力与 bytebuddy 字节码织入技术,在 Java 利用启动之前找到对应类和办法,批改字节码注入监测,实现对指定类的主动监测。
实践上来说,疾速监测依赖于客户端 API & SDK,主动监测则依赖于疾速监测。然而实际操作却并没有按实践的来。如 Java 语言利用 Java Agent 与 bytebuddy 技术能够实现对指定开源组件实现全自动监测的,所以就没有独自提供疾速监测(在 OpenTracing 外面是有离开的)。
总结
Opentelemetry 的使命是实现收集高质量、大范畴、便携的遥测数据,让无效的可观测性设施成为可能。它自身并不提供残缺的可观测性解决方案,而是提供了对立的遥测数据采集计划。而如果是须要搭建一套残缺的可观测性设施,还须要搭配相应的监测后端做数据长久化与数据查问,如 Tracing 后端 zipkin/jaeger/tempo/,metrics 后端 prometheus,logs 后端 loki 等。
周东科往期精彩文章举荐:链路追踪(Tracing)的前世今生(上)
《云荐大咖》是腾讯云加社区精品内容专栏。云荐官特邀行业佼者,聚焦于前沿技术的落地及实践实际之上,继续为您解读云时代热点技术、摸索行业倒退新机。点击一键订阅,咱们将为你定期推送精品内容。