OpenTelemetry 介绍

news2025/5/13 2:41:49

文章目录

    • 1. 概述
      • 什么是OpenTelemetry
      • 发展历史与背景
      • 主要特点与优势
    • 2. 核心概念
      • 追踪(Tracing)
      • 指标(Metrics)
      • 日志(Logs)
      • 行李(Baggage)
    • 3. 主要组件
      • API层
      • SDK层
      • 数据收集器(Collector)
      • 导出器(Exporters)
        • OTLP(OpenTelemetry Protocol)
    • 4. 集成方式
      • 语言支持(SDK)
      • 自动与手动插桩
      • 常见框架集成
    • 5. 实际应用
      • 微服务监控
      • 性能分析
      • 故障排查
      • 最佳实践
    • 6. 生态系统
      • 与Prometheus/Grafana集成
      • 与Jaeger/Zipkin集成
      • 结语
    • 参考资料

1. 概述

什么是OpenTelemetry

OpenTelemetry是一个观测性框架和工具包,旨在创建和管理遥测数据,如追踪、指标和日志。OpenTelemetry是厂商和工具无关的,意味着它可以与各种观测性后端一起使用,包括像Jaeger和Prometheus这样的开源工具,以及商业解决方案。OpenTelemetry是一个Cloud Native Computing Foundation(CNCF)项目。

上面是OpenTelemetry的官方介绍,说人话就是:
OpenTelemetry就像是你应用的"体检中心",它能自动收集应用的各项指标(心跳、血压)、追踪请求链路(看病流程)、记录日志(病历),并把数据统一格式发给各种监控系统(Prometheus、Jaeger等)。上面这些在OpenTelemetry项目之前都是由各个厂商自己开发的,现在OpenTelemetry把这些功能都集成到一起,方便开发者使用。作为一个行业标准,OpenTelemetry 得到了40多个可观测性供应商的支持,被许多 库、服务和应用程序集成,并被众多终端用户采用。
在这里插入图片描述

发展历史与背景

在这里插入图片描述

  • Google 2010年发布的 Dapper 论文是分布式链路追踪的开端
  • 2012年 Twitter 开源了 Zipkin
  • 2015年 Uber 发布了 Jaeger 的开源版本。目前 Zipkin 和 Jaeger 仍然是最流行的分布式链路追踪工具之一
  • 2015年 OpenTracing 项目被 CNCF 接受为它的第三个托管项目,致力于标准化跨组件的分布式链路追踪
  • 2017年 Google 将内部的 Census 项目开源,随后 OpenCensus 在社区中流行起来
  • 2019年初,两个现有开源项目:OpenTracing 和 OpenCensus 被宣布合并为 OpenTelemetry 项目
  • 2021年,OpenTelemetry 发布了V1.0.0,为客户端的链路追踪部分提供了稳定性保证
  • 2023年是 OpenTelemetry 的里程碑,其三个基本信号——链路追踪、指标和日志,都达到了稳定版本

主要特点与优势

  • 统一标准

    • 提供统一的API和SDK规范,整合了追踪(Tracing)、指标(Metrics)和日志(Logs)三大观测信号
    • 取代了之前的OpenTracing和OpenCensus两个标准,解决了社区分裂问题
    • 数据格式标准化,兼容主流观测后端(Prometheus, Jaeger, Zipkin等)
  • 多语言支持

    • 支持10+主流编程语言(Go, Java, Python, JS等)
    • 每种语言实现都遵循相同的API规范,保证跨语言一致性
    • 自动插桩(Auto-instrumentation)减少手动编码工作量
  • 可扩展架构

    • 模块化设计,支持自定义采样器、处理器和导出器
    • 通过OpenTelemetry Collector实现灵活的数据处理和路由
    • 可轻松集成现有监控系统和自定义观测后端
  • 生产就绪

    • CNCF毕业项目,拥有活跃的社区和广泛的企业采用
    • 主要组件已达到稳定版本(GA),适合生产环境使用
    • 丰富的文档和示例,降低学习和使用门槛
  • 实际价值

    • 统一技术栈,减少多套观测系统的维护成本
    • 提升问题排查效率,通过分布式追踪快速定位性能瓶颈
    • 标准化指标采集,实现跨服务的统一监控视图

