OpenTelemetry-1.介绍

news2024/9/25 13:20:58

目录

1.是什么

2.为什么使用 OpenTelemetry

3.数据类型

Tracing

Metrics

Logging

Baggage

4.架构图

5.核心概念

6.相关开源项目

​编辑

7.分布式追踪的起源

8.百花齐放的分布式追踪

Zipkin

Skywalking

Pinpoint

Jaeger

OpenCensus

OpenTracing

9.Opentelemetry的诞生

10.Opentelemetry的目标


1.是什么

  • 开源的
  • 受到可观测领域行业领导者的采用和支持
  • 是一个 CNCF 孵化项目, 由 OpenTracing 和 OpenCensus 项目合并而成。
  • 与供应商无关的

OpenTelemetry 包括可观测性的三个支柱:追踪、指标和日志。(本文将重点关注追踪)

  • 分布式追踪是一种跟踪服务请求在分布式系统中从开始到结束的方法。
  • 指标是对一段时间内活动的测量,以便了解系统或应用程序的性能。
  • 日志是系统或应用程序在特定时间点发生的事件的文本记录。

  • OTLP 协议: OTLP 是 OpenTelemetry 中比较核心的存在, 在遥测数据及 Collector 之间制定了包括编码 (encoding)、传输 (transport)、传递 (delivery) 等协议。
  • Instrumentation: 采集器

以 Dapper 的定义作为基准, 一个标准的分布式 Trace 示例如下图所示。一个 Trace 是由 Span 构成的有向无环图 (DAG), Span 是一个最小粒度的调用, 既可以指代一个程序块执行, 也可以指代一次 HTTP 等应用协议的远程调用。 

2.为什么使用 OpenTelemetry

在云原生技术堆栈中, 分布式和多语言架构是常态。随着云计算、微服务架构和日益复杂的业务需求的兴起,越来越需要对软件和基础设施可观测性的需求。特别是在微服务架构中,每个请求最终可能会经过数个甚至数十个微服务)并在其间进行多次网络调用。在这种复杂的系统中,仅靠传统的日志和指标监控数据很难实现一览全局的视角,排除故障会非常困难。

3.数据类型

Opentelemetry 采集的信息包括可观测的三支柱 Tracing、Metrics、Logging, 其次还包括 Baggage。Baggage 类似与 OpenTrace 中 Baggage, Opentelemetry 将它从 trace 中独立了出来。目前状态: Traces 和 Baggage 已进入稳定状态, Metrics 也大部分完成, 而下一将在 Logs 上逐步发力。值得一提的是 Metrics 中的 Exemplars 的情况, 目前在 Java SDK 中已经实现, 而在 Go SDK 中还未支持。

Tracing

OpenTelemetry 追踪系统是基于 OpenTracing 和 OpenCensus。这两个系统, 以及流行的 Zipkin 和 Jaeger 项目, 都是基于谷歌开发的 Dapper 追踪系统。OpenTelemetry 可以将这些项目兼容到一个系统中。

Metrics

度量指标 (metric) 是一个很大的话题, 包含各种各样的方法和实现。OpenTelemetry 度量信号可以与 Prometheus 和 StatsD 完全兼容。

Logging

OpenTelemetry 结合了高度结构化的日志 API 和高速日志处理系统。现有的日志 API 可以连接到 OpenTelemetry, 避免了对应用程序的重新测量。 目前这部分尚发展阶段

Baggage

OpenTelemetry Baggage 是一个简单但通用的键值系统。一旦数据被添加为 Baggage, 它就可以被所有下游服务访问。这允许有用的信息, 如账户和项目 ID, 在事务的后期变得可用, 而不需要从数据库中重新获取它们。例如, 一个使用项目 ID 作为索引的前端服务可以将其作为 Baggage 添加, 允许后端服务也通过项目 ID 对其跨度和指标进行索引。这信息添加到了 http header 中, 进行上下文传递, 因此每增加一个项目都必须被编码为一个头, 每增加一个项目都会增加事务中每一个后续网络请求的大小, 因此不建议在将大量的非重要的信息添加到 Baggage 中。

4.架构图

  • receivers(接收者): 定义从 client 端的数据要以何种数据模型进行接收, 支持很多种数据模型。
  • processors: 将 receivers 的数据进行某些处理, 比如批量、性能分析等。
  • exporters: 将 processors 后的数据导出到特定的后端, 比如 metrics 数据存储到 prometheus 中。

