什么是 OpenTelemetry?

OpenTelemetry 定义

OpenTelemetry (OTel) 是一个开源可观测性框架,允许开发团队以单一、统一的格式生成、处理和传输遥测数据(telemetry data)。它由云原生计算基金会 (CNCF) 开发,旨在提供标准化协议和工具,用于收集和路由指标、日志和跟踪到监控平台。

OpenTelemetry 提供与供应商无关的 SDK、API 和工具,因此你的数据可以发送到任何可观测性后端进行分析。

OpenTelemetry 正迅速成为云原生应用程序中占主导地位的可观测性遥测标准。对于希望为未来的数据需求做好准备而不受特定供应商或现有技术限制的组织来说,采用 OpenTelemetry 至关重要。

那么,什么是遥测数据?

遥测数据包括从分布式系统收集的日志指标跟踪。这三类数据被称为 “可观察性支柱”,可帮助开发人员、DevOps 和 IT 团队了解其系统的行为和性能。

  • 日志(logs):日志是系统中在特定时间点发生的离散事件的文本记录。每次执行代码块时都会生成日志条目。它们通常包含显示事件发生时间的时间戳以及上下文负载。日志数据有多种格式,包括纯文本、结构化和非结构化。日志对于故障排除、调试和验证代码特别有用。
  • 指标(metrics):指标是在时间间隔内测量的数值,通常称为时间序列数据。它们包括时间戳、事件名称和事件值等属性。在现代系统中,指标使我们能够监控、分析和响应问题并促进警报。它们可以告诉你有关基础架构或应用程序的信息,例如系统错误率、CPU 利用率或服务请求率。
  • 跟踪(traces):跟踪表示请求通过分布式系统的路径。OpenTelemetry 中的跟踪(traces)由其跨度(spans)定义。一组跨度构成一个跟踪。跟踪可帮助团队了解请求通过各种服务和组件的端到端旅程和行为。分布式跟踪允许你跟踪完整的执行路径并识别导致问题的代码。跟踪提供了对应用程序整体运行状况的可见性,但对其底层基础架构的可见性有限。要全面了解你的环境,你需要可观察性的另外两个支柱:日志和指标。

OpenTelemetry 简史

OpenTracing 和 OpenCensus 是重叠的分布式跟踪项目,它们独立开发,旨在解决缺乏标准化数据格式的问题。OpenTelemetry 的创建是为了合并 OpenTracing 和 OpenCensus 项目的代码库,将每个项目的优势结合到由云原生计算基金会托管的单个项目中。

OpenTracing 提供与供应商无关的 API,用于将数据发送到后端。OpenCensus 是一组特定于语言的库,开发人员用它来检测他们的代码并将数据发送到后端。两者都是开源的,这意味着软件的源代码是协作开发的,任何人都可以使用、修改和分发。

有了 OpenTelemetry,开发人员不再需要在 OpenTracing 和 OpenCensus 之间做出选择。OpenTelemetry 提供了一套统一的库、API、代理和收集器服务,用于收集和传输数据。

OpenTelemetry 如何工作?

OpenTelemetry 提供了一个通用框架,用于收集遥测数据并将其导出到你选择的 Observability 后端。它使用一组标准化、与供应商无关的 API、SDK 和工具来提取、转换和传输数据。

特定于语言的 OpenTelemetry API 协调整个系统的遥测数据收集并检测你的代码。OpenTelemetry SDK 通过帮助数据收集、处理和导出的库实现和支持 API。OpenTelemetry 还提供服务的自动检测并支持自定义检测。你可以使用供应商提供的导出器或 OpenTelemetry 协议 (OpenTelemetry protocol - OTLP) 导出遥测数据。

OpenTelemetry 的核心组件

OpenTelemetry 的核心组件包括:

收集器

OpenTelemetry 收集器是一个与供应商无关的代理,用于接收、处理和导出遥测数据。它支持接收多种格式的遥测数据,以及在导出之前处理和过滤遥测数据。

语言 SDK

OpenTelemetry 语言 SDK 允许你使用 OpenTelemetry API 生成语言遥测数据并将数据导出到后端。

检测库

OpenTelemetry 支持各种组件,这些组件可从受支持语言的流行库和框架中生成相关的遥测数据。

自动检测

OpenTelemetry 的特定语言实现可以提供一种无需更改源代码即可检测应用程序的方法。

导出器