2. 核心概念

追踪(Tracing)

追踪(Tracing)记录请求在分布式系统中的流转路径,可视化服务间的调用关系。每个追踪由多个跨度(Span)组成,每个Span代表一个工作单元,包含操作名称、时间戳、持续时间和标签等信息。

工作原理:

  1. 通过自动或手动插桩在代码关键点创建Span
  2. 上下文传播机制将TraceID和SpanID在服务间传递
  3. 采样策略决定哪些追踪需要记录
  4. 数据导出到后端系统进行分析展示

应用场景:

  • 性能瓶颈分析
  • 分布式事务追踪
  • 错误传播路径定位

指标(Metrics)

指标(Metrics)是对系统运行状态的数值度量,反映系统的健康度和性能表现。OpenTelemetry支持三种指标类型:

  1. 计数器(Counter): 单调递增的值,如请求数
  2. 测量值(Gauge): 瞬时值,如CPU使用率
  3. 直方图(Histogram): 值的分布统计,如响应时间

工作原理:

  • 通过Meter创建指标并记录测量值
  • 支持预聚合减少数据传输量
  • 可配置的导出频率和聚合方式

应用场景:

  • 系统资源监控
  • 业务指标统计
  • 容量规划

日志(Logs)

日志(Logs)记录系统运行时的离散事件,提供详细的上下文信息。OpenTelemetry统一了日志格式,支持结构化日志记录。

工作原理:

  1. 日志收集器接收应用日志
  2. 日志处理器进行解析、过滤和增强
  3. 日志导出器将数据发送到后端
  4. 可与追踪和指标关联分析

应用场景:

  • 错误排查
  • 审计跟踪
  • 行为分析

行李(Baggage)

行李(Baggage)是在分布式系统中传递的键值对数据,用于跨服务传递业务上下文信息。

工作原理:

  1. 在请求入口设置行李项
  2. 行李随请求上下文自动传播
  3. 各服务可读取行李内容
  4. 不影响核心观测数据流

应用场景:

  • 传递用户ID、请求来源等业务信息
  • A/B测试分组标记
  • 跨服务调试信息传递

关于Tracing、Metrics和Logging之间的关系:
在这里插入图片描述
三者相互关联,共同提供完整的系统观测能力。追踪提供调用链视角,指标提供系统状态概览,日志提供详细上下文。通过统一的标识符(如TraceID),可以在三种数据间无缝导航。

3. 主要组件

API层

想象API层就像你家电器的按钮和开关——你只需要知道按哪里,不需要了解里面的电路是怎么工作的。OpenTelemetry的API层就是这样,它定义了简单清晰的接口,让你的应用可以轻松"按按钮"记录观测数据。

为什么API层很妙

  • 就像通用遥控器一样,一套API控制所有观测类型
  • “写一次,到处运行”——不绑定特定后端实现
  • 轻如羽毛,对应用性能影响微乎其微
  • 稳如泰山,API升级不会破坏你的代码

看看这段简单的代码

// 追踪API示例 - 记录一个操作的开始和结束
Tracer tracer = GlobalOpenTelemetry.getTracer("购物车服务");
Span span = tracer.spanBuilder("结算操作").startSpan();
try (Scope scope = span.makeCurrent()) {
   
    // 这里是你的业务操作,比如处理订单
    span.setAttribute("订单金额", 199.99);  // 添加有用的上下文信息
} finally {
   
    span.end();  // 别忘了"打卡下班"!
}

// 指标API示例 - 记录业务指标比纸笔还方便
Meter meter = GlobalOpenTelemetry.getMeter("支付服务");
LongCounter counter = meter.counterBuilder("已处理订单").build();
counter.add(1);  // 又搞定一单!

SDK层