5.核心概念

  1. 信号
    • 信号是用于描述操作系统和平台上运行的应用程序基本活动的系统输出。信号可以是你想在特定时间点测量的东西,如温度或内存使用率,也可以是你想追踪的分布式系统组件中发生的事件。你可以将不同的信号组合在一起,从不同角度观察同一项技术的内部运作。
  2. 遥测数据(Telemetry Data)

    • 指标(Metrics):度量数据,用于量化系统的状态和性能,如CPU利用率、请求速率、队列长度等。指标可以是瞬时值(Gauge)、累积计数(Counter)、直方图(Histogram)、摘要统计(Summary)等不同类型,有助于监控系统的健康状况、资源消耗、服务质量等。

    • 日志(Logs):事件记录,包含文本信息、时间戳、严重级别、元数据等,用于记录系统的运行状态、异常情况、调试信息等。日志有助于诊断问题、理解系统行为和审计目的。

    • 分布式追踪(Distributed Tracing):跟踪跨服务、跨进程甚至跨网络边界的请求流经系统的全过程,包括每个环节的耗时、调用关系、状态等信息。分布式追踪对于分析服务间的依赖关系、排查性能瓶颈、识别故障根源至关重要。

  3. OpenTelemetry API

    • 提供一系列标准化的编程接口,使得开发人员能够在应用程序中方便地插入观测代码,生成上述三种类型的遥测数据。API 设计的目标是语言无关,目前支持多种主流编程语言(如Java、Python、Go、JavaScript等)。
  4. OpenTelemetry SDK

    • 实现了OpenTelemetry API,提供了具体的遥测数据采集、处理和导出功能。SDK 包括:
      • 数据收集(Data Collection):通过API暴露的接口收集应用程序产生的指标、日志和追踪数据。
      • 数据处理(Data Processing):对原始数据进行转换、聚合、过滤等操作,如采样、资源标签关联、Span链接等。
      • 数据导出(Data Export):将处理后的遥测数据发送到后端监控系统、日志聚合平台、分布式追踪系统等,这些系统可能是商业产品(如Prometheus、Jaeger、Zipkin等)或云服务商提供的服务(如阿里云、腾讯云等)。
  5. 资源(Resources)

    • 描述了产生遥测数据的实体(如进程、服务、主机等)的属性,如服务名、版本、环境、地域等。资源信息与每一条遥测数据关联,有助于在后端进行数据的筛选、聚合和分析。
  6. Span(跨度)

    • 在分布式追踪中,Span代表一次操作的执行单元,通常对应一次网络请求、数据库查询、函数调用等。每个Span包含起止时间、操作名称、状态(如成功/失败)、时间戳、属性(Tags)、事件(Events)、关联的Span(Links)等信息。Spans可以形成树状结构(通过ParentSpanId关联),构成完整的调用链路。
  7. Trace(跟踪)

    • 由一个或多个相互关联的Span组成,表示一个完整的服务请求(或工作单元)的生命周期。一个Trace通过唯一的Trace ID标识,包含了请求从发起至完成过程中涉及的所有服务调用及其相关信息。
  8. Semantic Conventions(语义约定)

    • 规定了如何标准化地命名、描述和度量特定类型的操作或事件,以便在不同系统和服务间保持遥测数据的一致性和可理解性。例如,定义了HTTP请求的Span应如何标记URL、方法、状态码等属性,数据库查询的Span应如何记录SQL语句、数据库类型等信息。
  9. 自动 instrumentation(自动检测)

    • OpenTelemetry 提供了自动检测库,能够自动植入到应用程序中,无需手动修改代码即可收集相关组件(如HTTP客户端/服务器、数据库驱动、消息队列客户端等)的遥测数据。
  10. Collector(收集器)

    • 可选组件,用于接收来自多个源(如本地SDK、远程应用程序等)的原始遥测数据,进行集中式的处理(如格式转换、协议适配、数据清洗等)和导出到多个后端系统。Collector有助于简化遥测数据的管理和集成。

6.相关开源项目

7.分布式追踪的起源

自从微服务的兴起开始,整个系统架构开始变得极为庞大和复杂,但是服务之间的调用关系,调用消耗时间等等信息却依然是半黑盒的状态。为了能够将调用的链路进行串联,将系统的各种指标数据展示出来以使得系统的链路更加透明便于排查故障,分布式追踪便应运而生。

分布式追踪的起源有一个比较普遍的说法是源自Google2010年发表的论文Dapper, a Large-Scale Distributed Systems Tracing Infrastructure,然而实际上更早之前就有一些大公司内部已经有了类似的组件在使用了,只是不为人所知。当然即便如此,作为最早的系统性的论述分布式追踪的论文,它有着非同寻常的影响了,可以说是很多分布式追踪的实现参考。

8.百花齐放的分布式追踪

Zipkin

