OpenTelemetry架构介绍
OpenTelemetry: 经得起考验的工具
摘自:https://blog.newrelic.com/product-news/what-is-opentelemetry/
什么是OpenTelemetry?
OpenTelemetry合并了OpenTracing和OpenCensus项目,提供了一组API和库来标准化遥测数据的采集和传输。OpenTelemetry提供了一个安全,厂商中立的工具,这样就可以按照需要将数据发往不同的后端。
OpenTelemetry项目由如下组件构成:
- 推动在所有项目中使用一致的规范
- 基于规范的,包含接口和实现的APIs
- 不同语言的SDK(APIs的实现),如 Java, Python, Go, Erlang等
- Exporters:可以将数据发往一个选择的后端
- Collectors:厂商中立的实现,用于处理和导出遥测数据
术语
如果刚接触Opentelemetry,那么需要了解如下术语:
Traces:记录经过分布式系统的请求活动,一个trace是spans的有向无环图
Spans:一个trace中表示一个命名的,基于时间的操作。Spans嵌套形成trace树。每个trace包含一个根span,描述了端到端的延迟,其子操作也可能拥有一个或多个子spans。
Metrics:在运行时捕获的关于服务的原始度量数据。Opentelemetry定义的metric instruments(指标工具)如下。Observer支持通过异步API来采集数据,每个采集间隔采集一个数据。
ame Synchronous Adding Monotonic Counter Yes Yes Yes UpDownCounter Yes Yes No ValueRecorder Yes No No SumObserver No Yes Yes UpDownSumObserver No Yes No ValueObserver No No No Context:一个span包含一个span context,它是一个全局唯一的标识,表示每个span所属的唯一的请求,以及跨服务边界转移trace信息所需的数据。OpenTelemetry 也支持correlation context,它可以包含用户定义的属性。correlation context不是必要的,组件可以选择不携带和存储该信息。
Context propagation:表示在不同的服务之间传递上下文信息,通常通过HTTP首部。 Context propagation是Opentelemetry系统的关键功能之一。除了tracing之外,还有一些有趣的用法,如,执行A/B测试。OpenTelemetry支持通过多个协议的Context propagation来避免可能发生的问题,但需要注意的是,在自己的应用中最好使用单一的方法。
OpenTelemetry的好处
通过将OpenTracing 和OpenCensus 合并为一个开放的标准,OpenTelemetry提供了如下便利:
- 选择简单:不必在两个标准之间进行选择,OpenTelemetry可以同时兼容 OpenTracing和OpenCensus。
- 跨平台:OpenTelemetry 支持各种语言和后端。它代表了一种厂商中立的方式,可以在不改变现有工具的情况下捕获并将遥测数据传输到后端。
- 简化可观测性:正如OpenTelemetry所说的"高质量的观测下要求高质量的遥测"。希望看到更多的厂商转向OpenTelemetry,因为它更方便,且仅需测试单一标准。
如何使用OpenTelemetry
OpenTelemetry APIs 和SDKs有很多快速使用指南和文档帮助快速入门,如Java快速指南展示了如何获取跟踪程序、创建spans、添加属性,以及跨不同spans传递context。
将OpenTelemetry trace APIs插装到应用程序后,就可以使用预先编译好的OpenTelemetry 库中的exporters将trace数据发送到观测平台,如New Relic或其他后端。
metrics和logs的规范仍在开发阶段,但一旦完成,它们将在实现OpenTelemetry的主要目标中发挥重要作用:确保库和框架包含所有内置的遥测数据类型,使开发人员无需进行检测即可提取遥测数据。
OpenTelemetry 架构组件
由于OpenTelemetry旨在成为一个为厂商和可观察性后端提供的跨语言框架,因此它非常灵活且可扩展,但同时也很复杂。OpenTelemetry的默认实现中,其架构可以分为如下三部分:
- OpenTelemetry API
- OpenTelemetry SDK,包括
- Tracer pipeline
- Meter pipeline
- shared Context layer
- Collector

OpenTelemetry API
应用开发者会使用 Open Telemetry API对其代码进行插桩,库作者会用它(在库中)直接编写桩功能。API不处理操作问题,也不关心如何将数据发送到厂商后端。
API分为四个部分:
- A Tracer API
- A Metrics API
- A Context API
- 语义规范

