使用 OpenTelemetry 定制跨度名称并丰富跨度而无需更改代码 - 第 1 部分

作者:来自 Elastic David Hope

OpenTelemetry Collector 提供强大的功能,可以在遥测数据到达可观察性工具之前丰富和细化遥测数据。在这篇博文中,我们将探讨如何利用 Collector 在 Elastic Observability 中创建更有意义的 transaction 名称,从而显著提高监控数据的价值。

OpenTelemetry Collector 提供强大的功能,可以在遥测数据到达可观察性工具之前对其进行丰富和细化。在这篇博文中,我们将探讨如何利用 Collector 在 Elastic Observability 中创建更有意义的事务名称,从而显著提高监控数据的价值。

考虑以下场景:你有一个事务被简单地标记为 “HTTP GET”,平均响应时间为 5 毫秒。但是,这个通用标签掩盖了各种不同的操作 - 付款处理、用户登录和将商品添加到购物车。5 毫秒的平均值是否真正代表了这些不同操作的性能?显然不是。

发生的另一个问题是跨度跟踪变得完全混杂,因此登录跨度和图像服务跨度都成为同一存储桶的一部分,这使得在 Elastic 中进行延迟相关性分析等工作变得困难。

我们将重点介绍一种使用收集器(collector)属性的特定技术,并转换处理器以从 HTTP URL 中提取有意义的信息并使用它来创建更具描述性的跨度名称。这种方法不仅可以提高指标的准确性,还可以增强你快速识别和排除微服务架构中性能问题的能力。

通过结合使用这些处理器,我们可以快速解决过于通用的事务名称问题,创建更精细、更翔实的标识符,从而准确了解服务的性能。

但是,谨慎使用这种技术至关重要。虽然更详细的事务名称可以显著提高可观察性,但也可能导致意想不到的挑战:基数爆炸。在深入研究实施细节时,我们还将讨论如何在粒度和可管理性之间取得适当的平衡,确保我们的解决方案能够增强而不是压倒我们的可观察性堆栈。

在以下部分中,我们将逐步介绍配置,解释每个处理器如何为我们的目标做出贡献,并重点介绍避免基数问题等潜在陷阱的最佳实践。无论你是 OpenTelemetry 的新手还是希望优化现有设置,本指南都将帮助你从遥测数据中获取更有意义的见解。

有关 OpenTelemetry 的更多描述,请参阅文章 “将 Logstash 管道转换为 OpenTelemetry Collector 管道”。

先决条件和配置

如果你打算关注此博客,以下是我们用于设置配置的一些组件和详细信息:

  • 确保你在 Elastic Cloud 上有一个帐户和一个已部署的堆栈(请参阅此处的说明)。
  • 我也在我的环境中使用 OpenTelemetry 演示,这一点很重要,因为这个演示有我想要解决的特定问题。你应该克隆存储库并按照此处的说明进行操作。我建议使用 Kubernetes,我将在我的 AWS EKS(Elastic Kubernetes Service)环境中执行此操作。

OpenTelemetry 演示

OpenTelemetry 演示是一个全面的、基于微服务的应用程序,旨在展示 OpenTelemetry 仪表的功能和最佳实践。它模拟了一个电子商务平台,结合了各种服务,例如前端、购物车、结帐和付款处理。对于希望采用 OpenTelemetry 的开发人员和组织来说,此演示是一个出色的学习工具和参考实现。

该演示应用程序在其互连服务中生成追踪、指标和日志,展示了 OpenTelemetry 如何深入洞察复杂的分布式系统。它特别适合用于尝试不同的采集、处理和可视化技术,是探索可观测性概念和工具(如 OpenTelemetry Collector)的理想实践平台。

通过使用真实场景和常见的架构模式,OpenTelemetry Demo 帮助用户理解如何在自己的应用中有效实现可观测性,以及如何利用这些数据进行性能优化和故障排查。

拥有 Elastic Cloud 实例并启动 OpenTelemetry 演示后,你应该在 Elastic Service Map 页面上看到类似以下内容:

导航到跟踪页面将为你提供以下设置。

如你所见,这里有一些非常广泛的事务名称,如 HTTP GET,并且对于服务中的特定业务功能,平均值不会非常准确,如图所示。

因此让我们使用 OpenTelemetry Collector 来解决这个问题。

OpenTelemetry Collector

OpenTelemetry Collector 是 OpenTelemetry 生态系统中的一个重要组件,它是一种与供应商无关的接收、处理和导出遥测数据的方式。它充当集中式可观察性管道,可以从各种来源收集跟踪、指标和日志,然后将这些数据转换并路由到多个后端系统。

收集器的灵活架构允许通过各种接收器、处理器和导出器轻松配置和扩展,你可以在此处进行探索。我个人发现,浏览 “contrib” 档案对于找到我不知道存在的技术非常有用。这使得 OpenTelemetry Collector 成为希望标准化其可观察性数据管道、减少开销并与不同监控和分析平台无缝集成的组织的宝贵工具。