通过将检测与后端配置分离,导出器可以更轻松地更改后端而无需更改检测。它们还允许你将遥测上传到多个后端。

OpenTelemetry 的优势

OpenTelemetry 的优势在于数据标准化和面向未来的灵活性,从而提高了可观察性、提高了效率并降低了成本。

数据收集标准化

OpenTelemetry 为 DevOps 团队提供了一种解决方案,他们希望以一致的方式收集遥测数据并将其导出到 Splunk、New Relic、Dynatrace 和 Datadog 等后端,而无需更改检测。借助开放标准和标准化数据收集,OpenTelemetry 可以提高可见性并简化可观察性。借助更易于设置的可观察性,团队可以更好地了解系统运行状况、识别性能问题并减少在服务中断之前修复根本原因所需的时间。使用 OpenTelemetry 的组织/单位无需浪费时间开发内部解决方案或研究用于多个应用程序的单个工具。通过减少噪音、成本和配置更改的需求,OpenTelemetry 使组织能够专注于利用数据,而不是数据收集方式。并且可以使用最合理的工具或格式向团队提供见解,从而改善协作。

避免供应商锁定

OpenTelemetry 让团队可以自由选择他们想要的任何后端,而不必受限于特定供应商,从而确保他们的投资面向未来。它可以适应系统、后端和流程的变化,因此你永远不会被锁定在单一平台、解决方案或合同中,从而允许组织随着技术需求的发展而扩展和适应。这种独立性和灵活性意味着你可以根据对你的底线和客户最有利的原则来制定业务决策,而不是技术的限制。

借助 OpenTelemetry,你可以获得可扩展性以适应增长、跨平台兼容性以及与现有监控和可观察性工具的轻松集成。

OpenTelemetry 与 Elastic

OpenTelemetry 提供了一种使用统一遥测格式对应用程序进行检测的标准方法,但它不提供后端或分析组件。Elastic Observability 将 OpenTelemetry 数据无缝集成到开放且可扩展的 Elasticsearch 平台中。

Elastic 原生支持 OpenTelemetry 协议,允许我们提取多种语言的日志、指标和跟踪。这使得大规模利用 Elastic 强大的分析和可视化功能变得更加容易。

2023 年 4 月,Elastic 将其 Elastic Common Schema (ECS) 贡献给 OpenTelemetry,其长期目标是将语义约定与 ECS 融合,形成通用遥测数据模式。Elastic 计划在其数据架构上标准化 OpenTelemetry,并将在未来增加对 OpenTelemetry 项目的投资和合作。

Elastic 也是 OpenTelemetry 项目的强大贡献者。为了帮助管理员监控和排除 CI/CD 平台故障,并帮助开发人员提高 CI/CD 管道的速度和可靠性,Elastic Observability 提供了对 CI/CD 流程的可见性。为了提供管道的监控仪表板、警报和根本原因分析,Elastic 与最流行的 CI/CD 平台(包括 Jenkins、Ansible 和 Maven)的社区合作,使用 OpenTelemetry 来检测工具。

Elastic Observability 是一种企业级解决方案,使组织能够将 OpenTelemetry 检测收集的数据直接发送到 Elastic 部署。它让你可以完全了解你的混合云应用程序,并能够存储、分析和可视化所有内容。你还可以使用 Elastic 强大的机器学习功能来减少分析和恢复时间。

探索 OpenTelemetry 解决方案

OpenTelemetry 资源

  • 开始使用 Elastic 的 OpenTelemetry 收集器
  • 在 Elastic 上使用 OpenTelemetry 实现独立性
  • OpenTelemetry 和 Elastic Stack

OpenTelemetry 常见问题解答

OpenTelemetry 是标准吗?

是的。OpenTelemetry 是一个开源项目,也是日志、跟踪和指标的统一标准。

遥测的例子有哪些?

遥测数据的例子包括系统监控和可观察性中使用的日志、指标和跟踪。

OpenTelemetry 和 Jaeger 有什么区别?

OpenTelemetry 可帮助你处理数据并将其导出到各种开源和商业后端,但它不是像 Jaeger 这样的可观察性后端。虽然 OpenTelemetry 提供了一组 API、SDK 和工具来帮助生成和管理遥测数据,但 Jaeger 是一个开源分布式跟踪工具。IT 团队使用 Jaeger 来监控和排除基于微服务架构的应用程序故障。Jaeger 不支持日志和指标。

OpenTelemetry API 和 SDK 有什么区别?