Tracer API
Tracer API 支持生成spans,可以给span分配一个traceId,也可以选择性地加上时间戳。一个Tracer会给spans打上名称和版本。当查看数据时,名称和版本会与一个Tracer关联,通过这种方式可以追踪生成sapan的插装库。
Metric API
Metric API提供了多种类型的Metric instruments(桩功能),如Counters 和Observers。Counters 允许对度量进行计算,Observers允许获取离散时间点上的测量值。例如,可以使用Observers 观察不在Span上下文中出现的数值,如当前CPU负载或磁盘上空闲的字节数。
Context API
Context API 会在使用相同"context"的spans和traces中添加上下文信息,如W3C Trace Context, Zipkin B3首部, 或 New Relic distributed tracing 首部。此外该API允许跟踪spans是如何在一个系统中传递的。当一个trace从一个处理传递到下一个处理时会更新上下文信息。Metric instruments可以访问当前上下文。
语义规范
OpenTelemetry API包含一组语义规范,该规范包含了命名spans,属性以及与spans相关的错误。通过将该规范编码到API接口规范中,OpenTelemetry 项目保证所有的instrumentation(不论任何语言)都包含相同的语义信息。对于希望为所有用户提供一致的APM体验的厂商来说,该功能非常有价值。
OpenTelemetry SDK
OpenTelemetry SDK是OpenTelemetry API的实现。该SDK包含三个部分,与上面的API类似:Tracer, 一个Meter, 和一个shared Context layer

理想情况下,SDK应该满足99%的标准使用场景,但如果有必要,可以自定义SDK。例如,可以在Tracer pipeline实现中自定义除核心实现(如何与共享上下文层交互)外的其他任何内容,如Tracer pipeline使用的采样算法。
Tracer pipeline

当配置SDK时,需要将一个或多个SpanProcessors与Tracer pipeline的实现进行关联。SpanProcessors会查看spans的生命周期,然后在合适的时机将spans传送到一个SpanExporter。SDK中内置了一个简单的SpanProcessor,可以将完成的spans直接转发给exporter 。
SDK还包含一个批处理实现,按照可配置的间隔分批次转发已完成的spans。但由于SpanProcessor的实现可以接受插件,因此可以在完成自己的实现后赋予其自定义的行为。例如,如果遥测后端支持观测"正在进行的"spans,那么可以创建一个SpanProcessor实现,将所有span状态变更涉及的spans转发出去。
Tracer pipeline的最后是SpanExporter。一个exporter的工作很简单:将OpenTelemetry 的spans转换为遥测后端要求的表达格式,然后转发给该后端即可。提供定制化的SpanExporter是遥测厂商参与OpenTelemetry生态系统的最简单方式。
Meter pipeline

Meter pipeline
Meter pipeline要远比Tracer pipeline负载,而metrics也远比span复杂。下面的描述基于java SDK实现,可能跨语言会有所不同。
Meter pipeline会创建和维护多种类型的metric工具,包括Counters 和Observers。每个工具的实例都需要以某种方式聚合。默认情况下,Counters通过累加数值进行聚合,而Observers通过采集记录到的最后一个数值进行聚合。所有的工具默认都有一个聚合。
(在本文编写之际,metric工具的自定义聚合配置仍然在起草阶段)。
不同语言的Meter pipeline的实现会有所不同,但所有场景下,metric的聚合结果都会被传递到MetricExporter。与spans类似,供应商可以提供自己的exporter,将由metric aggregators生成的聚合数据转换为遥测后端所需的类型。
OpenTelemetry支持两种类型的exporter:基于exporters的"push",即exporter按照时间间隔将数据发送到后端;基于exporters的"pull",即后端按照需要请求数据。New Relic 是一个基于push的后端,而Prometheus是一个基于push的后端。
shared Context layer
shared Context layer位于Tracer和Meter pipeline之间,允许在一个执行的span的上下文中记录所有非observer的metric。可以使用propagators自定义Context,在系统内外传递span上下文。OpenTelemetry SDK提供了一个基于W3C Trace Context规范的实现,但也可以根据需要来包含 Zipkin B3 propagation等。
Collector

