OpenTelemetry 从入门到精通

news2025/5/20 17:59:40

快速入门

OpenTelemetry 是一个可观测性框架和工具包, 旨在创建和管理遥测数据,如链路、 指标和日志。 重要的是,OpenTelemetry 是供应商和工具无关的,这意味着它可以与各种可观测性后端一起使用, 包括 Jaeger 和 Prometheus 这类开源工具以及商业化产品。

OpenTelemetry 不是像 Jaeger、Prometheus 或其他商业供应商那样的可观测性后端。 OpenTelemetry 专注于遥测数据的生成、采集、管理和导出。 OpenTelemetry 的一个主要目标是, 无论应用程序或系统采用何种编程语言、基础设施或运行时环境,你都可以轻松地将其仪表化。 重要的是,遥测数据的存储和可视化是有意留给其他工具处理的

一句话总结:定义一套标准规范来生成、收集遥测数据。

官方文档:什么是 OpenTelemetry? | OpenTelemetry

什么是可观测性?

可观测性是通过检查系统输出来理解系统内部状态的能力。 在软件的背景下,这意味着能够通过检查遥测数据(包括链路、指标和日志)来理解系统的内部状态。

要使系统可观测,必须对其进行仪表化。也就是说,代码必须发出链路、指标或日志。 然后,仪表化的数据必须发送到可观测性后端。

为什么选择 OpenTelemetry?

随着云计算、微服务架构的兴起和日益复杂的业务需求,软件和基础设施的可观测性需求比以往任何时候都要强烈。

OpenTelemetry 满足可观测性的需求,并遵循两个关键原则:

  1. 你所生成的数据归属于你自己,不会被供应商锁定。
  2. 你只需要学习一套 API 和约定。

这两个原则的结合赋予团队和组织在当今现代计算世界中所需的灵活性。

OpenTelemetry 广泛应用于许多已集成 OpenTelemetry 提供默认可观测性的库、服务和应用。

OpenTelemetry 是云原生计算基金会 (CNCF)的一个项目,是由 OpenTracing 和 OpenCensus 项目合并而成的。原来这两个项目都是为解决同样的问题而创建的: 缺乏一种标准的方法来为代码进行仪表化并将遥测数据发送到可观测性后端。 由于这两个项目都无法独立解决这个问题,所以将其合并成立了 OpenTelemetry, 吸收了双方的优势,提供了统一的解决方案。

以 Java 语言实现特定的 OpenTelemetry

OpenTelemetry 是一个可观测性框架,包含 API、SDK 和工具,旨在帮助生成和收集应用程序遥测数据(例如指标、日志和跟踪记录)。

OpenTelemetry Java 由以下仓库组成:

  • opentelemetry-java: 用于手动插桩的组件,包括 API 和 SDK,也包括扩展和 OpenTracing shim。
  • opentelemetry-java-instrumentation: 建立在 opentelemetry-java 之上,并提供一个 Java agent JAR,可以附加到任何 Java 8+ 应用程序,并动态注入字节码,从许多流行的库和框架中捕获遥测数据。

Zero-code: Java agent

The Java agent is a form of zero-code automatic instrumentation that dynamically manipulates application bytecode.

For a list of libraries instrumented by the Java agent, see the “Auto-instrumented versions” column on supported libraries.

See Java agent for more details.

Zero-code: Spring Boot starter

The Spring Boot starter is a form of zero-code automatic instrumentation that leverages spring autoconfigure to install library instrumentation.

See Spring Boot starter for details.

OpenTelemetry Java SDK - 观测云文档

定义指标&使用

 Meter meter = GlobalOpenTelemetry.getMeter("io.opentelemetry.example.metrics");
        meter.gaugeBuilder("jvm.memory.total")
                .setDescription("Reports JVM memory usage.")
                .setUnit("byte")
                .buildWithCallback(
                        result -> result.record(Runtime.getRuntime().totalMemory(), Attributes.empty()));

用户通过open telemetry api来定义指标,底层agent来实现公司相应的exporter来打通后端的真实存储。这样的好处,后面公司的存储系统发生了变化,业务程序不需要修改,可调整agent即可。

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

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

相关文章

【免杀】C2免杀技术(六)进程镂空(傀儡进程)

一、技术定位与核心思想 进程镂空(Process Hollowing)属于 MITRE ATT&CK 中 T1055.012 子技术:先创建一个合法进程并挂起,随后把其主模块从内存“掏空”并替换为恶意映像,最后恢复线程执行,从而让…

Eclipse Java 开发调优:如何让 Eclipse 运行更快?

Eclipse Java 开发调优:如何让 Eclipse 运行更快? 在 Java 开发领域,Eclipse 是一款被广泛使用的集成开发环境(IDE)。然而,随着项目的日益庞大和复杂,Eclipse 的运行速度可能会逐渐变慢&#x…

彻底理解事件循环(Event Loop):从单线程到异步世界的桥梁

关于事件循环被问了很多次,也遇到过很多次,一直没有系统整理,网上搜的,基本明白但总感觉不够透彻,最后,自己动手,丰衣足食,哈哈 一、为什么需要事件循环?—— 单线程的困…

Linux(2)——shell原理及Linux中的权限

目录 一、shell的运行原理 二、Linux中权限的问题 1.权限的概念 2.如何进行用户的切换 1)从普通用户切到超级用户 2)从root用户切到普通用户 3.如何实现提权操作 4.如何将普通用户添加到信用列表(sudoers) ​编辑5.Lin…

如何在线免费压缩PDF文档?

