OpenTelemetry 实现方案

news2025/7/17 18:24:06

OpenTelemetry 有很多种组合和实现方案,我们分别来了解一下 OpenTelemetry 在三种不同技术架构下的使用方式。

1、OpenTelemetry to 开源工具组合

作为经典的对各种遥测数据的处理架构,开源工具可将不同类型的数据存储在不同的平台,比如日志存放在 ELK,追踪存放在 Jaeger 这类的 APM 工具,而指标保存在 Prometheus 并通过 Grafana 进行视图展示。组件的整体配置如下图所示:

 我们以一个 SpringBoot 应用为例,解读一下数据采集和传输的过程:

  • 应用服务端和客户端将指标、链路追踪数据推送到 Collector;
  • Front-app 作为前端链路,将链路追踪信息推送到 Collector,并访问应用服务 API;
  • Collector 对数据进行收集和转换后,将数据推送到 Jaeger;
  • 同时, Prometheus 从 Collector 拉取数据。

日志有下面两种收集方式。

方式一,通过 OTLP 上报日志:应用服务端和客户端将日志通过 Exporter 推送到 Collector,再通过 Collector 输出到 Elasticsearch。 但由于 OpenTelemetry 在 log 方面还不稳定,所以推荐单独处理日志,不走 Collector。

方式二,通过 Logback 上报日志:应用服务端和客户端将日志通过 Logback 推送到 Logstash(需要使用 Logstash-Logback 组件,是 Logstash 的 Logback 实现)。这是一种更加推荐的方式。

2、OpenTelemetry to Grafana

随着这两年可观测的流行,Grafana 也开始进军可观测行业。使用 Grafana 对接 OpenTelemetry 的架构如下图所示,这里面主要用到 Grafana Tempo 和 Loki 两个组件。

  •  Grafana Tempo 是一个开源、易于使用且大规模的分布式追踪后端。Tempo 具有成本效益,只需要对象存储即可运行,而且它可以和 Grafana、Prometheus 、 Loki 深度集成。Tempo 可以与任何开源跟踪协议一起使用,包括 Jaeger、Zipkin 、 OpenTelemetry。
  • Loki 是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。Loki 的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而会为每个日志流编制一组标签。

执行流程主要包括以下 4 步。

  • OpenTelemetry 采集输出 Springboot 应用的链路追踪数据,并为对应的日志打上 TraceID、SpanID 等标签。T
  • empo 收集处理 OpenTelemetry 数据并本地化存储,Tempo Query 为 Tempo 的检索后端服务。
  • Loki 收集 Springboot 应用的日志数据。
  • 最后,我们可以通过 Grafana Dashboard 展示和查看 Tempo 链路追踪和日志数据。

“ Grafana Tempo + Loki” 这个组合能够让我们直观地看到日志链路情况,但 Loki 的特性也决定了它并不能高效分析和处理大型生产系统的日志。日志链路只是可观测的一部分,仅仅通过日志链路查询并不能解决大部分问题,特别是在微服务云原生架构时代,多种多样的问题需要我们结合各方面进行分析。

3、OpenTelemetry to 观测云

观测云允许包括开发、测试、运维在内的所有团队成员在一套统一的可观测数据体系下客观分析与定位故障,便于高效地协作。观测云能够采集指标、链路、日志以及所有的可观测数据,并将它们进行关联和整合分析,实现系统完整的可观测性。

观测云的数据采集 Agent 是 DataKit ,它能够支持主机和容器的环境。

  • 在主机环境下, 每个主机都有一个 DataKit , 数据会先打给本地的 DataKit , 由 DataKit 缓存,预处理,然后上报到观测云的数据网关。这就在避免了网络抖动的同时,附带了边缘处理能力,缓解了后台处理数据的压力。
  • 在 Kubernetes 环境下, 每个节点(即 Node)都有一个 DataKit 的 DaemonSet,通过 Kubernetes 的 local traffic 机制,每个节点中 Pod 的数据都会先发送本地的 DataKit。这就在避免网络抖动的同时, 为链路追踪数据增加了 Pod 和 Node 标签,能够有效地关联数据。

由于 DataKit 是接收 OTLP 协议的,所以我们可以把 OpenTelemetry Collector 的 Exporter 设置为 OTLP(指向 DataKit),也可以直接将数据打给 DataKit。因此这里有两种方案。

方案一:

 方案二:

 此文章为3月Day7 学习笔记,内容来源于极客时间《深入浅出可观测性》,推荐该课程。

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

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

相关文章

倒立摆建模

前言 系统由一辆具有动力的小车和安装在小车上的倒立摆组成,系统是不稳定,我们需要通过控制移动小车使得倒立摆保持平衡。 具体地,考虑二维情形如下图,控制力为水平力FFF,输出为角度θ\thetaθ以及小车的位置xxx。 力…

【WebRTC---序篇】(五)信令逻辑

关于信令的几个问题 信令发送的过程信令发送的时机:用户点connec按钮;选中connect按钮后,按回车键; Windows会分发给消息处理机制,而触发OnDefaultAction中调用Conduction的StartLogin; StartLogin里面会调用pcc_client(信令模块)的Connect; 如果是域名,进行域名解析,之后…

SQL注入——布尔盲注

目录 一,盲注的概念 二,盲注分类 三,注入方法的选择 四,关键函数 五,实例 一,盲注的概念 页面没有报错回显,不知道数据库具体返回值的情况下,对数据库中的内容进行猜解&#x…

