链路追踪详解(四):分布式链路追踪的事实标准 OpenTelemetry 概述
目录
OpenTelemetry 是什么?
OpenTelemetry 的起源和目标
OpenTelemetry 主要特点和功能
OpenTelemetry 的核心组件
OpenTelemetry 的工作原理
OpenTelemetry 的特点
OpenTelemetry 的应用场景
小结
OpenTelemetry 是什么?
OpenTelemetry 是一个为实现可观测性的开源的框架和工具集,用于创建和管理遥测数据,例如 traces,、metrics 和 logs,旨在提供统一的解决方案来满足分布式系统的可观察性需求。OpenTelemetry 整合了 OpenCensus 和 OpenTracing 的功能,并扩展了更多的度量指标和追踪信息采集能力,使分布式系统的可观测性变得更加简单、可扩展和可互操作。OpenTelemetry 与提供可观测性产品的供应商无关,可以与各种各样的可观测性后端一起使用,包括像 Zipkin、Jaeger、Prometheus 等开源产品,以及其他商业产品。OpenTelemetry 也是是云原生计算基金会(CNCF)的一个托管项目。
OpenTelemetry 的起源和目标
随着云计算、微服务架构和日益复杂的业务需求的兴起,对可观测性的需求也越来越大,可观测性是通过检查分析系统的输出内容来了解其内部状态的能力。
最初,开发者使用日志来解决这个问题,但很快发现通过日志不能够清晰地看到一次请求是如何被处理和流转的。为了解决这些问题,Google 开发了 Dapper 布式系统追踪的框架,Dapper 的思想启发了很多公司和开源项目,如 OpenTracing 和 OpenCensus,它们提供了标准化的 API 和库,以帮助开发者在他们的应用中实现分布式链路追踪和指标收集。
然而,随着这两个项目的发展,社区意识到存在一些重叠和不一致的地方。因此,OpenTracing 和 OpenCensus 合并为 OpenTelemetry,以创建一个统一的、更强大的工具集,不仅包含了 traces 和 metrics,还包括了 logs。
在软件系统中,可以通过检查遥测数据(包括 traces,、metrics 和 logs)了解系统的内部状态。为了实现系统的可观测性,必须对系统进行检测。也就是说,代码需要能产生 traces、metrics 和 logs,并将这些数据发送到可观测性后端。
OpenTelemetry 主要特点和功能
- 统一的观察性标准:OpenTelemetry 提供了一套统一的观测性标准,使得不同厂商和工具之间的数据可以相互兼容和共享,有助于减少开发和运维人员在系统集成方面的成本和难度。
- 丰富的度量指标和追踪信息:OpenTelemetry 支持采集丰富的度量指标和追踪信息,包括跟踪数据(traces)、指标数据(metrics)、日志数据(logs)。这些数据可以用于分析系统的性能、行为和问题,帮助开发人员更好地了解系统运行状况。
- 灵活的数据采集和导出:OpenTelemetry 支持多种数据采集和导出的方式,包括直接从应用程序中采集数据、从日志文件中导入数据、或者通过代理(agent)从远程系统中采集数据。还提供了对常见数据格式和协议的支持,如 Prometheus、Zipkin、Jaeger 等。
- 可扩展的插件式架构:OpenTelemetry 采用插件式架构,允许用户根据需要定制和扩展其功能。开发者可以通过编写插件来支持新的数据格式、导出工具或传输协议。这种可扩展性使得 OpenTelemetry 能够适应不同的使用场景和需求。
- 开源社区和生态系统:OpenTelemetry 是一个开源项目,拥有活跃的社区和生态系统。开发者可以参与开源项目的开发、贡献代码、解决问题、讨论使用经验等。此外,OpenTelemetry 还提供了丰富的文档、教程和示例,帮助用户快速上手和使用。
OpenTelemetry 的核心组件
OpenTelemetry 主要由以下几个核心组件构成:
- API:定义了收集遥测数据的接口,使开发者能够编写可插拔的代码,以便在不同的遥测系统之间切换,而无需更改应用程序的主体代码。
- SDK:是对 API 的实现,用来实现对遥测数据的收集、处理和导出。SDK 通常是可配置的,允许开发者调整数据收集的粒度和性能影响。
- Instrumentation Libraries:这些库提供了对常见框架和库的自动插桩支持,以便开发者无需手动编写大量的遥测代码。
- Collector:是一个独立的服务,可以接收、处理和导出遥测数据。可以部署为代理或作为后端服务的一部分,以接收来自应用程序的遥测数据。
- Exporters:借助不同的 Exporter 可以使 SDK 或 Collector 将遥测数据导出到各种后端系统,如 Prometheus、Jaeger、Zipkin 等。
OpenTelemetry 的工作原理
OpenTelemetry 的工作原理可以分为以下几个步骤:
- 自动插桩:开发者通过将 OpenTelemetry 的 Instrumentation Libraries 集成到自己的应用程序中,自动地在代码的关键路径上收集遥测数据。
- 数据收集与处理:借助 Instrumentation Libraries 收集到相应数据后,通过 SDK 进行进一步的处理,如聚合、过滤和批处理,以优化性能和数据传输。
- 数据导出:处理后的数据通过 Exporters 发送到指定的后端系统,可以是专门的链路追踪系统、时序数据库或者日志系统。
OpenTelemetry 的特点
OpenTelemetry 的设计考虑了现代应用的需求:
- 开源和跨语言:支持多种编程语言和框架,适用于多样化的开发环境。
- 可扩展性:通过 Exporters 和自定义 SDK 配置,可以轻松地适配不同的后端系统。
- 端到端追踪:提供了在复杂的分布式系统中跟踪请求的能力,对于微服务架构来说也非常实用。
- 性能考量:SDK 提供了数据采样和处理的功能,将对应用性能的影响降到最低。
OpenTelemetry 的应用场景
OpenTelemetry 可以应用于多种场景,包括但不限于:
- 微服务监控:在微服务架构中,可以使用 OpenTelemetry 来跟踪跨服务的请求,并收集服务的性能指标。
- 云原生应用:为 Kubernetes 和其他云原生技术提供了强大的监控和追踪能力。
- 故障排查:当出现性能下降或请求错误时,OpenTelemetry 可以帮助快速定位问题。
小结
OpenTelemetry 代表了分布式链路追踪和监控的未来方向,目标是简化和统一遥测数据的收集和管理,随着社区的不断发展和技术的成熟,OpenTelemetry 无疑将在现代软件开发和运维中发挥越来越重要的作用。
相关文章:

链路追踪详解(四):分布式链路追踪的事实标准 OpenTelemetry 概述
目录 OpenTelemetry 是什么? OpenTelemetry 的起源和目标 OpenTelemetry 主要特点和功能 OpenTelemetry 的核心组件 OpenTelemetry 的工作原理 OpenTelemetry 的特点 OpenTelemetry 的应用场景 小结 OpenTelemetry 是什么? OpenTelemetry 是一个…...

Node.js 工作线程与子进程:应该使用哪一个
Node.js 工作线程与子进程:应该使用哪一个 并行处理在计算密集型应用程序中起着至关重要的作用。例如,考虑一个确定给定数字是否为素数的应用程序。如果我们熟悉素数,我们就会知道必须从 1 遍历到该数的平方根才能确定它是否是素数ÿ…...
python matplotlib 三维图形添加文字且不随图形变动而变动
要在三维图形中添加文字并使其不随图形变动而变动,可以使用 annotate() 方法。这个方法可以在三维图形中添加文字,并且可以指定文字的位置、对齐方式和字体大小等属性。 下面是一个示例代码,演示如何在三维图形中添加文字: impo…...
Ubuntu设置kubelet启动脚本关闭swap分区
查看swap分区 swapon -s打开swap分区 swapon -a查看/etc/fstab下所有固化的swap分区,注释 vi /etc/fstab修改kubelet.conf文件 vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf添加 ExecStartPre/sbin/swapoff -a生效 systemctl daemon-reload sys…...
MySQL数据库存储
MySQL数据库存储 MySQL数据库简介MySQL开发环境MySQL安装图形化界面工具Navicat使用 表的操作表的概念3.2 创建表3.3 修改表 数据的操作-增删改查4.1 增加数据4.2 删除数据4.3 修改数据4.4 查询数据4.4.1 基础查询4.4.2 分组查询和聚合函数4.4.4 having语句4.4.5 排序4.5 多表联…...

