capa-cloud / cloud-runtimes-jvm

Cloud Runtimes Specification for the JVM.
9 stars 5 forks source link

[Disccusion] Open Telemetry调研 #5

Open JasmineJ1230 opened 3 years ago

JasmineJ1230 commented 3 years ago

基于近期对于上云和监控数据管理的需求,对Open Telemetry做了一些调研工作,并对部分功能做了操作实验。以下为结果总结。

(Open Telemetry以及对应的AWS Distribution都提供了相当多的demo和文档说明,故在此不再赘述该工具的使用方法,文档链接见文末)

一、Open Telemetry的目的

可观察性是保证应用质量和稳定性的一项重要能力。而不同的可观测性产品(如Jaeger、Prometheus等)有各自的数据采集和管理方式,导致应用接入后,可移植性降低。

Open Telemetry主要解决的,就是数据采集和传送的规范问题。

接入Open Telemetry Api后,只需通过配置(sdk初始化代码/配置文件/系统变量/环境变量),就可将同一份监控数据发送到多个对应的可观测性服务,进行分析和展示。将应用的更改最小化。这点与capa的设计初衷是相符的。

二、Open Telemetry做了什么

1. 为可观测领域提供标准化的数据模型和API定义

Open Telemetry的数据模型主要分为Trace、Metrics、Log三种不同类型的监控数据,通过上下文进行关联。数据模型和API的定义是比较合理且完备的。 目前Trace和Metrics的模型定义都已进入稳定阶段。logs相关仍在设计中。 具体定义见 https://github.com/open-telemetry/opentelemetry-proto

2. 提供多语言SDK实现(Go、Java、JS、Python……)

OpenTelemetry依照统一的契约,提供了不同语言的SDK实现。 但目前SDK仍在不断建设和迭代的过程中,发版比较频繁。

各主要功能的SDK建设情况如下:

3. 提供多种主流框架的自动埋点,可实现无代码侵入的应用监控

Open Telemetry支持人工埋点和自动埋点两种方式。且两种方式不会互相影响。

4. 多种数据发送方式,可将监控数据发送至不同可观测性后端

Open Telemetry的数据发送主要有两种方式,一是直接发送,二是通过otel协议将数据发送至单独部署的collector做中转,再发送至可观测性后端。

不管使用哪一种发送方式,数据发送的目的地都是可多选的(Exporter可配置多个),即同一份监控数据,可以同时发给多个不同的可观测性服务。 这样做的直接优势是,数据处理和导出逻辑的实现与语言无关。在各可观测性服务为Open Telemetry贡献实现时,可以统一使用Go语言开发(https://github.com/open-telemetry/opentelemetry-collector-contrib) ,不再被用户的应用程序使用的语言所限制。

三、实验情况

调研过程耗时约5人日,总共完成demo和实验如下:

  1. 以手动埋点方式,向本地输出Trace日志。
  2. 同时使用手动埋点和自动埋点,为已有soa服务添加Trace监控。并通过自定义Exporter,将日志发送到Clog。
  3. 利用Open Telemetry的示例程序,以Docker方式本地部署Data Collector,发送日志到Jaeger、Zipkin、Prometheus。
  4. AWS Lambda编写Java程序(只允许Java11),使用Open Telemetry埋点,以java agent方式部署,并发送Trace日志到X-ray和CloudWatch。
  5. 利用AWS Distro for OpenTelemetry示例程序,使用AWS ECS部署Data Collector和应用,收集应用日志并输出到CloudWatch。

四、优点

Open Telemetry主要优势有三方面。

一是代码改动小。接入API后,基本可以做到用同一套代码切换不同的可观测性后端服务。对于日志自定义要求比较低的Java应用,甚至可以做到无代码侵入的监控。

二是耦合度低,可扩展性强。得益于合理的模型设计,项目各组件耦合度不高,即使SDK中没有需要的组件,用户也可通过自定义实现。

三是认可度高。项目目前活力和生命力很强,迭代速度很快。且其在Google、AWS等主流云厂商中认可度是非常高的。 AWS为其贡献了整套Distribution(AWS Distro for OpenTelemetry),并跟随主项目的进展不断迭代。可用于部署在Lambda, EC2,ECS,EKS,Fargate上的程序程序,且工具本身不收取费用。在遵循Open Telemetry规范,支持已有功能的情况下,也能自动对AWS相关SDK进行埋点监控。 其他云厂商和可观测性服务也积极为其贡献组件支持,实现情况见 https://opentelemetry.io/registry/

五、不足

最大的问题是目前项目整体仍处在开发阶段,功能支持并不完全。目前仅Trace为稳定可用状态。 且迭代频繁,变数大。如果接入大量应用,前期稳定性可能会受到影响。

六、相关文档