OpenTelemetry 简析

简介: OpenTelemetry 是 CNCF 的一个可观测性项目,旨在提供可观测性领域的标准化方案,解决观测数据的数据模型、采集、处理、导出等的标准化问题,提供与三方 vendor 无关的服务。 2021.02.10,OpenTelemetry 的 tracing spec 达到 1.0 版本 (link),基于这个里程碑,笔者对 OpenTelemetry 进行了探索,判断在可观测性领域带来的价值和发展前景。 下面给出笔者对 OpenTelemetry 的理解,抛砖引玉。由于笔者能力有限,理解不当的地方请大家指正。

头图.png

作者 | 悟鹏
来源 | 阿里巴巴云原生公众号

OpenTelemetry 是 CNCF 的一个可观测性项目,旨在提供可观测性领域的标准化方案,解决观测数据的数据模型、采集、处理、导出等的标准化问题,提供与三方 vendor 无关的服务。

2021.02.10,OpenTelemetry 的 tracing spec 达到 1.0 版本 (link),基于这个里程碑,笔者对 OpenTelemetry 进行了探索,判断在可观测性领域带来的价值和发展前景。

下面给出笔者对 OpenTelemetry 的理解,抛砖引玉。由于笔者能力有限,理解不当的地方请大家指正。

OpenTelemetry 是什么?

从官方 What is OpenTelemetry? 可了解到:

OpenTelemetry is a set of APIs, SDKs, tooling and integrations that are designed for the creation and management of telemetry data such as traces, metrics, and logs.

The project provides a vendor-agnostic implementation that can be configured to sent telemetry data to the backend(s) of your choice. It supports a variety of popular open-source projects including Jaeger and Prometheus.

OpenTelemetry 是一组标准和工具的集合,旨在管理观测类数据,如 trace、metrics、logs 等 (未来可能有新的观测类数据类型出现)。

OpenTelemetry 提供与 vendor 无关的实现,根据用户的需要将观测类数据导出到不同的后端,如开源的 Prometheus、Jaeger 或云厂商的服务中。

那么 OpenTelemetry 不是什么?从官方描述可以看出:

OpenTelemetry is not an observability back-end like Jaeger or Prometheus. Instead, it supports exporting data to a variety of open-source and commercial back-ends. It provides a pluggable architecture so additional technology protocols and formats can be easily added.

即 OpenTelemetry 不提供与可观测性相关的后端服务,这类后端服务通常提供的是存储、查询、可视化等服务。

通过下述抽象图可以简单理解 OpenTelemetry 的工作范围:

1.png

OpenTelemetry 面对的问题域是什么?

从 wikipedia: Observability 可理解到 可观测性 的定义:

In control theory, observability is a measure of how well internal states of a system can be inferred from knowledge of its external outputs.

Consider a physical system modeled in state-space representation. A system is said to be observable if, for any possible evolution of state and control vectors, the current state can be estimated using only the information from outputs (physically, this generally corresponds to information obtained by sensors). In other words, one can determine the behavior of the entire system from the system's outputs. On the other hand, if the system is not observable, there are state trajectories that are not distinguishable by only measuring the outputs.

简单表述为,可观测性是一种方法,通过系统的外部输出推导出系统内部的状态。

下图简化了系统的组成和系统间的交互:

2.png

从上述交互图可了解到,系统的交互行为有如下几种形态:

  • 系统内部

    • 组件功能闭环,不与其他组件或系统交互
    • 组件之间交互
  • 系统之间

    • 系统和系统之间进行交互

这样,若想通过系统的外部输出了解系统的状态,就需要两种形态的信息:

  • 组件闭环的信息
  • 组件间或系统间流动的信息

第一种形态通常可通过 logs 或 metrics 表征,第二种形态就需要 trace 表征,在流动的信息中增加标记。

对于 logs 和 metrics 的区别,可通过它们的操作方法进行理解。

再进一步抽象,可观测性涉及到如下问题:

  • 观测数据的数据模型
  • 观测数据的采集
  • 观测数据的处理
  • 观测数据的导出
  • 观测数据的使用
  • etc.

上述即是 OpenTelemetry 面对的问题域及具体的问题,且将具体的问题限定在:

  • 观测数据的数据模型
  • 观测数据的采集
  • 观测数据的处理
  • 观测数据的导出

OpenTelemetry 的解决方案是什么?

OpenTelemetry 通过 Spec 规范了观测数据的数据模型以及采集、处理、导出方法,包括 trace、metrics、logs (未来不排除会有新的类型),参见 opentelemetry-specification。