verilog语法进阶,时钟原语
概述: 内容 1. 时钟缓冲 2. 输入时钟缓冲 3. ODDR2作为输出时钟缓冲 1. 输入时钟缓冲 BUFGP verilog c代码,clk作为触发器的边沿触发,会自动将clk综合成时钟信号。 module primitive1(input clk,input a,output reg y); always (posed…...

案例069:基于微信小程序的计算机实验室排课与查询系统
文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…...

C语言:将三个数从大到小输出
#include<stdio.h> int main() {int a 0;int b 0;int c 0;printf("请输入abc的值:");scanf_s("%d%d%d", &a, &b, &c);if (b > a){int tmp a;a b;b tmp;}if (c > a){int tmp a;a c;c tmp;}if (b < c){int t…...
基于Hadoop的铁路货运大数据平台设计与应用
完整下载:基于Hadoop的铁路货运大数据平台设计与应用 基于Hadoop的铁路货运大数据平台设计与应用 Design and Application of Railway Freight Big Data Platform based on Hadoop 目录 目录 2 摘要 3 关键词 4 第一章 绪论 4 1.1 研究背景 4 1.2 研究目的与意义 5 …...
Java基础题2:类和对象
1.下面代码的运行结果是() public static void main(String[] args){String s;System.out.println("s"s);}A.代码编程成功,并输出”s” B.代码编译成功,并输出”snull” C.由于String s没有初始化,代码不能…...
冒泡排序学习
冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复地交换相邻的元素来排序。具体实现如下: 1. 从待排序的数组中的第一个元素开始,依次比较相邻的两个元素。 2. 如果前一个元素大于后一个元素,则交换…...

LeetCode(65)LRU 缓存【链表】【中等】
目录 1.题目2.答案3.提交结果截图 链接: LRU 缓存 1.题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 k…...

网站提示“不安全”
当你在浏览网站时,有时可能会遇到浏览器提示网站不安全的情况。这通常是由于网站缺乏SSL证书所致。那么,从SSL证书的角度出发,我们应该如何解决这个问题呢? 首先,让我们简单了解一下SSL证书。SSL证书是一种用于保护网站…...

【Linux】驱动
驱动 驱动程序过程 系统调用 用户空间 内核空间 添加驱动和调用驱动 驱动程序是如何调用设备硬件 驱动 在计算机领域,驱动(Driver)是一种软件,它充当硬件设备与操作系统之间的桥梁,允许它们进行通信和协同工作。驱动程…...
Java研学-HTML
HTML 1 介绍 HTML(Hypertext Markup Language) 超文本标记语言。静态网页,用于在浏览器上显示数据 超文本: 指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。 标记语言: 使用 < > 括起来的语言 超文本标记语言的结构, 包括“头”部分&am…...

SpringBoot之响应的详细解析
2. 响应 前面我们学习过HTTL协议的交互方式:请求响应模式(有请求就有响应) 那么Controller程序呢,除了接收请求外,还可以进行响应。 2.1 ResponseBody 在我们前面所编写的controller方法中,都已经设置了…...

redis:四、双写一致性的原理和解决方案(延时双删、分布式锁、异步通知MQ/canal)、面试回答模板
双写一致性 场景导入 如果现在有个数据要更新,是先删除缓存,还是先操作数据库呢?当多个线程同时进行访问数据的操作,又是什么情况呢? 以先删除缓存,再操作数据库为例 多个线程运行的正常的流程应该如下…...

智能优化算法应用:基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.动物迁徙算法4.实验参数设定5.算法结果6.…...
illuminate/database 使用 五
之前文章: illuminate/database 使用 一-CSDN博客 illuminate/database 使用 二-CSDN博客 illuminate/database 使用 三-CSDN博客 illuminate/database 使用 四-CSDN博客 一、原生查询 1.1 原理 根据之前内容调用执行的静态类为Illuminate\Database\Capsule\M…...
武汉灰京文化:益智游戏的教育与娱乐完美结合
随着游戏技术的不断发展,益智类游戏正经历着一场革命性的变革,逐渐融合了教育和娱乐的元素。创新的设计和互动方式使得许多益智游戏成为了知识传递和技能训练的有效工具,同时保持了娱乐体验的趣味性。这种教育与娱乐的完美结合不仅使益智游戏…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...

ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...