PDF文件太大,通常是因为内部嵌入字体和图片。怎么才能将文件大小减减肥呢,主要有降低图片清晰度和去除相关字体两个方向来实现文档效果。接下来介绍三个免费压缩PDF实用工具。 (一)iLoveOFD在线转换工具 iLoveOFD在线转换工具&a…

汽车装配又又又升级,ethernetip转profinet进阶跃迁指南

1. 场景描述:汽车装配线中,使用EtherNet/IP协议的机器人与使用PROFINET协议的PLC进行数据交互。 2. 连接设备:EtherNet/IP机器人控制器(如ABB、FANUC)与PROFINET PLC(如西门子S7-1500)。 3. 连…

css:无限滚动波浪线

以上是需要实现的效果,一条无限滚动波浪线,可以用来做区块的分割线。 要形成上下交替的圆形,思路是给div加圆角边框,第一个只有上边框,第二个只有下边框。 循环了100个div,这个数量根据自己容器宽度调整&…

w~自动驾驶~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/13269720 #FastOcc 推理更快、部署友好Occ算法来啦! 在自动驾驶系统当中,感知任务是整个自驾系统中至关重要的组成部分。感知任务的主要目标是使自动驾驶车辆能够理解和感知周围的环境元素&…

山东大学计算机图形学期末复习整理5——CG10上

CG10上 Frenet-Serret框架 空间中一条曲线可以写成参数形式: C ( u ) ( x ( u ) , y ( u ) , z ( u ) ) \mathbf{C}(u) (x(u), y(u), z(u)) C(u)(x(u),y(u),z(u)) 这表示:当参数 u u u 变化时,曲线在三维空间中移动,生成一条轨…

STM32移植LVGL8.3 (保姆级图文教程)

目录 前言设备清单2.8寸TFT-LCD屏原理与应用1️⃣基本参数2️⃣引脚说明3️⃣程序移植4️⃣硬件接线 LVGL8.3 移植流程1️⃣硬件及平台要求2️⃣版本说明3️⃣源码下载4️⃣源码移植 工程配置修改配置文件1️⃣lvgl_config.h2️⃣适配屏幕驱动3️⃣配置输入设备(触摸功能) 提供…

虚幻引擎5-Unreal Engine笔记之Default Pawn与GamMode、Camera的关系

虚幻引擎5-Unreal Engine笔记之Default Pawn与GamMode、Camera的关系 code review! 文章目录 虚幻引擎5-Unreal Engine笔记之Default Pawn与GamMode、Camera的关系1.Default Pawn与Camera的关系1.1. Default Pawn 是什么?1.2. Default Pawn 的主要组件1.3. Default…

C++多态的详细讲解

【本节目标】 1. 多态的概念 2. 多态的定义及实现 3. 抽象类 4. 多态的原理 5. 单继承和多继承关系中的虚函数表 前言 需要声明的,本博客中的代码及解释都是在 vs2013 下的 x86 程序中,涉及的指针都是 4bytes 。 如果要其他平台下,部…

vue项目启动报错

vue项目启动报错 一、问题二、解决 一、问题 从vue2更换到vue3之后,需要将node进行版本升级,之后启动项目出现了下面的问题。 Uncaught Error: A route named “PageNotFound” has been added as a child of a route with the same name. Route names …

免费私有化部署! PawSQL社区版,超越EverSQL的企业级SQL优化工具面向个人开发者开放使用了

1. 概览 1.1 快速了解 PawSQL PawSQL是专注于数据库性能优化的企业级工具,解决方案覆盖SQL开发、测试、运维的整个流程,提供智能SQL审核、查询重写优化及自动化巡检功能,支持MySQL、PostgreSQL、Oracle、SQL Server等主流数据库及达梦、金仓…

SecureCRT 使用指南:安装、设置与高效操作

目录 一、SecureCRT 简介 1.1 什么是 SecureCRT? 1.2 核心功能亮点 1.3 软件特点 二、SecureCRT 安装与激活 2.1 安装步骤(Windows 系统) 2.2 激活与破解(仅供学习参考) 三、基础配置与优化 3.1 界面与编码设…

Tomcat多应用部署与静态资源路径问题全解指南

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…

【微信小程序 + 高德地图API 】键入关键字搜索地址,获取经纬度等

前言 又到熟悉的前言,接到个需求,要引入高德地图api,我就记录一下,要是有帮助记得点赞、收藏、关注😁。 后续有时间会慢慢完善一些文章:(画饼时间) map组件自定义气泡、mark标记点…

排序算法之线性时间排序:计数排序,基数排序,桶排序详解

排序算法之线性时间排序:计数排序、基数排序、桶排序详解 前言一、计数排序(Counting Sort)1.1 算法原理1.2 代码实现(Python)1.3 性能分析1.4 适用场景 二、基数排序(Radix Sort)2.1 算法原理2…

Linux | mdadm 创建软 RAID

注:本文为 “Linux mdadm RAID” 相关文章合辑。 略作重排,未整理去重。 如有内容异常,请看原文。 Linux 下用 mdadm 创建软 RAID 以及避坑 喵ฅ・ﻌ・ฅ Oct 31, 2023 前言 linux 下组软 raid 用 mdadm 命令,multi…

CodeEdit:macOS上一款可以让Xcode退休的IDE

CodeEdit 是一款轻量级、原生构建的代码编辑器,完全免费且开源。它使用纯 swift 实现,而且专为 macOS 设计,旨在为开发者提供更高效、更可靠的编程环境,同时释放 Mac 的全部潜力。 Stars 数21,719Forks 数1,081 主要特点 macOS 原…