同时为了方便使用,通过 protobuf 来描述,参见opentelemetry-proto。

基于 Spec,OpenTelemetry 面向观测数据的生成和处理,做了如下的努力:

  • 为了方便开发者使用,提供了语言相关的 SDK,如 opentelemetry-go、opentelemetry-java、opentelemetry-js 等,所有支持的开发语言可参见 官方文档
  • 为了方便可观测数据的采集、处理、导出,提供了通过配置管理的 Collector 服务,如对接开源项目的 opentelemetry-collector、对接第三方 vendor 的 opentelemetry-collector-contrib

通过下图可直观理解 OpenTelemetry 的组件和工作流:

3.png

OpenTelemetry 的历史是什么?

从 A brief history of OpenTelemetry (So Far) 可简单了解到,OpenTelemetry 是由两个开源项目合并组成的:

  • OpenCensus

    • 面向 trace 和 metrics 进行数据模型标准化,并提供采集、处理、导出的工具
  • OpenTracing

    • 面向 trace 进行数据模型标准化,并提供采集、处理、导出的工具

2019 年 5 月,两个开源项目合并,官方宣布开源 OpenTelemetry 项目。

2021.02,trace spec 达到 1.0 版本,根据官方的成熟度模型 (link),目前 trace 的 spec 已经达到 stable 级别,metrics 达到了 beta 级别,logs 当前还处在 alpha 级别:

4.png

OpenTelemetry 的前景如何?

自 OpenTelemetry 推出以来,有越来越多的厂商开始关注和贡献。

从 opentelemetry-collector-contrib 可看出来,厂商的关注重点在于 exporter 部分,将观测数据便利导入到自身的服务中,其中已经包含阿里云自身的 SLS 产品:

5.png

对于 receiver 和 processor 环节,相信厂商也会逐步投入更多的精力,如:

  • 通过 receiver 和 exporter 的配合,形成观测数据的处理 workflow
  • 通过 processor,在观测数据存储前进行规范化处理

对于多云场景,OpenTelemetry 定义的观测数据模型、采集/处理/导出 标准,将有利于用户通过一套可观测性标准对接多种云厂商,避免 vendor 锁定。

即使是面向单一的云 (如云厂商内部的服务),也不可避免会考虑未来进行开源、与外部共建等,使用社区的可观测性标准可以降低开源成本。同时,可观测性的理念、标准、技术在不断迭代,通过跟进社区,可以更好使用到社区带来的技术红利和影响力。

因此,无论是面对多云场景还是单一的云厂商,采用业界的可观测性标准都是很有必要。

OpenTelemetry 如何使用?

核心概念

OpenTelemetry 中的概念比较多,这里列举些常见的概念,方便进行理解:

  • 观测数据相关

    • Signal

      • 观测数据类型,如 trace、metrics、logs
    • Instrument

      • 可认为是某种 Signal 的实例
  • OpenTelemetry 自身项目相关

    • API

      • OpenTelemetry Spec 的形式化描述,如 opentelemetry-proto
    • SDK

      • 面向不同开发语言的 API 实现
    • Contrib Packages

      • 与具体的开源项目或 vendor 产品相关的实现
  • 使用的组件相关

    • Components

      • Receivers

        • 接收观测数据的组件
      • Processors

        • 处理接收到的观测数据的组件
      • Exporters

        • 将观测数据导出的组件,如导出到开源项目 Prometheus 或云厂商服务中
      • Extensions

        • 不参与观测数据的处理,辅助相关处理组件的运行,如健康检测、服务发现等
      • Services

        • 表征配置的哪些组件需要运行,如 receivers / processors / exporters / extentions
      • Collector

        • 可认为是 receivers / processors / exporters / extentions / services 组成的整体
      • Controller

        • 用于开发者开发的应用中,作用可等同于 receivers / processors / exporters 组成的整体

golang demo

笔者写了一个 golang demo,用来演示:

  • APP 中如何生成 trace / metrics 数据
  • APP 中使用 stdout controller 来采集、处理、打印 trace / metrics 数据
  • APP 中通过 otlp controller 采集 trace / metrics 数据,并导出到外部运行的 collector 中
  • 本地独立运行一个 collector 服务,接收 otlp controller 推送的 trace / metrics 数据,并将其导出到本地文件和阿里云 SLS 中

demo 参见:https://github.com/flyer103/otel-demo

具体的使用方法参见 demo 的 README.md,下述简单描述下思路。