Zipkin最初是由Twitter开发并与2012年开源的一款开源追踪系统。Zipkin的使用非常广泛,影响了很多的后来人。他的传输头为X-B3

Skywalking

Skywalking是由国人开发,并且在后续捐赠给了Apache基金会的一个开源项目。现在是Apache基金会的顶级项目。

Pinpoint

Pinpoint由Naver在2012年开发,并于2015年开源。Pinpoint适用于java,php和python。

Jaeger

Jaeger最早是由Uber开发并于2017年开源,后续捐赠给了CNCF基金会。

OpenCensus

OpenCensus由Google发起,最初是Google内部追踪平台,后开源。

OpenTracing

OpenTracing由CNCF托管,具备较为完善的instrumentation库。

9.Opentelemetry的诞生

OpenCensus与OpenTracing
在上述的项目中有两个项目较为特殊:其一是OpenTracing,他制定了一套无关平台的统一的Trace的标准,后续的很多项目例如Jaeger等都是基于此协议,因此他在当时的Trace标准领域具有不小影响力;其二是OpenCensus,他背靠Google,并且它不仅仅实现了Trace,还包括了Metrics,并且他包含了一系列诸如Agent和Collector的方案,可以说是相当完备。

在当时这两大流派可以说是互相有一大票的追随者,一边是以Google和微软领衔的OpenCensus,一边是众多开源项目和厂商使用的OpenTracing,两者可以说是各有优劣,各领风骚。直到有一天...

再经过了一段时间的发展后OpenCensus与OpenTracing为了将两者的优点进行整合,宣布将进行合并,两者的合并就是后来赫赫有名的Opentelemetry

Opentelemetry可以说是含着金汤匙出生:OpenTracing支持,OpenCensus支持,刚开始就自带经验丰富的的社区人员,同时背后也有互联网巨头的支持。

10.Opentelemetry的目标

Opentelemetry旨在构建包含Trace,metrics和Logging的分布式追踪方案,它提供了统一的标准。

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

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

相关文章

Spring Boot入门(20):轻松搞定多数据源配置,Spring Boot与Mybatis-Plus的完美结合!

前言 本文将介绍如何在Spring Boot框架下使用mybatis-plus实现多数据源配置。多数据源配置是一个常见的需求,在实际项目中也经常遇到,因此掌握多数据源配置的技巧是非常重要的。 摘要 本文将为大家介绍如何使用Spring Boot和mybatis-plus实现多数据源…

学之思考试系统环境启动QA

学之思考试系统环境启动Q&A 目录 学之思考试系统环境启动Q&A后台代码启动失败:前台代码启动失败常见解决方式参考资料后台代码启动失败: 后端代码启动不成功,不能够自动导入maven,配置依赖; 使用idea打开到:\xzs-master\xzs-mysql-master\source\xzs这个路径下;…

小心中伏!伦敦银出入金有要求的

伦敦银是采用了t0资金回转制度的投资品种,所以投资者在交易实现了盈利之后,可以当天立马就选择把盈利转出,当然如果投资者参与了平台的营销活动,申请出金的行为,就有可能导致活动资格被取消,对此投资者应该…

基于SSM+Vue的护工预约服务小程序和后台管理系统

1、系统演示视频(演示视频) 2、需要请联系

hcip实验 — 路由策略实验

目录 实验拓扑 实验要求 实验思路 实验步骤 1.配置接口及环回ip 2.配置ospf协议及rip协议 3.在R2上进行路由引入 4.在R2上进行路由过滤 5.在R4上进行路由过滤(地址前缀列表) 6.在R2 RIP进程上配置静默接口使RIP报文无法进入OSPF区域 实验拓扑 …

echarts折线图默认不显示数据圆点,鼠标划上之后折线图才显示圆点

