OpenTelemetry-1.介绍

目录

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.mzph.cn/bicheng/2276.shtml

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

相关文章

虚假新闻检测——Adapting Fake News Detection to the Era of Large Language Models

论文地址:https://arxiv.org/abs/2311.04917 1.概论 尽管大量的研究致力于虚假新闻检测,这些研究普遍存在两大局限性:其一,它们往往默认所有新闻文本均出自人类之手,忽略了机器深度改写乃至生成的真实新闻日益增长的现…

【北京迅为】《iTOP-3588开发板系统编程手册》-第20章 socket 应用编程

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

TI_DSP_F2808学习笔记1: GPIO

1. 初始化设置 1.1 控制寄存器 GPxMUX功能选择寄存器/多功能复用选择 GPxDIR 方向选择寄存器/输入输出选择 0 输入 1 输出GPxPUD 上拉功能选择寄存器/是否启用内部上拉 0 有上拉,1禁止上拉GPxQSeln输入限定选择寄存器 输入n次为0或1才有效,滤波 1.2 数…

PDF 书签制作与调整

本文是对以前发表的旧文拆分,因为原文主题太多,过长,特另起一篇分述。 第一部分 由可编辑 PDF 文档创建书签 方法 1. Adobe Acrobat Pro autobookmark AutoBookmark 是一个可用于 Adobe Acrobat 自动生成书签的插件。 官方下载地址&…

corona渲染器锐化模糊设置,corona高效出图方法

​在使用Corona渲染器进行效果图渲染时,锐化和模糊是两种常用的设置,它们主要用于调整图像的清晰度和柔化效果。锐化参数可以增强图像中的细节,使画面看起来更加清晰锋利;而模糊参数则可以用来柔化图像边缘,减少图像噪…

Etsy多账号关联怎么办?Etsy店铺防关联解决方法

Etsy虽然相对于其他跨境电商平台来说比较小众,但因为平台是以卖手工艺品为主的,所以成本较低,利润很高。许多跨境卖家都纷纷入驻,导致平台规则越发严格,操作不当就会封号,比如一个卖家操作多个账号会出现关…

10.接口自动化测试学习-Pytest框架(2)

1.mark标签 如果在每一个模块,每一个类,每一个方法和用例之前都加上mark标签,那么在pytest运行时就可以只运行带有该mark标签的模块、类、接口。 这样可以方便我们执行自动化时,自主选择执行全部用例、某个模块用例、某个流程用…

二分查找知识点及练习题

知识点讲解 一、没有相同元素查找 请在一个有序递增数组中(不存在相同元素),采用二分查找,找出值x的位置,如果x在数组中不存在,请输出-1! 输入格式 第一行,一个整数n,代…

家用洗地机买什么牌子的好?四大业内顶尖品牌推荐

家庭清洁一直是必不可少的,但用传统的手动拖地清洁,费时又费力。现在出现了洗地机,确实改变了我们对家庭清洁的看法。它不仅能扫地、拖地,还能吸水,甚至能够自动清洁滚刷解放我们双手,提供高效清洁的同时还…

【Linux系列】 离线安装vnc 可视化桌面

离线安装vnc 可视化桌面 缘下载安装vnc初始化链接 缘 项目需要下载 下载地址: http://mirror.centos.org/centos/7/updates/x86_64/Packages/tigervnc-license-1.8.0-31.el7_9.noarch.rpm http://mirror.centos.org/centos/7/os/x86_64/Packages/libXfont2-2.0.…

【Day 6】MySQL 基础

1 MySQL DataBase(DB)是存储和管理数据的仓库 DataBaseManagementSystem(DBMS)数据库管理系统,操纵和管理数据库的大型软件 SOL(Structured QueryLanguage)操作关系型数据库的编程语言&#…

C++/Qt 小知识记录5

工作中遇到的一些小问题,总结的小知识记录:C/Qt 小知识5 Windows下查看端口占用情况C调用Python三方库测试库有没有被加上的测试方法初始化使用Python的env环境,用Py_SetPythonHome设置GDAL相关的,需要把osgeo、rasterio的路径加入…

【iOS开发】(一)2024 从一无所有开始,到ios开发(react Native)

​ 2024 从一无所有开始,到ios开发(react Native) 目录标题 1 工具简介2 基础环境搭建1 安装 brew2 安装 Node.js3 安装 Yarn4 安装 React Native 脚手架 3 ios环境搭建4创建并启动一个app 在这里插入图片描述 1 工具简介 Homebrew (brew)&a…

OpenHarmony实战开发-页面布局检查器ArkUI Inspector使用指导

DevEco Studio内置ArkUI Inspector工具,开发者可以使用ArkUI Inspector,在DevEco Studio上查看应用在真机上的UI显示效果。利用ArkUI Inspector工具,开发者可以快速定位布局问题或其他UI相关问题,同时也可以观察和了解不同组件之间…

Matlab分段微分方程组拟合【案例源码+视频教程】

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法,并提供所有案例完整源码;2.…

LLM 构建Data Multi-Agents 赋能数据分析平台的实践之③:数据分析之一(智能报表)

概述 在企业数字化转型的过程中,ERP系统与数据平台作为核心支撑工具,对于提升运营效率、优化决策支持、实现业务流程一体化起着至关重要的作用。然而,智能报表与报表的智能化合并作为其中的重要领域,却往往面临诸多挑战与难点&am…

探索 去中心化的Web3.0

随着区块链技术的日益成熟和普及,Web3(Web 3.0)已经成为一个无法忽视的趋势。Web3不仅仅是一个技术概念,更是一个去中心化、透明、用户数据拥有权归还给用户的互联网新时代。在这篇文章中,我们将深入探讨Web3技术的核心…

纯js图片上传插件

目录标题 一、效果预览二、使用简单三、完整代码(一)index.html(二)css(三)js四、附带后台上传文件代码 一、效果预览 支持多图片上传,删除、预览。 二、使用简单 导入依赖(需要…

Dart基础语法

Hello Dart Dart 语言与其他许多编程语言一样,以 main 函数作为程序的入口点。以下是一个简单的 "Hello Dart" 程序示例,展示了 Dart 语言的这一特点。 // 标准写法 void main(){print("Hello Dart"); }// 省略写法 main(){print(&…

WebGL绘制和变换三角形

1、绘制多个点 构建三维模型的基本单位是三角形。不管三维模型的形状多么复杂,其基本组成部分都是三角形,只不过复杂的模型由更多的三角形构成而已。 gl.vertexAttrib3f()一次只能向顶点着色器传入一个顶点,而绘制三角形、矩形和立方体等&am…