cmd/app/server.go 文件描述了 OpenTelemetry 的使用逻辑,分成两部分:

  1. 初始化并运行全局的 controller,用来在 APP 内部 receive / process / export 观测数据,或将 APP 内的观测数据推送到外部
  2. APP 内按照业务需求生成 metrics 和 trace

6.png

pkg/ 目录下分别封装了 controller 和 signal (trace / metrics),具体的实现不再赘述:

7.png

yaml/ 下提供了一个将观测数据导出到 SLS 的示例,包括了用于接收观测数据的 receiver (client 端可通过 grpc client 将数据推送到该 receiver)、用于观测数据转换处理的 processors、用于数据导出的 exporters、用于开启组件的 services:

8.png

畅想

通过上述分析,大家对 OpenTelemetry 的概念、问题域、解决方案和使用方法会有一个直观的体会,通过上述 golang demo 可以快速上手。

对于开发者,基于 OpenTelemetry 可通过一套标准的方案进行 trace / metrics / logs 的生成和导出,降低开发过程中对不同类型观测数据的使用成本,也降低对接不同后端服务的成本,如开源项目 Prometheus 或第三方云厂商的服务。

对于 SRE,基于 OpenTelemetry 可为观测数据提供一套标准的采集、处理、导出流程,并在处理环节根据团队需求规范化观测数据,便于后续采用标准化的方案使用观测数据,如监控、告警服务。

同时,不论对于开发者还是 SRE,均可以通过社区的力量持续迭代对可观测性问题域的理解,吸收社区的技术红利,并将生产中产生的最佳实践回馈社区,更好推动可观测性领域的发展。

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

涨姿势 | 一文读懂备受大厂青睐的ClickHouse高性能列存核心原理

简介: 本文尝试解读ClickHouse存储层的设计与实现,剖析它的性能奥妙 作者:和君 引言 ClickHouse是近年来备受关注的开源列式数据库,主要用于数据分析(OLAP)领域。目前国内各个大厂纷纷跟进大规模使用&…

xp正版验证补丁_实操web漏洞验证——IIS HTTP.sys 整数溢出漏洞

一、漏洞描述Http.sys 是一个位于 Windows 操作系统核心组件,能够让任何应用程序通过它提供的接口,以 Http 协议进行信息通讯。微软在 Windows 2003 Server 里引进了新的 HTTP API 和内核模式驱动 Http.sys,目的是使基于 Http 服务的程序更有…

普通公司编程水平与BAT大厂相比,差距到底有多大?

前言BAT的牛人多,普通人也多,虽然他们不是每个人都能达到令人仰望的技术水平,但毕竟平台高,所以眼光会变得宽阔;代码要求更为严格,所以普通的程序员也会被逼变得更优秀;身边的牛人多&#xff0c…

mindi linux 使用教程,Linux使用入门教程之tuned

tuned是RHEL6推出的调优工具,可以简单、动态的调整系统。默认的tuned软件包包含9个调优配置文件,对laptop、desktop、server系统的省电策略、磁盘调度算法、缓存、内存脏页回写等等的调节。tuned包安装后有两个服务,tuned和ktune,…

货运物流移动端解决方案:为货运物流行业打造高性能、高粘性的“双端”触点

简介: 在业务碎片化的情景下,怎么通过平台做整合,建立你的专业化运维池? 从 2020 年发展网络货运以来,在互联网和大数据的协作下,传统的物流企业逐渐转向信息化模式,在政策的不断推动下&#xf…

互联网泛娱乐直播安全的解决之道

简介: 阿里云的CDN和视频云产品在直播安全场景下有广泛的应用,阿里巴巴集团的淘宝、优酷等业务的直播正是基于这些产品底层能力,构建了强大的直播安全体系。这个基于阿里巴巴集团自身业务实践打磨出来的架构设计,也被众多上云客户…

wps office2019PC版和Mac版_学用系列WPS教育版的“十八般武艺”

相信不少朋友都在使用wps进行办公学习,但相信不少教师学生肯定不知道其实WPS还很用心提供教育版,里面有不少实用且好用的学习工具可以让我们的学习如虎添翼。今天胖胖老师就为大家介绍一下新版本WPS教育版的“十八般武艺”,欢迎大家一起来尝鲜…

只因“薪水过高”!被欠薪三个月后遭解雇,程序员删库反击

译者 | 弯月 责编 | 王晓曼出品 | 程序人生 (ID:coder _life)非技术出身的公司创始人往往并不了解开发人员的价值。如果他们的产品是科技产品,那么开发人员就是公司的燃料。我从一位同事那里听到了这个故事。故事的主人公叫做小…

linux模拟内存数据落盘,Linux:保证数据安全落盘

