OpenTelemetry Python入门指南2025年3月3日 | 阅读7分钟 引言云原生应用程序已成为许多复杂应用程序的常态,要保持从应用程序到其所依赖系统的可见性,需要持续监控。随着系统的增长及其在层级结构中规模的不断扩大,诸如日志记录和一些基础指标之类的简单直接的方法似乎变得不足甚至不够,无法满足在识别问题、改进性能或保证可靠性方面至关重要的分析任务。可观测性正是我们所处的领域,而可用于实现可观测性的最大资产之一是 OpenTelemetry。 OpenTelemetry (OTel) 是一个开源的、以供应商为中心的可观测性框架,旨在收集和转发分布式系统中的跟踪、指标或日志数据。该概念为开发人员提供了一种标准的从各种服务编译和导出数据的方法,使他们能够更好地理解自己的应用程序。OpenTelemetry 为任何架构 - 从单个单体应用程序到分布式微服务系统 - 提供了跟踪请求、分析系统性能和识别问题的工具。 OpenTelemetry 的关键概念因此,在探索 OpenTelemetry 在 Python 上下文中的具体细节之前,有必要简要了解一下 OpenTelemetry 的定义性概念。它们提供了用于遥测数据收集、处理和导出机制的组件,以帮助开发人员分析他们的应用程序。 跟踪和跨度 跟踪: 跟踪代表请求、事务或任何其他用户活动的整个路径或生命周期,因为它涵盖了多个服务或系统。事实上,跟踪或多或少是一组操作或事件,它们描绘了过程的高级视图。例如,当用户想要向 Web 服务发出请求时,该请求将需要跨越不同的微服务或数据库中的多个操作。此过程中的每个步骤或操作都是跟踪的一部分。 跨度: 跨度用于表示在跟踪中发生的任何一个单独的操作。跨度包含重要方面,例如操作名称,通常伴随着开始时间、停止时间以及与特定操作相关的任何元数据或属性。跨度是跟踪的原子部分,可以是数据库查询请求或完成用户请求等。跨度是分层的,一个跨度可以包含另一个跨度,这使得它们具有父/子关系。 指标 KPI 是系统性能的评估,与其它形式的系统测量相比,它们可以被视为更定量的。它们提供了对系统行为和健康的通用增值理解,因为它们会随着时间收集数据。指标的例子包括
日志 日志是系统中发生的事件的时间戳叙述性记录。它们提供特定时间段的完全详细但有上下文的信息,对于调试和熟悉系统非常有价值。与大多数其他日志框架一样,每个日志条目都包含一个时间戳和一个消息,并且可能包含诸如严重性级别(例如,DEBUG、INFO、WARNING 和 ERROR)之类的可选参数。 上下文传播 上下文传播是 OpenTelemetry 将跟踪、指标和日志跨服务连接的方式。每当一个请求或事务从一个服务传递到另一个服务时(例如,从 Web 服务器到数据库),上下文也会随之传递,以便 OpenTelemetry 能够捕获分布式基础设施中该请求的所有方面。上下文还包括标识信息,例如跟踪 ID 和跨度 ID,它们在任何给定时间都与每个请求或操作一起传递。这有助于确保所有跨度都与正确的跟踪相关联,尤其是在后者可能已在不同的服务或系统中开发的情况下。 OpenTelemetry 原则以下是 OpenTelemetry 在设计和使用中采用的一些原则,以确保它能在不同的平台、语言和服务上和谐工作。现在,让我们看看构成 OpenTelemetry 作为可靠的可观测性解决方案基础的主要原则。
在 Python 中设置 OpenTelemetry步骤 1:安装必需的包 您需要使用 pip 安装 OpenTelemetry 包。根据您的可观测性目标,以下是常用的入门包: 其他可选包包括插桩库、指标以及特定的导出器,如 Jaeger 或 Zipkin,具体取决于您想要使用的后端。 步骤 2:初始化追踪器和导出器 要捕获跟踪数据并将其通过另一个后端发送,您需要创建一个追踪器和一个导出器。 这是一个使用 OTLP(OpenTelemetry Protocol)作为导出器的基本示例。 在此示例中,OtlpSpanExporter 将跟踪数据发送到运行在 localhost:4317 上的端点。您可以根据您的设置配置端点。 步骤 3:启动跟踪 之后,您可以继续捕获跨度,为此,请创建追踪器和导出器。跨度是一个逻辑工作单元,它可以表示跟踪中的请求/响应周期。以下代码演示了如何创建和结束一个跨度: 输出 Hello from OpenTelemetry! 步骤 4:插桩库 要自动跟踪第三方库,如 Flask、Django 或 HTTP 客户端,您可以使用 OpenTelemetry 的插桩库: 然后,在您的代码中插桩该库: 输出 Status Code: 200 例如,这允许 OpenTelemetry 捕获和跟踪使用 requests 库发出的出站 HTTP 请求。 步骤 5:查看遥测数据 要可视化您的跟踪数据,您需要设置一个后端,如 Jaeger 或 Zipkin。对于 Jaeger,您可以使用 Docker 来启动一个本地 Jaeger 实例: 然后,在 Python 中配置 Jaeger 导出器: 并按如下方式修改您的代码: 一切设置完成后,您的跟踪数据将在 Jaeger UI 中可见,地址为 https://:16686。 |
介绍 现代数字时代需要一个完美的开发人员和系统管理员文件管理系统。最常见的任务之一是在文件系统中查找空目录。这些文件夹可能是已卸载程序的残余,一些不完整的...
7 分钟阅读
在当今世界,LinkedIn 连接是 IT 专业人士生活中非常重要的一部分。用户需要向许多其他可能有用的连接发送连接请求,但有时逐个发送请求可能非常耗时且繁琐。难道...
阅读 4 分钟
如何在 Python 中计算 Cramer's V?在以下教程中,我们将学习如何在 Python 编程语言中计算 Cramer's V。那么,让我们开始吧。什么是 Cramer's V?根据定义,Cramer's V 表示两个指定的名义变量之间的长度。一种...
阅读 2 分钟
简介:Python 以其简洁、可读性和通用性而闻名,是深思熟虑的语言设计的力量的证明。goto 语句在计算机编程中具有争议性的历史。最初在 Assembly 和 Fortran 等早期编程语言中作为控制流系统引入,...
7 分钟阅读
?简介:确定列表是否为空在 Python 中对于许多编程任务至关重要。可以使用评估列表布尔值的有效 if 语句来完成此操作。如果列表为空,则返回 False,否则返回 True。...
7 分钟阅读
使用 Python 进行 DoS & DDoS 攻击简介:在本教程中,我们将学习使用 Python 进行 DoS 和 DDoS 攻击。拒绝服务 (DoS) 是一种针对个人计算机或网站的网络攻击,旨在阻止目标用户获得服务。其目的是干扰...
7 分钟阅读
引言 Python,一种通用且功能强大的编程语言,提供了大量的用于处理文件和目录操作的工具和模块。删除目录和文件是软件开发和数据管理中的常见任务。在本文中,我们将探讨各种方法和技术来...
阅读 4 分钟
? 在 Django 中创建超级用户是管理和访问 Django 管理界面的基本步骤。超级用户拥有扩展的权限,允许他们通过管理界面控制和操纵 Django 项目的各种因素。以下是一篇关于创建...
阅读 4 分钟
理解 Python 中的 astype(str) Python 是一种功能强大的语言,以其简洁性和可读性而闻名。其强大功能之一是处理不同数据类型的能力。在处理数据时,尤其是在数据分析或操作的上下文中,您经常会遇到...
阅读 4 分钟
10 种加快 Python 代码速度的方法 Python 是一种高级解释型编程语言,以其简洁和清晰而闻名。它支持几种编程范例,包括过程式、面向对象式和函数式编程。Python 的动态类型和自动内存管理有助于快速开发和...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India