让我们回到我们的问题,我们如何将 Elastic 使用的事务名称更改为更有用的名称,以便我们的 HTTP GET 转换为类似 payment-service/login 的名称?我们要做的第一件事是获取完整的 http url,并考虑其中哪些部分与我们的交易相关。查看 span 详细信息,我们会看到一个 url

my-otel-demo-frontendproxy:8080/api/recommendations?productIds=&sessionId=45a9f3a4-39d8-47ed-bf16-01e6e81c80bc&currencyCode=

现在,显然我们不想创建映射到每个会话 ID 的事务名称,这会导致我们之前讨论过的基数爆炸,但是,像 URL 'api/recommendations' 的前两个部分看起来正是我们需要的那种东西。

属性处理器 - attribute processor

OpenTelemetry 收集器在这里为我们提供了一个有用的工具,属性处理器可以帮助我们提取 URL 的各个部分,以便稍后在我们的可观察性管道中使用。要做到这一点非常简单,我们只需构建一个如下所示的正则表达式。现在我应该提到,我自己没有生成这个正则表达式,但我使用 LLM 为我做了这件事,再也不用担心正则表达式了!

attributes:actions:- key: http.urlaction: extractpattern: '^(?P<short_url>https?://[^/]+(?:/[^/]+)*)(?:/(?P<url_truncated_path>[^/?]+/[^/?]+))(?:\?|/?$)'

此配置为我们做了一些繁重的工作,因此让我们分解一下:

  • 我们使用属性处理器,它非常适合处理跨度属性。
  • 我们的目标是传入跨度的 http.url 属性。
  • 提取操作告诉处理器使用我们的正则表达式模式提取 URL 的特定部分。

现在,关于该正则表达式 - 它旨在提取两个关键信息:

  • short_url:这将捕获协议、域以及可选的第一个路径段。例如,在 “https://example.com/api/users/profile” 中,它将抓取 “https://example.com/api”。
  • url_truncated_pa​​th:这将捕获接下来的两个路径段(如果存在)。在我们的示例中,它将提取 “users/profile”。

为什么这很有用?好吧,它允许我们根据 URL 结构创建更具体的事务名称,而无需包含可能导致基数爆炸的过于具体的细节。例如,我们避免捕获唯一 ID 或查询参数,因为这些参数会为每个请求创建新的 transaction 名称。

因此,如果我们有一个类似 “https://example.com/api/users/profile?id=123” 的 URL,我们提取的 url_truncated_pa​​th 将是 “users/profile”。这给了我们一个很好的平衡 - 它比 “HTTP GET” 更具体,但又不会太具体以至于我们最终得到数千个唯一的 transaction 名称。

现在值得一提的是,如果你没有要用于命名事务的属性,则值得查看 SDK 或代理的选项,例如,Java 自动检测 Otel 代理具有以下用于捕获请求和响应标头的选项。然后,如果 URL 不足,你可以随后使用此数据来命名你的事务!

在接下来的步骤中,我们将了解如何使用这些提取的信息来创建更有意义的跨度名称,从而为我们的可观察性数据提供更好的粒度,而不会使我们的系统不堪重负。请记住,我们的目标是提高我们的可见性,而不是淹没在过于具体的指标的海洋中!

将所有内容整合在一起

OpenTelemetry 收集器的最终配置如下,请记住,这将进入 opentelemetry-demo/kubernetes/elastic-helm/configmap-deployment.yaml 并使用 kubectl apply -f configmap-deployment.yaml 应用

---
apiVersion: v1
kind: ConfigMap
metadata:name: elastic-otelcol-agentnamespace: defaultlabels:app.kubernetes.io/name: otelcoldata:relay: |connectors:spanmetrics: {}exporters:debug: {}otlp/elastic:endpoint: ${env:ELASTIC_APM_ENDPOINT}compression: noneheaders:Authorization: Bearer ${ELASTIC_APM_SECRET_TOKEN}extensions:processors:batch: {}resource:attributes:- key: deployment.environmentvalue: "opentelemetry-demo"action: upsertattributes:actions:- key: http.urlaction: extractpattern: '^(?P<short_url>https?://[^/]+(?:/[^/]+)*)(?:/(?P<url_truncated_path>[^/?]+/[^/?]+))(?:\?|/?$)'transform:trace_statements:- context: spanstatements:- set(name, attributes["url_truncated_path"])receivers:httpcheck/frontendproxy:targets:- endpoint: http://example-frontendproxy:8080otlp:protocols:grpc:endpoint: ${env:MY_POD_IP}:4317http:cors:allowed_origins:- http://*- https://*endpoint: ${env:MY_POD_IP}:4318service:extensions:pipelines:logs:exporters:- debug- otlp/elasticprocessors:- batch- resource- attributes- transformreceivers:- otlpmetrics:exporters:- otlp/elastic- debugprocessors:- batch- resourcereceivers:- httpcheck/frontendproxy- otlp- spanmetricstraces:exporters:- otlp/elastic- debug- spanmetricsprocessors:- batch- resource- attributes- transformreceivers:- otlptelemetry:metrics:address: ${env:MY_POD_IP}:8888

