链路追踪详解(四):分布式链路追踪的事实标准 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…...
武汉灰京文化:益智游戏的教育与娱乐完美结合
随着游戏技术的不断发展,益智类游戏正经历着一场革命性的变革,逐渐融合了教育和娱乐的元素。创新的设计和互动方式使得许多益智游戏成为了知识传递和技能训练的有效工具,同时保持了娱乐体验的趣味性。这种教育与娱乐的完美结合不仅使益智游戏…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