OpenTelemetry API 或应用程序编程接口可协调整个系统的遥测数据收集并检测你的代码。由于 API 是特定于语言的,因此它们必须与你的代码语言相匹配。OpenTelemetry SDK 或软件开发工具包通过库来实现和支持 API,这些库有助于数据收集、处理和导出到可观察性后端。

相关 OpenTelemetry 术语词汇表

  • APIApplication Programming Interface - 应用程序编程接口):定义用于生成和关联遥测数据的数据类型和操作。API 包由用于检测的跨领域公共接口组成。
  • SDKSoftware Development Kit - 软件开发工具包):OpenTelemetry 项目提供的 API 的实现。在应用程序中,SDK 由应用程序所有者安装和管理。
  • 分布式跟踪(Distributed tracing):分布式跟踪允许你跟踪完整的执行路径并识别导致问题的代码。

  • Jaeger:Jaeger 是一个开源分布式跟踪工具,IT 团队使用它来监控和排除基于微服务架构的应用程序故障。
  • 可观察性(Observability):可观察性提供了对在复杂环境中运行的应用程序行为的详细洞察和背景信息,使团队能够使用遥测数据了解其应用程序、服务和基础设施的运行情况,并实时和历史地跟踪和响应问题。
  • 跟踪(Traces):跟踪表示请求通过分布式系统的路径。OpenTelemetry 中的跟踪由其跨度定义。跟踪可帮助团队了解请求通过各种服务和组件的端到端旅程和行为。
  • 指标(Metrics):指标是在时间间隔内测量的数值。它们包括时间戳、事件名称和事件值等属性。日志:日志是系统中在特定时间点发生的离散事件的文本记录。每次执行代码块时都会生成日志条目,通常包含时间戳。

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

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

相关文章

ESP32 gptimer通用定时器初始化报错:assert failed: timer_ll_set_clock_prescale