你会注意到,我们通过将丰富和转换添加到收集器配置底部管道中的跟踪部分,将所有内容联系在一起。这是我们可观察性管道的定义,将我们讨论过的所有部分整合在一起,以创建更有意义且可操作的遥测数据。

通过实施此配置,你将朝着更具洞察力的可观察性迈出重要一步。你不仅仅是在收集数据;你正在对其进行改进,以提供有关应用程序性能的清晰、可操作的见解,请查看下面的最终结果!

准备好将你的可观察性提升到新的水平了吗?

使用 Elastic Observability 实施 OpenTelemetry 为理解和优化你的应用程序开辟了无限可能。但这仅仅是个开始!为了进一步增强你的可观察性之旅,请查看这些宝贵的资源:

  • 使用 Elastic Observability 中的 OpenTelemetry 进行基础设施监控
  • 探索更多 OpenTelemetry 内容
  • 使用 OTel Operator 注入 Java 代理
  • 什么是 OpenTelemetry?

我们鼓励你深入研究,尝试这些配置,看看它们如何转换你的可观察性数据。请记住,关键是在细节和可管理性之间找到适当的平衡。

你是否在你的可观测性管道中实施了类似的策略?我们非常乐意听到你的经验和见解!请在下方评论分享你的想法,或在我们的社区论坛上联系我们。

敬请期待本系列的第二部分,我们将探讨一种高级数据收集技术,该技术可帮助你通过 Java 插件在无需代码的情况下收集更细粒度的数据,包括 Span 名称、上下文信息和指标数据。

原文:Tailoring span names and enriching spans without changing code with OpenTelemetry - Part 1 — Elastic Observability Labs

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

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

相关文章

成都睿明智科技有限公司正规吗靠谱吗?

在这个短视频风起云涌的时代&#xff0c;抖音电商以其独特的魅力&#xff0c;成为了无数商家竞相追逐的新蓝海。而在这片浩瀚的商海中&#xff0c;成都睿明智科技有限公司犹如一艘装备精良的航船&#xff0c;引领着众多企业破浪前行&#xff0c;探索抖音电商的无限可能。今天&a…

GHuNeRF: Generalizable Human NeRF from a Monocular Video

研究背景 研究问题&#xff1a;这篇文章要解决的问题是学习一个从单目视频中泛化的人类NeRF模型。尽管现有的泛化人类NeRF已经取得了令人印象深刻的成果&#xff0c;但它们需要多视图图像或视频&#xff0c;这在某些情况下可能不可用。此外&#xff0c;一些基于单目视频的人类…

中聚企服:打造智能企业服务助手,“中聚AI”解答一切企业难题

近日&#xff0c;一款专为企业用户设计的智能问答助手——“中聚AI”正式亮相市场。这款AI由中产聚融有限公司旗下的中聚企服团队自主研发&#xff0c;旨在帮助企业用户快速、高效地解答经营过程中的各种难题&#xff0c;覆盖从公司注册、财税规划到知识产权和资质办理等多领域…

手把手教你轻松掌握~Air780E软件UDP应用示例!快来看!

还不会的小伙伴看过来&#xff01;通过本文的介绍&#xff0c;相信大家已经掌握了Air780E模组UDP应用的基本操作和常见问题的解决方法。赶快动手实践吧&#xff0c;让你的项目更加高效稳定&#xff01; 1、UDP概述 UDP&#xff08;用户数据报协议&#xff0c;UserDatagramProt…

Win10搭建SFTP服务器

1、下载安装 Release v9.5.0.0p1-Beta PowerShell/Win32-OpenSSH GitHub 下载OpenSSH-Win64.zip 解压之后放入到&#xff1a;C:\Program Files (x86)\OpenSSH-Win64以管理员身份打开CMD进入到 C:\Program Files (x86)\OpenSSH-Win64 文件夹执行命令 powershell.exe -Exec…

1分钟解决Excel打开CSV文件出现乱码问题

一、编码问题 1、不同编码格式 CSV 文件有多种编码格式&#xff0c;如 UTF - 8、UTF - 16、ANSI 等。如果 CSV 文件是 UTF - 8 编码&#xff0c;而 Excel 默认使用的是 ANSI 编码打开&#xff0c;就可能出现乱码。例如&#xff0c;许多从网络应用程序或非 Windows 系统生成的 …