【历史上的今天】3 月 8 日:游戏机之父诞辰;搜索技术理论之父出生;MIT 公开演示旋风计算机

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 3 月 8 日,在 1857 年的今天,美国纽约制衣和纺织女工举行了首次大型抗议活动。妇女节是纪念妇女权利运动的国际性节日。设立国际妇女节…

【打卡-Coggle竞赛学习2023年3月】对话意图识别

学习链接: https://coggle.club/blog/30days-of-ml-202303 ## Part1 内容介绍 本月竞赛学习将以对话意图识别展开,意图识别是指分析用户的核心需求,错误的识别几乎可以确定找不到能满足用户需求的内容,导致产生非常差的用户体验…

2.6 棋盘覆盖

在一个2*x2‘个方格组成的棋盘中,若怡有一个方格与其他方格不同,则称该方格为特殊方格,且称该棋盘为一特殊棋盘。显然,特殊方格在棋盘上出现的位置有 4种情形因而对任何k0,有4‘种特殊棋盘。图2-4 申的特殊棋益是12时 …

【项目设计】高并发内存池(七)[性能测试和提升]

🎇C学习历程:入门 博客主页:一起去看日落吗持续分享博主的C学习历程博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 也许你现在做的事情,暂时看不到成果,但不要忘记&…

初学JavaScript有困难?看过来,详细安排

你肯定没有尝试归纳,可以把每天学习的内容,用思维导图整理归类,这样看着就清晰多了。把基础入门做成5天的学习计划,其实很简单,你可以参考以下内容 第一天学习目标: 1. 理解变量是存储数据的“容器” 2.…

Linux -- 磁盘存储管理 分区类型(MBR,GPT)

首先呢,大家要清楚,在 Linux 上,分区类型有两种 :一种是MBR, 一种 GPT ~!!!我们所谓的分区、分盘,其实是一回事儿。分区,就是对磁盘划分 逻辑边界, 注意是逻辑…

LAY-EXCEL导出excel并实现单元格合并

通过lay-excel插件实现Excel导出,并实现单元格合并,样式设置等功能。更详细描述,请去lay-excel插件文档查看,地址:http://excel.wj2015.com/_book/docs/%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B.html一、安装这里使用Vue…

带你感受一次JVM调优实战

本文分成两部分,先了解理论,然后再进行实战。 理论篇 1.1 调优目标 JVM调优的两大目标是: 提高应用程序的性能和吞吐量: 通过优化JVM的垃圾回收机制、调整线程池大小和优化代码,可以提高应用程序的性能和吞吐量。…

见证 2022re:Invent 大会及亚马逊云科技发展有感

文章目录📋前言🎯关于亚马逊云科技 re:Invent 全球大会🧩什么是亚马逊云科技 re:Invent 全球大会🧩回顾往届大会🎯回顾2022亚马逊云科技 re:Invent 全球大会🧩前言🧩宣告大数据迈向 Serverless …

【Linux】进程间通信概念匿名管道

文章目录进程间通信介绍进程间通信的本质进程间通信的目的进程间通信的分类管道匿名管道匿名管道原理pipe函数匿名管道通信的4情况5特点读取堵塞写入堵塞写端关闭读端关闭总结进程间通信介绍 进程间通信简称IPC(Interprocess communication):进程间通信…

【信息安全】快速了解密码的加密加盐处理

前言在开发的时候,有一些敏感信息是不能直接通过明白直接保存到数据库的。最经典的就是密码了。如果直接把密码以明文的形式入库,不仅会泄露用户的隐私,对系统也是极其的不厉,这样做是非常危险的。一、常规的登录认证(…

MySQL实战之事务到底是隔离的还是不隔离的

1.前言 我们在MySQL实战之事务隔离:为什么你改了我还看不见讲过事务隔离级别的时候提到过,如果是可重复读隔离级别,事务T启动的时候会创建一个视图read-view,之后事务T执行期间,即使有其他事务修改了数据,事务T看到的…

MAC(m1)-VMWare Fushion安装Windows11

镜像下载地址:登录 账号:11360XXXXX@qq.com 密码:ZXXXSXX19XX 参考:VMware fusion虚拟机安装Win10系统的详细教程_IT大力水手的博客-CSDN博客_vmware fusion安装 uefi和bios有什么区别?uefi和bios的区别详细分析 _ 电脑系统城 设置密码

分布式事务相关问题

分布式事务刚开始是为解决单服务多数据库资源的场景而诞生的。随着技术的发展,特别是 SOA 分布式应用架构以及微服务时代的到来,服务变成了基本业务单元。因此,又产生了跨服务的分布式事务需求。 基于单个服务单一数据库资源访问的事务&#…

在 Python 中拆分具有多个分隔符的字符串

要使用多个定界符拆分字符串: 使用 re.split() 方法,例如 re.split(r,|-, my_str)。re.split() 方法将拆分所有出现的分隔符之一的字符串。 import re# 👇️ 用 2 个分隔符拆分字符串my_str fql,jiyik-dot,commy_list re.split(r,|-, my_…

Http协议Tomcat使用

Web基本知识 课程目标 服务器的安装和配置(了解)服务器和MyEclipse结合(了解)服务器部署项目(掌握)Http协议格式(掌握) 概念 网页,javaweb:使用java语言编写网页 一.网页分类 静态web资源:页面的数据不会发生改变。html,css动…

传统手工数据采集耗时耗力?Smartbi数据填报实现数据收集分析自动化

企业在日常经营管理过程中,往往需要收集很多内外部的信息,清洗整理后再进行存储、分析、呈现、决策支持等各种作业,如何高效收集结构化数据是企业管理者经常要面对的问题。传统手工的数据采集方式不仅耗费了大量人力时间成本,还容…