下面对collector的描述来自官方文档
OpenTelemetry Collector提供了一种厂商中立的实现,无缝地接收,处理和导出遥测数据。此外,它移除了为支持发送到多个开源或商业后端而使用的开源可观察性数据格式(如Jaeger,Prometheus等)的运行,操作和维护。
OpenTelemetry collector可以扩展或嵌入其他应用中。下面应用扩展了collector:
如果要创建自己的collector发行版,可以参见这篇blog: Building your own OpenTelemetry Collector distribution。
如果要构建自己的发行版,可以使用OpenTelemetry Collector Builder 。
OpenTelemetry架构介绍的更多相关文章
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- 从零开始编写自己的C#框架(5)——三层架构介绍
三层架构对于开发人员来说,已经是司空见惯了,除了大型与超小型项目外,大多都是这种架构来进行开发. 在这里为初学者们简单介绍一下三层架构: (下面内容摘自<趣味理解:三层架构与养猪—<.NE ...
- SOA架构介绍和理解
SOA架构介绍和理解 SOA的正确方法论及目标模型,其实SOA在实现架构落地上,需要考虑到对服务的组合,不断的重用现有的服务,让企业应用可以逐步集成,快速实现业务的迭代. 通过SOA架构分层将服务按照 ...
- MemSQL分布式架构介绍(一)
最近在了解MemSQL架构,看了些官方文档,在这里做个记录,原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ ...
- Apache Shiro 使用手册(一)Shiro架构介绍 - kdboy - ITeye技术网站
转载 原文地址 http://kdboy.iteye.com/blog/1154644 一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理 ...
- Apache Shiro 使用手册(一)Shiro架构介绍
一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户"登录": 授权 - ...
- MemSQL分布式架构介绍(二)
接上次的MemSQL分布式架构介绍(一),原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ 首先上张图,是我 ...
- 大型网站技术架构介绍--squid
一.大型网站技术架构介绍 1.pv高 ip高 并发量 2.大型网站架构重点 1. 高性能:响应时间,TPS,系统性能计数器.缓存,消息队列等. 高可用性High Availabilit ...
- Android_进化史和平台架构介绍
一.Android平台发展史 2008年9月,谷歌正式发布了Android 1.0系统,全球第一台Android设备HTC (G1) 2009年4月,谷歌正式推出了Android 1.5 ...
随机推荐
- Spring学习(四)IOC详解
一.简介 概念:控制反转是一种通过描述(在 Java 中可以是 XML 或者注解)并通过第三方(Spring)去产生或获取特定对象的方式.(被动创建) 优势: ① 降低对象之间的耦合 ② 我们不需要理 ...
- 刷题[CISCN2019 总决赛 Day2 Web1]Easyweb
解题思路 打开网页是这样一个登陆框,随机试了一下常见弱密钥,二次注入等.均是返回不同的猫咪图案 不同的id对应不同的猫咪图案.经测试,返回的id应该是无序,随机的.感觉这里有可能存在注入点,但是测试好 ...
- 一加云耳2和一加云耳z区别
[解码方式]:云耳Z采用的音源解码方式是AAC,云耳2使用的是APTX: [发声单元]:云耳Z采用的是动圈,云耳2采用的是动圈+动铁组合 [颜色]:云耳Z有4款颜色(宝蓝.薄荷绿.黑色.米白)云耳2有 ...
- CUMTCTF'2020 未完成 wp
Web babysqli burp抓包,发现有 的过滤,用/**/过滤空格. 报错注入 payload username=admin&password='/**/or/**/extractva ...
- 题目:写出一条SQL语句,查询工资高于10000,且与他所在部门的经理年龄相同的职工姓名。
create table Emp( eid char(20) primary key, ename char(20), age integer check (age > 0), did char ...
- 联赛模拟测试10 C. 射手座之日
题目描述 分析 方法一(线段树) 线段树维护的是以当前节点为左端点的区间的贡献 而区间的右端点则会从 \(1\) 到 \(n\) 逐渐右移 当我们把右端点从 \(i-1\) 的位置扩展到 \(i\) ...
- 【漏洞复现】PHPmyadmin 4.8.1后台Getshell新姿势
原文地址:https://mp.weixin.qq.com/s/HZcS2HdUtqz10jUEN57aog 早上看到群里在讨论一个新姿势,phpmyadmin后台getshell,不同于以往需要知道 ...
- 基于COCA词频表的文本词汇分布测试工具v0.1
美国语言协会对美国人日常使用的英语单词做了一份详细的统计,按照日常使用的频率做成了一张表,称为COCA词频表.排名越低的单词使用频率越高,该表可以用来统计词汇量. 如果你的词汇量约为6000,那么这张 ...
- spring-boot-route(十)多数据源切换
前面我们已经介绍了三种方式来操作数据库,在实际开发中,往往会出现一个服务连接多个数据库的需求,这时候就需要在项目中进行灵活切换数据源来完成多个数据库操作.这一章中,我们使用jdbcTemplate来学 ...
- 用cmd下载tp5.0版本
1.首先进入phpstudy的www目录 composer create-project topthink/think=5.0.* pt5.0的名字 --prefer-dist $ composer ...