背景:IDF版本V5.1.2 ,配置ESP32 通用定时器,实现100HZ,占空比50% 的PWM波形。 根据乐鑫官方的IDF指导文档设置内部计数器的分辨率,计数器每滴答一次相当于 1 / resolution_hz 秒。 (ESP-IDF编程指导文档&a…

AIGC在游戏设计中的应用及影响

文章目录 一、AIGC的基本概念与背景AIGC的主要应用领域AIGC技术背景 二、AIGC在游戏设计中的应用1. 自动化游戏地图与关卡设计示例:自动生成2D平台游戏关卡 2. 角色与物品生成示例:使用GAN生成虚拟角色 3. 游戏剧情与任务文本生成示例:基于GP…

【NOIP普及组】统计单词数

【NOIP普及组】统计单词数 💐The Begin💐点点关注,收藏不迷路💐 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。 现在&#x…

Spring Security(5.x, 6.x ) RBAC访问控制

在 Spring Security 中,基于不同版本实现 RBAC(基于角色的访问控制)功能有一些不同的方式。RBAC 的基本原理是:定义用户、角色和权限的关系,并控制不同用户对资源的访问。 Spring Security 不同版本的实现主要在配置方…

Unity 如何优雅的限定文本长度, 包含对特殊字符,汉字,数字的处理。实际的案例包括 用户昵称

常规限定文本长度 ( 通过 UntiyEngine.UI.Inputfiled 附带的长度限定 ) 痛点1 无法对中文,数字,英文进行识别,同样数量的汉字和同样数量的英文像素长度是不一样的,当我们限定固定长度后,在界面上的排版不够美观 痛点2…

多个服务器共享同一个Redis Cluster集群,并且可以使用Redisson分布式锁

Redisson 是一个高级的 Redis 客户端,它支持多种分布式 Java 对象和服务。其中之一就是分布式锁(RLock),它可以跨多个应用实例在多个服务器上使用同一个 Redis 集群,为这些实例提供锁服务。 当你在不同服务器上运行的…

jmeter常用配置元件介绍总结之函数助手

系列文章目录 1.windows、linux安装jmeter及设置中文显示 2.jmeter常用配置元件介绍总结之安装插件 3.jmeter常用配置元件介绍总结之取样器 jmeter常用配置元件介绍总结之函数助手 1.进入函数助手对话框2.常用函数的使用介绍2.1.RandomFromMultipleVars函数2.2.Random函数2.3.R…

发现了NitroShare的一个bug

NitroShare 是一个跨平台的局域网开源网络文件传输应用程序,它利用广播发现机制在本地网络中找到其他安装了 NitroShare 的设备,从而实现这些设备之间的文件和文件夹发送。 NitroShare 支持 Windows、macOS 和 Linux 操作系统。 NitroShare允许我们为…

【 ElementUI 组件Steps 步骤条使用新手详细教程】

本文介绍如何使用 ElementUI 组件库中的步骤条组件完成分步表单设计。 效果图: 基础用法​ 简单的步骤条。 设置 active 属性,接受一个 Number,表明步骤的 index,从 0 开始。 需要定宽的步骤条时,设置 space 属性即…

互联网技术净土?原生鸿蒙开启全新技术征程

鸿蒙生态与开发者的崭新机会 HarmonyOS NEXT承载着华为对未来操作系统的深刻理解,如今已发展为坚实的数字底座。它不仅在技术层面取得了全面突破,还在中国操作系统市场中站稳了脚跟。 当前,HarmonyOS NEXT的代码行数已超过1.1亿&#xff0c…

[linux驱动开发--API框架]--platform、gpio、pinctrl

1. 结构体定义和实例化 // 这个结构体样式并不固定,按需增减成员,可以参考内核的其他驱动代码 struct leddev_dev{dev_t devid; /* 设备号*/struct cdev cdev; /* cdev*/struct class *class; /* 类*/struct device *d…

从书本到代码:人工智能如何改变教育游戏规则?

内容概要 随着时代的发展,人工智能在教育领域展现出前所未有的潜力,成为推动教育改革的重要力量。它不仅仅是一种技术工具,更是一种变革的催化剂,促使传统教育模式必须进行自我反思和更新。通过利用智能算法,教育者可…

发布一个npm组件库包

Webpack 配置 (webpack.config.js) const path require(path); const MiniCssExtractPlugin require(mini-css-extract-plugin); const CssMinimizerPlugin require(css-minimizer-webpack-plugin); const TerserPlugin require(terser-webpack-plugin);module.exports {…

C#语言:现代软件开发的核心工具

在当今快速发展的软件行业,C#(发音为“C sharp”)已成为开发人员广泛采用的一种编程语言。它由微软公司开发,旨在提供强大的功能、简洁的语法和广泛的适用性。自2000年首次发布以来,C#已成为构建各种类型应用程序的理想…

若Git子模块的远端地址发生了变化本地应该怎么调整

文章目录 前言git submodule 相关命令解决方案怎么保存子模块的版本呢总结 前言 这个问题复杂在既有Git又有子模块,本身Git的门槛就稍微高一点,再加上子模块的运用,一旦出现这种远端地址发生修改的情况会让人有些懵,不知道怎么处…

长视频为什么在广告市场上节节败退?

作者:刀客doc 在广告市场,长视频网站的吸引力在减小,这是不争的事实。不过最近我发现,这一趋势还在加剧。 近期,一份QuestMobile的数据预测了互联网各类媒介的市场份额。其中5年来,在线视频广告的份额年年…

Kubernetes-编排工具篇-01-Kustomize与Helm对比

Kustomize与Helm对比 0、前言 K8s 是一个开源容器编排平台,可自动执行容器化应用程序的部署、扩展和管理。近年来,K8s 已成为采用云原生架构和容器化技术的组织的标准。 但是由于K8s的复杂性,所以很多公司以及开源组织都在开发相关的工具来…

量子电路的实现 基于ibm的qiskit

量子计算的物理实现 量子计算的实现有几种方式,最常用的就是超导量子计算机,它的量子处理器是用超导传输量子比特构建的,它是由一个约瑟夫森结和一个并联的电容器组成的电路。约瑟夫森结是一种非线性电感,由两层重叠的超导…

【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用

创建个性化的GPTs应用是一个涉及技术、设计和用户体验的过程。以下是详细步骤: ###1.确定应用目标和用户群体 在开始之前,你需要明确你的应用的目标和目标用户。这将帮助你在设计、开发和个性化方面做出相应的决策。例如,如果你的应用是为了…

cmake中execute_process详解

execute_process 是 CMake 中一个非常强大的命令&#xff0c;用于在构建过程中执行外部程序或脚本。它提供了丰富的选项来控制执行过程&#xff0c;并可以捕获输出、错误和返回码。以下是 execute_process 的详细解析&#xff1a; 基本语法 execute_process(COMMAND <comm…