只需要设置showSymbol为false就可以了,表示只在 tooltip hover 的时候显示。 代码如下: option {tooltip: {trigger: axis},xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [150, 230, 224…

echarts柱形图实现2.5D

思路:使用markpoint option {title: {text: Rainfall vs Evaporation,subtext: Fake Data},tooltip: {trigger: axis},legend: {data: [Rainfall, Evaporation]},toolbox: {show: true,feature: {dataView: { show: true, readOnly: false },magicType: { show: t…

学习笔记Day21:转录组差异分析

转录组差异分析 差异分析难点在于将数据处理成需要的格式 表达矩阵 数值型矩阵-count 行名是symbol 低表达量的基因需要过滤 分组信息 因子,对照组在level第一位 与表达矩阵的列一一对应 项目名称 字符串(不要有特殊字符) TCGA-XX…

Codeforces Round 940 (Div. 2) C. How Does the Rook Move?

//dp删除后&#xff0c;可以堆成新的N*N. #include<bits/stdc.h> using namespace std; #define int long long const int mod1e97; const int n1e611; int a,b,c,d[n],l,r; signed main() {ios::sync_with_stdio(false);cin>>a;d[1]1;d[0]1;for(int i2;i<3e…

4个AI写作助手,给你高效率的写作体验

在当今信息爆炸的时代&#xff0c;写作已经成为许多人工作和学习中不可或缺的一部分。然而&#xff0c;有时候我们可能会遇到写作灵感枯竭、表达受限等问题。幸运的是&#xff0c;随着人工智能技术的不断发展&#xff0c;AI写作助手已经成为许多写作者的得力帮手。在本文中&…

web 学习第六次课程

文章目录 定位 定位 <body><div style"height:100px;width:100px;border:#F00 1px solid;"></div><div style"height:100px;width:100px;border: #00F 1px solid;"></div> </body><body><div style"pos…

20240422,C++文件操作

停电一天之后&#xff0c;今天还有什么理由不学习呜呜……还是没怎么学习 一&#xff0c;文件操作 文件操作可以将数据持久化&#xff0c;对文件操作时须包含头文件<fstream> 两种文件类型&#xff1a;文本文件&#xff1a;文件以文本的ASCII码形式存储&#xff1b;二进…

算法打卡day39

今日任务&#xff1a; 1&#xff09;卡码网57. 爬楼梯&#xff08;70. 爬楼梯进阶版&#xff09; 2&#xff09;322.零钱兑换 3&#xff09;279.完全平方数 4&#xff09;复习day14 卡码网57. 爬楼梯&#xff08;70. 爬楼梯进阶版&#xff09; 题目链接&#xff1a;57. 爬楼梯…

太奇怪了!99%的人没见过的Oracle故障:网络恢复后,集群的监听和vip无法启动

故障描述 15:46操作系统日志出现net4、net5网卡down&#xff0c;15:53分钟的网络恢复。网络中断是由于db汇聚交换机出现了问题。 网络恢复后&#xff0c;节点1的监听和vip无法启动。 故障分析 查看grid alert日志可以看到监听资源确实没有正常启动。 由于监听资源是crs的Ora…

Redis服务

参考文章&#xff1a; Win.dow.s上安装Redis教程 redis数据库基础篇 Redis 的安装及图形化界面 Redis DeskTop Manager 的安装与使用 下载Redis Redis压缩包 打开Redis 法1&#xff1a; 双击redis-server.exe 应用程序 法2&#xff1a; 进入redis目录下&#xff0c;打cmd…

Python安装和开发环境搭建

Python的下载 访问Python语言官网(Welcome to Python.org)进行下载相关安装包&#xff0c;根据需要和系统环境、下载相应的windows/linux/macOs安装包。 ​ 更新的还是挺快的&#xff0c;都到3.12.3了。 直接点Download哪里的Python 3.12.3。 ​ 我这边系统是64位&#xf…

Rumble Club上线时间+配置要求+游戏价格+加速器推荐

Rumble Club上线时间配置要求游戏价格加速器推荐 Rumble Club是一款基于物理的玩家大乱斗游戏&#xff0c;该作拥有丰富饱满的视觉效果和趣味性十足的游玩极致&#xff0c;让玩家可以各种富有想象力的方式&#xff0c;推搡、戏耍好友。该作即将正式上线&#xff0c;为了避免玩…

MyBatis 框架学习(I)

MyBatis 框架学习(I) 文章目录 MyBatis 框架学习(I)1. 介绍2. 准备&测试3. MyBatis 注解基础操作3.1 日志输出3.2 Insert 操作3.3 Delete 操作3.4 Update 操作3.5 Select 操作 总结 1. 介绍 之前我们学习过利用JDBC操作数据库进行项目开发&#xff0c;但我们发现它操作起来…

Mybatis多表查询和注解开发

文章目录 Mybatis多表查询套路一对一查询一对多查询 注解开发概述相关注解步骤新增主键回填 查询别名映射模糊查询 动态SQL(了解) Mybatis多表查询 套路 基于需求编写SQL语句基于SQL语句的查询结果&#xff0c;分析类与类之间关联(建立实体类和实体类的关联)在映射文件中&…

2024年51cto视频如何提取

2024年51cto视频如何提取出来&#xff0c;本文就教大家如何下载51cto网页上的视频 首先要准备以下工具 小白51cto链接&#xff1a;https://pan.baidu.com/s/1kbsK2w4rjK8VQcSSg_B0aw?pwd1234 提取码&#xff1a;1234 --来自百度网盘超级会员V10的分享 1.首先下载我给大家…