Opentelemetry 项目解读

Opentelemetry 解读

1. 什么是 Opentelmetry

Ot 统一了可观测的三个重要维度:分别是 Trace,Log,Metrics。

在没有 ot 之前,不同维度的可观测组件都是不同的:

  1. 在 Trace 领域:skywalking 一直很受欢迎;
  2. 在 Metrics 领域:主要以 Prometheus 为主,VictoriaMetric 也很受欢迎,占用资源更少;
  3. 在 Log 领域:ELK 经久不衰。

不过为了解决可观测这一问题,同时引入三个组件,导致技术栈众多,维护麻烦。ot 便是为了解决这个问题,让开发者能花费少量精力完成可观测建设。

由 OpenTracing,OpenCensus 合并共同发展而来。现在已经是 CNCF 的顶级项目了,并且受到了很多大厂的支持。

1.1 OpenTelmetry 架构

请添加图片描述

从上图中看到,整个 Oentelmetry 系统可以分为三个组成部分。

1.1.1 客户端

客户端就是我们编写得业务系统的服务,用 Go 或者 Java 编写。如果是 Java 应用,在 ot 中,只需要挂载一个 agent 就可以采集到系统的指标,链路和日志数据上传到 Collector 中。既架构图中的左边部分。

1.1.2 Otel Collector

请添加图片描述

ot 在设计最初的目的是要做到厂商无关性,不和任意一个厂商或者产品绑定。因此在 collector 做了更高层的抽象设计。

如图中的数据接受和导出组件,Reciver 和 Exporter。都采用可插拔的设计方式。第三方的开发者可以基于 ot 的标准协议开发不同的 Reciver 和 Exporter 组件来兼容不同的产品,从而做到厂商无关性。

Receiver:用于接受客户端上报的数据,不止是来自 agent 的数据,也有可能来自不同的服务产品。例如 k8s,kafka 等。

Exporter:在接收到 Recevier 的数据,由 collector 处理之后可以将其输出到不同的组件中,比如:Kafka,Jaeger 等。

在使用 ot 时,我们可以使用 Nginx Recevier 接受来自 nginx 的数据,使用 MySQL Recevier 接受来自 MySQL 的数据等。通常使用最多的是 otel Recevier,ot 官方的 OTLP 协议的数据接收器,接受来自 ot 的一些指标。例如只使用了 Java agent 上报可观测数据时。

Exporter 主要负责将不同的指标数据写入到不同的组件中,例如将指标相关数据写入到 Prometheus,日志写入到 es 等。

对比之下,ot collector 的 Receiver 和 Exporter 可以非常灵活的搭配,数据存储的变更,不会直接影响到业务系统。业务系统只需要按照 OTLP 协议的格式上报数据即可。

2. Opentelmetry 项目

从上面的架构图了解到:ot 的整个项目主要分为客户端和 collector 端。除了 java 之外,ot 还支持其他语言的客户端。大部分都达到了生产可用的程度。

接下来,深入了解下 opentelemetry-java 和 opentelemetry-java-instrumentation。

在日常使用中,用到最多的项目是:opentelemetry-java-instrumentation。提供了 ot 的 java agent 。

在启动项目时,只需要加上 java agent 就可以自动实现可观测数据的上报:

java -javaagent:path/to/opentelemetry-javaagent.jar -jar myapp.jar

2.1 opentelemetry-java

opentelemetry-java-instrumentation 基于 opentelemetry-java 创建。是 ot Java 版本的核心基础库。

2.2 opentelemetry-java-instrumentation

集成了常用的 Java 的不同框架,库的可观测数据。

其他项目大致结构类似。例如 collector 分为:OpenTelemetry CollectorOpenTelemetry Collector Contrib

opentelemetry-collector:由 ot 官方维护,提供最基础的核心能力;比如只包含了最基本的 otlp 的 receiver 和 exporter。

opentelemetry-collector-contrib:包含了官方的 collector,同时维护了社区提供的各种 receiver 和 exporter;就如上文提到的,一些社区组件(pulsar、MySQL、Kafka)等都维护在这个仓库。

3. 总结

OpenTelemetry 想要解决的是整个可观测领域的所有需求,做到真正的厂商无关性,因此自身有非常多的 Receiver 和 Exporter。

下一篇文章中,将会介绍如何在 opentelemetry-java-instrumentation 仓库中为 Java 库和框架提供可观测支持。

3.1 参考链接:

https://juejin.cn/post/7358450927110357026?from=search-suggest

https://opentelemetry.io/ecosystem/registry/

open-telemetry/opentelemetry-java-instrumentation: OpenTelemetry auto-instrumentation and instrumentation libraries for Java

https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/supported-libraries.md#libraries–frameworks

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

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

相关文章

与终端同居日记:Linux指令の进阶撩拨手册

前情提要: 当你和终端的关系从「早安打卡」进阶到「深夜代码同居」,那些曾经高冷的指令开始展露致命の反差萌—— man 是那个永远在线的钢铁直男说明书,只会说:"想懂我?自己看文档!"&#xff08…

Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合

摘要 本文以原理与示例结合的形式讲解 Java 开发者如何基于 Spring AI Alibaba 框架玩转 MCP,主要包含以下内容。 1. 一些 MCP 基础与快速体验(熟悉的读者可以跳过此部分) 2. 如何将自己开发的 Spring 应用发布为 MCP Server,验…

【面试向】欠拟合和过拟合、正则化(Regularization)

训练集、验证集和测试集泛化误差过拟合(Overfitting)和 欠拟合(Underfitting)如何区分过拟合和欠拟合?欠拟合 —— 在训练集和验证集上都表现很差过拟合 —— 在训练集上表现很好,但在验证集或测试集上表现…

ClawCloud的免费空间(github用户登录可以获得$5元/月的免费额度)