SDK层是OpenTelemetry的引擎舱,它实现了API层定义的接口,并提供了实际的数据处理机制。就像高级相机的内部处理芯片,SDK层负责将原始观测数据转换为有意义的信息,并确保它能被正确传输到目标系统。

SDK层的关键功能

  • 将API的抽象概念转化为具体实现
  • 提供灵活的采样策略,帮你在数据量与详细度间取得平衡
  • 构建高效的处理管道,确保观测不会影响应用性能
  • 管理资源属性,为遥测数据添加环境上下文
  • 与各种后端系统建立连接桥梁

配置示例

// SDK配置 - 告诉OpenTelemetry如何处理和发送数据
SdkTracerProvider tracerProvider = SdkTracerProvider

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

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

相关文章

【连载14】基础智能体的进展与挑战综述-多智能体系统设计

基础智能体的进展与挑战综述 从类脑智能到具备可进化性、协作性和安全性的系统 【翻译团队】刘军(liujunbupt.edu.cn) 钱雨欣玥 冯梓哲 李正博 李冠谕 朱宇晗 张霄天 孙大壮 黄若溪 在基于大语言模型的多智能体系统(LLM-MAS)中,合作目标和合…

blender云渲染指南2025版

一、云渲染核心概念 Blender云渲染是将本地渲染任务迁移到云端服务器集群的技术,通过分布式计算实现效率提升100倍以上的解决方案,其核心逻辑是:用户上传Blender项目文件至【渲染101】等云平台,云端调用高性能服务器(…

Mysql-OCP PPT课程讲解并翻译

#跳过介绍,直接从干货开始记录 第一章 安装mysql windows安装

加速项目落地(Trae编辑器)

目录 vscode安装python支持 vscode常用插件 Trae编辑器 两个界面合成 补充(QT开发的繁琐) AI编程哪家强?Cursor、Trae深度对比,超详细! - 知乎 Trae兼容vscode的插件,我们可以先在vscode里面装好再一…

配置 Web 服务器练习

一、要求 1.通过https://ip 可以访问到网站首页 2.通过 https://ip/private/ 实现用户访问控制,仅允许已经添加的 tom,jerry 能够访问到 private 子路径的界面 3.通过 https://ip/vrit/ 实现能够访问到将系统 /nginx/virt 目录下的网页文件&#xff0…

Python程序,输入IP,扫描该IP哪些端口对外是开放的,输出端口列表

#!/usr/bin/env python # -*- coding: utf-8 -*-""" IP端口扫描程序 输入IP地址,扫描该IP哪些端口对外是开放的,输出端口列表 """import socket import sys import concurrent.futures import ipaddress from tabulate im…

OpenCv实战笔记(3)基于opencv实现调用摄像头并实时显示画面

一、实现效果 二、实现原理 使用 OpenCV 打开摄像头,持续捕获视频帧,并在一个窗口中实时显示这些帧,直到用户按下 ESC 键退出。整体流程:打开摄像头(cv::VideoCapture)>创建图像显示窗口(cv…

upload-labs靶场通关详解:第四关

一、分析源代码 可以看出这一关仍然是黑名单验证,但是它禁止了更多的后缀。像php3,php4这类后缀也被加入了黑名单,第三关的方法在这里显然就失效了。那么我们想一想,既然配置文件中存在将php3当作php来执行的功能,那么…

openharmony系统移植之gpu mesa3d适配

openharmony系统移植之gpu mesa3d适配 文章目录 openharmony系统移植之gpu mesa3d适配1. 环境说明2. gpu内核panfrost驱动2.1 使能panfrost驱动2.2 panfrost dts配置 3. buildroot下测试gpu驱动3.1 buildroot配置编译 4. ohos下mesa3d适配4.1 ohos下mesa3d编译调试4.1.2 编译4.…

Linux58 ssh服务配置 jumpserver 测试双网卡 为何不能ping通ip地址

判断为NAT模式网卡 能ping 通外网 ens34为仅主机模式网卡 [rootlocalhost network-scripts]# ip route show default default via 10.1.1.254 dev ens33 proto static metric 100 10.0.0.0/8 dev ens33 proto kernel scope link src 10.1.1.37 metric 100 11.0.0.0/8 dev…

web 自动化之 selenium+webdriver 环境搭建及原理讲解

文章目录 一、web 自动化测试学习说明二、什么 web 自动化测试三、selenium 简介四、web自动化测试环境搭建五、web 自动化测试第一个脚本六、selenium 原理及源码讲解 一、web 自动化测试学习说明 进阶 web 自动化测试学习:掌握 python 编程基础 二、什么 web 自…

2025ISCC练武校级赛部分题解WP

Web 战胜卞相壹 <!-- 路过的酒罐王柯洁九段说&#xff1a; --> <!-- 会叠棋子有什么用&#xff01;你得在棋盘内战胜他&#xff01;我教你个定式&#xff0c;要一直记得&#xff01;一直&#xff01; --> <!-- SGF B[ae];B[ce];B[df];B[cg];B[ag];B[ai];B[ci];…

PyTorch 版本、torchvision 版本和 Python 版本的对应关系

PyTorch 版本、torchvision 版本和 Python 版本的对应关系 在深度学习领域&#xff0c;PyTorch 及其配套库 torchvision 的使用极为广泛。但不同版本的 PyTorch、torchvision 与 Python 之间存在严格的对应关系&#xff0c;若版本搭配不当&#xff0c;会导致代码运行出错…

RS485和RS232 通信配置

RS232 目前硬件上支持RS232的有以下板卡&#xff1a; LubanCat-5IO底板&#xff08;含有RS232x2&#xff09; 7.1. 引脚定义 具体的引脚定义可以参考背面的丝印 LubanCat-5IO底板 引脚定义图 7.2. 跳帽配置 LubanCat-5IO底板 鲁班买5IO底板上的RS485和RS232是共用同一组…

zst-2001 历年真题 设计模式

设计模式 - 第1题 a 设计模式 - 第2题 一个产品可以产生多个就是抽象&#xff0c;一个就是工厂 比如这样 第二题a是意图 bc: d 设计模式 - 第3题 b 设计模式 - 第4题 类图里全是builder,疯狂暗示 设计模式 - 第5题 aa 设计模式 - 第6题 只有工厂方法是创…

鸿蒙NEXT开发动画案例4

1.创建空白项目 2.Page文件夹下面新建Spin.ets文件&#xff0c;代码如下&#xff1a; /*** TODO SpinKit动画组件 - 双粒子旋转缩放动画* author: CSDN-鸿蒙布道师* since: 2025/05/08*/ ComponentV2 export struct SpinFour {// 参数定义Require Param spinSize: number 36…

XML语言

XML语言 在开始介绍Mybatis之前&#xff0c;先介绍一下XML语言&#xff0c;XML语言发明最初是用于数据的存储和传输&#xff0c;它是由一个一个的标签嵌套而成 <?xml version"1.0" encoding"UTF-8" ?> <outer> <name>阿伟</name&…

基于SpringBoot的小区停车位管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

VR博物馆,足不出户云逛展

VR博物馆概念与特点 定义与由来 VR博物馆&#xff0c;即虚拟现实(Virtual Reality)博物馆&#xff0c;是利用计算机技术、互联网和虚拟现实技术&#xff0c;将实体博物馆及其藏品数字化&#xff0c;实现在虚拟空间中的展示和体验的新型博物馆形式。概念起源于20世纪90年代末&…

uniapp|实现多终端聊天对话组件、表情选择、消息发送

基于UniApp框架,实现跨平台多终端适配的聊天对话组件开发、表情选择交互设计及消息发送,支持文本与表情混合渲染。 目录 聊天界面静态组件实现消息列表布局消息气泡双向布局辅助元素定位与样式静态数据模拟与扩展性设计表情选择器静态模块浮层实现符号网格排列多端样式适配方…