构建灵活、高效的HTTP/1.1应用:探索h11库

文章目录 构建灵活、高效的HTTP/1.1应用&#xff1a;探索h11库背景这个库是什么&#xff1f;如何安装这个库&#xff1f;库函数使用方法使用场景常见的Bug及解决方案总结 构建灵活、高效的HTTP/1.1应用&#xff1a;探索h11库 背景 在现代网络应用中&#xff0c;HTTP协议是基础…

【算法】C++深度优先搜索(DFS)全解析

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

汽车免拆诊断案例 | 2010款起亚赛拉图车发动机转速表指针不动

故障现象  一辆2010款起亚赛拉图车&#xff0c;搭载G4ED 发动机&#xff0c;累计行驶里程约为17.2万km。车主反映&#xff0c;车辆行驶正常&#xff0c;但组合仪表上的发动机转速表指针始终不动。 故障诊断  接车后进行路试&#xff0c;车速表、燃油存量表及发动机冷却温度…

【环境搭建】Apache ZooKeeper 3.8.4 Stable

软件环境 Ubuntu 20.04 、OpenJDK 11 OpenJDK 11&#xff08;如果已经安装&#xff0c;可以跳过这一步&#xff09; 安装OpenJDK 11&#xff1a; $ sudo apt-get update$ sudo apt-get install -y openjdk-11-jdk 设置 JAVA_HOME 环境变量&#xff1a; $ sudo gedit ~/.bash…

solid works下载

软件安装包下载解压打开 将软件安装包下载到电脑本地&#xff0c;使用解压工具进行解压打开&#xff08;下载解压安装全程关闭杀毒软件及防火墙&#xff09; 打开Crack文件夹 打开Crack文件夹进去 复制SolidWorks_Flexnet_Server文件夹 复制SolidWorks_Flexnet_Server文件夹到…

硅谷甄选(10)用户管理

用户管理模块 9.1 静态搭建 主要是el-form、el-pagination <template><el-card style"height: 80px"><el-form :inline"true" class"form"><el-form-item label"用户名:"><el-input placeholder"请…

C语言-详细讲解-打印各种三角形矩阵

目录 1.字符三角形 2. 直角三角形&#xff08;1&#xff09; 3.直角三角形&#xff08;2&#xff09; 4. 打印乘法口诀表 1.字符三角形 入门级&#xff0c;熟悉输入与输出 #include<stdio.h> int main() {char i;scanf("%c",&i);printf(" %c…

图像的特征类别

一 图像的特征类别 1.自然特征 ①光谱特征 ②几何特征 ③时相特征 2.人工特征 ①直方图特征 ②灰度边缘特征 ③线、角点、纹理特征 图像的特征有很多&#xff0c;按提取特征的范围大小又可分为&#xff1a; ①点特征 仅由各个像素就能决定的性质。如单色图像中的灰度值、彩色…

MYSQL--完整性约束

目录 约束 设置约束 方式一 推荐&#xff1a;方式二 删除约束 主键约束 自增列 组合主键, 联合主键 外键约束 给表添加外键约束 注意: 约束 概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 目的&#xff1a;保证数据库中数据的正…

线程池面试点

为什么使用线程池&#xff1f;线程池的作用是什么&#xff1f;线程池的执行顺序&#xff1f;线程池的入参是哪些&#xff1f;分别代表什么意思&#xff1f; 频繁的创建线程与销毁线程,资源耗费与上下文切换时间开销非常大,而线程池可以避免这种情况. 入参有核心线程数,最大线…

IDEA安装(AI)MarsCode插件

1. 注册MarsCode点击注册MarsCode账号 2. 安装MarsCode 第一步: 打开IDEA设置页面, File -> Settings… 第二步: 在左侧导航栏中选择 “Plugins”, 在 “Marketplace” 中搜索"mars", 如图, 点击 “Installed” 第三步: 插件安装完成后, 重启IDEA. 点击右侧导航栏…

软考高项比中项在难度上高多少?

论文这一科难倒了70%的考生&#xff0c;再加上30%的项目管理技能运用知识&#xff0c;使得考生们感到困难重重。题主提到的高额培训费主要是因为论文这一科目的难度较大。虽然直接考取高级资格是理想状态&#xff0c;但有些人可能无法一次成功&#xff0c;因此可以先考取中级资…

飞腾平台Arm ComputeLibrary编译安装指南

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

【数据结构】堆:建堆/向下调整/上向调整/堆排序/TOK问题

文章目录 前言堆的定义1.大小堆2.完全二叉树 堆的实现堆的数据结构初始化销毁取堆顶元素判断堆是否为空父结点和子结点下标关系&#xff08;重要&#xff09; 向下调整法-O(n)小堆版大堆版 向上调整法-nlog(n)堆的插入和删除插入(调用向上调整)删除(调用向下调整) 构建最大堆向…