背景在很多IO场景中,我们经常需要确保数据已经安全的写到磁盘上,以便在系统宕机重启之后还能读到这些数据。但是我们都知道,linux系统的IO路径还是很复杂的,分为很多层,每一层都可能会有buffer来加速IO读写。同时&…

阿里云高级技术专家周哲:阿里云边缘云原生应用实践

简介: 为什么需要边缘云原生?边缘云原生的技术特性和优势是什么?它可以为行业提供哪些关键能力?又有哪些场景适合边缘云原生呢?在MEC全球应用开发者大会的“MEC开放论坛”上,阿里云高级技术专家周哲进行了《…

dataframe 如何选中某列的一行_PySpark和SparkSQL基础:如何利用Python编程执行Spark(附代码)

作者:Pinar Ersoy翻译:孙韬淳校对:陈振东本文约2500字,建议阅读10分钟本文通过介绍Apache Spark在Python中的应用来讲解如何利用PySpark包执行常用函数来进行数据处理工作。Apache Spark是一个对开发者提供完备的库和API的集群计算…

重磅官宣:Nacos2.0 发布,性能提升 10 倍

简介: 继 Nacos 1.0 发布以来,Nacos 迅速被成千上万家企业采用,并构建起强大的生态。但是随着用户深入使用,逐渐暴露一些性能问题,因此我们启动了 Nacos 2.0 的隔代产品设计,时隔半年我们终于将其全部实现&…

deepin linux 2014 硬盘安装教程,Linux Deepin的硬盘安装

于是装了,问题来了,即使执行了sudo umount -l /cdrom,也不能直接把原来的个人文件分区挂成/home,因为liveCD的内容还放在这个上面(想不通,我只是挂载,又不格式化,怎么就行了?新氧好像…

一站式云原生智能告警运维平台——SLS新版告警发布!

简介: 本文介绍什么是云原生可观测性需求以及告警限制,介绍一站式云原生智能告警运维平台——SLS新版告警。 前言 本篇是SLS新版告警系列宣传与培训的第一篇,后续我们会推出20系列直播与实战培训视频,敬请关注。 系列目录&#…

ansible 修改文件变量_基于ansible的批量配置生成

背景网络运维,我们有很多时间是在准备配置的路上,咱们之前也讲过,从脑海中或者是从自己的宝藏笔记中找出模板,一顿操作猛如虎,Ctrl C Ctrl V。这个过程是十分危险的,因为人不是机器,肯定会出错&…

Fluid — 云原生环境下的高效“数据物流系统”

简介: 为了解决大数据、AI 等数据密集型应用在云原生计算存储分离场景下,存在的数据访问延时高、联合分析难、多维管理杂等痛点问题,南京大学 PASALab、阿里巴巴、Alluxio 在 2020 年 9 月份联合发起了开源项目 Fluid。Fluid 本质上是一个云原…

普通大学生的 Java 开发能力到什么水平才能进大厂?

对于刚开始接触编程的同学来说,选择一门合适的编程语言非常重要。Java一直以来都是被广泛使用的语言,其服务端开发占比90%,83次在TIOBE排行第一,是很多程序员的首选语言。在发展前景方面,Java的就业范围很广&#xff0…

delphi7 如何判定dbgrid两行重复_教你如何在服装上加入好看的毛线刺绣花边

有时候一件旧衣服我们给它添加一些新的元素,会产生意外惊喜的效果。今天,我们就来学学如何用毛线在衣服上刺绣花边,让衣服变得更加漂亮的方法吧!在本教程中,我们使用了一些零头羊毛线,11号木针和用于刺绣的…

阿里的 RocketMQ 如何让双十一峰值之下 0 故障?

简介: 2020 年双十一交易峰值达到 58.3 W 笔/秒,消息中间件 RocketMQ 继续数年 0 故障丝般顺滑地完美支持了整个集团大促的各类业务平稳。 作者 | 愈安 来源 | 阿里巴巴云原生公众号 2020 年双十一交易峰值达到 58.3 W 笔/秒,消息中间件 Roc…

英特尔携手谷歌云加速最新虚拟机;谷歌云平台下调抽成比例;Hitachi Vantara推出全新云成本优化服务...

NEWS新闻回顾GitLab 将上市随着收入持续增长和亏损扩大,DevOps 宠儿 GitLab 终于申请了首次公开募股 (IPO)。GitLab 一直致力于成为开发人员的一站式商店,与 GitHub(2018 年被微软以 75 亿美元高价收购)和其他 DevOps 公司竞争。在…