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.hqwc.cn/news/640930.html

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

相关文章

shell进阶之正则表达式:字符转义(十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

【LLM】向量知识库

文章目录 认识向量知识库向量Embeddings向量数据库向量数据库的作用向量数据库与传统数据库的区别 Embedding API使用公有Embedding API自定义一个Embeedding API 常见文本数据的预处理搭建并使用向量数据库思考向量数据库在LLM中的价值体现向量的妙用,可行&#xf…

vue 请求php接口 header 传自定义参数 提示cors 跨域问题

前端地址 http://192.168.0.125:4021 请求后端地址的时候报 from origin http://192.168.0.125:4021 has been blocked by CORS policy: Request header field userid is not allowed by Access-Control-Allow-Headers in preflight response. 大概意思是请求 header里有个…

vue整合Echarts

首先打开网址https://echarts.apache.org/examples/zh/index.html 进入Echars官网找到自己想要的图形我这里选择的是柱形图 点开完整代码直接cv大法 下载Echars的npm npm install echarts 在vue里面挂在个div 导入相关包 写个方法 就是cv过来的 然后改成后端传过来的值…

OpenCV轻松入门(九)——使用第三方库imgaug自定义数据增强器

安装命令:pip install imgaug 代码实现: import cv2 import random import matplotlib.pyplot as pltfrom imgaug import augmenters as iaa # 数据增强——缩放效果 def zoom_img(img):# 获取一个1-1.3倍的线性图像处理器,scale参数是缩放范…

使用Unity扫描场景内的二维码,使用插件ZXing

使用Unity扫描场景内的二维码,使用插件ZXing 使用Unity扫描场景内的二维码,ZXing可能没有提供场景内扫描的方法,只有调用真实摄像机扫描二维码的方法。 实现的原理是:在摄像机上添加脚本,发射射线,当射线打…

Android Studio开发工具学习之Git远程仓库拉取与推送

Git远程仓库操作 1.1 推送项目到远端服务器1.1.1 进入Gitee或Github、创建一个新的仓库1.1.2 将Android Studio中项目推送至Gitee 1.2 从远端服务器拉取项目1.2.1 AS工程页拉取新项目1.2.2 AS启动页拉取项目 1.1 推送项目到远端服务器 1.1.1 进入Gitee或Github、创建一个新的仓…

Qt 跨平台开发

Qt 跨平台开发 文章目录 Qt 跨平台开发摘要第一 \ & /第二 神奇{不能换行显示第三 预处理宏 关键字: Qt、 win、 linux、 lib、 MSVC 摘要 最近一直在琢磨Qt跨平台开发的问题,缘由有以下几个, 首先第一个,我们目前开发…

Hive 表添加列(新增字段)

前言 记录总结一下 Hive 表如何添加新的字段以及遇到的问题。 最初是因为要验证 Hudi Schema Evolution 中的增加字段问题 SQL alter table test_hive add columns (col_new string);# 级联应用到分区表的所有分区 # 对于 Parquet、Text 分区表需要加cascade , OR…

STM32F1串口

文章目录 1 数据通信的基础概念1.11.21.31.41.5 2 串口(RS-232)2.12.22.32.42.5 3 STM32的USART3.13.23.33.53.9 USART寄存器介绍 4 HAL库外设初始化MSP回调机制5 HAL库中断回调机制6 USART/UART异步通信配置步骤 (包括HAL库相关函数)6.16.26…

unity读写本地excel_2024.4.22

using System.Collections; using System.Collections.Generic; using UnityEngine; using OfficeOpenXml; using System.IO; using Excel; using System.Data; using System; /// <summary> /// https://blog.csdn.net/Xz616/article/details/128893023 /// Unity3D操作…

管理集群工具之LVS

管理集群工具之LVS 集群概念 将很多机器组织在一起&#xff0c;作为一个整体对外提供服务集群在扩展性、性能方面都可以做到很灵活集群分类 负载均衡集群&#xff1a;Load Balance高可用集群&#xff1a;High Availability高性能计算&#xff1a;High Performance Computing …