免费的空间 Welcome to ClawCloud Lets create your workspace 官网:ClawCloud | Cloud Infrastructure And Platform for Developers 区域选择新加坡 然后这个页面会变成新加坡区域,再按一次确定,就创建好了工作台。 初始界面&#xff0…

Spring Boot + Caffeine:打造高性能缓存解决方案

1. 引言 1.1 缓存的重要性 缓存是提升系统性能的关键技术之一,通过将频繁访问的数据存储在内存中,减少对数据库或其他外部系统的访问次数,从而降低延迟并提高吞吐量。 缓存的基本概念:缓存是一种临时存储机制,用于快速访问常用数据。缓存在提升系统性能中的作用:减少数…

每天学一个 Linux 命令(24):chattr

​​可访问网站查看,视觉品味拉满: http://www.616vip.cn/24/index.html 每天学一个 Linux 命令(24):chattr 命令简介 chattr(Change Attribute)用于修改文件或目录的底层属性(如防删除、防修改),这些属性比普通权限更严格。常用于保护重要文件或优化文件系统行为。…

【java 13天进阶Day04】常用API、正则表达式,泛型、Collection集合API

Math类的使用。 Math用于做数学运算。Math类中的方法全部是静态方法,直接用类名调用即可。方法: public static int abs(int a) 获取参数a的绝对值public static double ceil(double a) 向上取整public static double floor(double a) 向下取整public s…

如何系统地入门学习stm32?

如何系统地入门学习stm32? 作为一个在嵌入式领域摸爬滚打十余年的工程师,看到这个问题,我不禁想起自己当年啃着厚重的数据手册,对着一块蓝色的PCB板冥思苦想的日子。STM32的学习之路,说难不算特别难,说简单…

考公:数字推理

文章目录 1.真题12 312 530 756 ()-3 3 1 12 17 ()356 342 333 324 ()30 28 27 25 () 2215105 1494 1383 1272 ()2 3 8 21 46 ()4/25 1/4 4/9 1 ()39 416 630 848 ()5 8 11 17 () 10714 21 40 77 () 229 2.数字推理方法2.1 差值法2.2 比值法(乘法关系)2.…

自动化测试相关协议深度剖析及A2A、MCP协议自动化测试应用展望

一、不同协议底层逻辑关联分析 1. OPENAPI协议 OPENAPI 协议核心在于定义 API 的规范结构,它使用 YAML 或 JSON 格式来描述 API 的端点、请求参数、响应格式等信息。其底层逻辑是构建一个清晰、标准化的 API 描述文档,方便不同的客户端和服务端进行对接…

2025.04.17【Dendrogram】生信数据可视化:Dendrogram图表详解

Dendrogram customization Go further with ggraph: edge style, general layout, node features, adding labels, and more. Customized circular dendrogram Learn how to build a circular dendrogram with proper labels. 文章目录 Dendrogram customizationCustomized c…

SRS流媒体服务器

SRS流媒体服务器简介 SRS(Simple RTMP Server)是一个开源的流媒体服务器,主要用于直播和WebRTC场景。以下是关于SRS的关键信息: 主要特性 支持多种协议:RTMP、HTTP-FLV、HLS、WebRTC、SRT等低延迟:特别优化了WebRTC和HTTP-FLV的…

R语言之环境清理

有时候 R 环境中残留的变量可能会导致警告,可以尝试清理工作空间并重新加载数据。 警告信息: In mget(objectNames, envir ns, inherits TRUE) : 重新评估被中断的许诺 # 观察前6行 head(iris)# 观察数据结构 str(iris)# 探知数据的极值和分位数,以及…

RAG工程-基于LangChain 实现 Naive RAG

摘要 本篇文章以实现简单的第一范式 RAG-Naive RAG为目标,并最终创建并实现一个基于RAG的论文分析器的项目。 LangChain 文档加载 文档加载是 RAG 流程的起点,它负责从各种数据源读取原始文档,将其转化为程序可处理的格式。LangChain 支持多…

Rust网络编程实战:全面掌握reqwest库的高级用法

一、开篇导引 1.1 对比Python Requests解释为何reqwest是Rust生态的标杆HTTP客户端 在Python生态中,Requests 库以其简洁易用的API成为了HTTP客户端的首选。它使得开发者能够轻松地发送各种HTTP请求,处理响应,而无需过多关注底层细节。然而…

k8s中sidecar死循环

序言 怎么发现我的同事们很上进呢,估计做了下贱的事儿吧。 伤不到我,不代表不疼! sidecar产生的问题 1 背景 在k8s的环境中,pod的使用越来越多了,也就产生了sidecar容器,在现在的环境中,一个pod…

Day53 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* T…

C盘清理技巧分享

一、系统级深度清理 1. 存储感知自动化 路径:设置 → 系统 → 存储 → 开启「存储感知」配置策略: 临时文件:每 1-2 周自动清理回收站:超过 30 天自动清空应用缓存:按需求设置清理频率进阶操作:在「高级存储设置」中关闭「传递优化」(减少更新缓存占用)2. 磁盘清理工具…

面试题--随机(一)

MySQL事务中的ACID特性? A 原子性 事务是一组SQL语句,不可分割 C 一致性 事务中的SQL语句要么同时执行,即全部执行成功,要么全部不执行,即执行失败 I 隔离性 MySQL中的各个事务通过不同的事务隔离等级,产生…

Spring Boot资源耗尽问题排查与优化

Spring Boot服务运行一段时间后新请求无法处理的问题。服务没有挂掉,也没有异常日志。思考可能是一些资源耗尽或阻塞的问题。 思考分析 首先,资源耗尽可能涉及线程池、数据库连接、内存、文件句柄或网络连接等。常见的如线程池配置不当,导致…