跳至页脚内容
PYTHON 帮助

在 Python 应用程序中使用 OpenTelemetry

有效的文档生成和可观察性是当代软件开发中开发可扩展和有弹性系统的基本基础。 开发人员可以使用OpenTelemetry这一开源可观察性平台,对分布式系统进行检测、收集和分析可观察数据。

开发人员可以轻松地使用IronPDF这一强大的.NET框架创建、修改和输出PDF文档。 本文将探讨OpenTelemetry Python与IronPDF的集成,展示这两种技术如何协同工作以提高可观察性和文档生成的潜力。

通过使用OpenTelemetry API和SDK包,开发人员可以访问大量的功能集,以检测、收集和导出分布式系统的开放遥测和数据,这是一个在Python中实现的OpenTelemetry项目。

OpenTelemetry Python(开发人员工作原理):图1 - OpenTelemetry主页

OpenTelemetry功能

让我们来审视OpenTelemetry用Python编写的特点:

分布式跟踪

  • 分布式跟踪使开发人员能够通过分布式系统的请求路径进行跟踪,这由OpenTelemetry for Python支持。
  • 跟踪提供了对请求序列的见解,包括服务交互的日期和时间。
  • 开发人员可以检测Python程序以记录跨度,这些跨度是分布式跟踪的离散动作或部分。

指标收集

  • OpenTelemetry Python通过导入MeterProvider来提供指标,它收集关于系统行为和性能的数值数据。
  • 开发人员可以检测他们的应用程序以收集如延迟、吞吐量、错误率和资源使用等测量。
  • 这些指标通过提供对使用模式、性能趋势和系统健康的见解,有助于理解系统行为。

上下文传播

  • 上下文传播通过OpenTelemetry API包变得更加容易,这确保了分布式上下文(如跟踪和跨度上下文)在服务边界之间传播。
  • 上下文传播使遥测数据在系统移动过程中可以关联和上下文化,从而保持数据的连续性和一致性。

检测库

  • OpenTelemetry Python通过提供用于广泛使用的框架、库和协议的检测包,使得现有的Python应用程序检测变得简单。
  • 检测库中可以找到用于Web框架(如Flask和Django)、数据库客户端(如SQLAlchemy和Pymongo)、消息系统(如Kafka和RabbitMQ)和更多的集成。

导出器生态系统

  • OpenTelemetry Python提供的一系列导出器,使开发人员可以将遥测数据导出到不同的可观察性系统和后端。
  • 导出器支持与可观察性平台诸如Jaeger、Zipkin、Prometheus、AWS X-Ray、Google Cloud Trace等集成。
  • 开发人员可以设置导出器,以将遥测数据传输到一个或多个后端,进行长期存储、分析和显示。
  • OpenTelemetry Python支持可变采样技术,以管理收集到的遥测数据量。
  • 开发人员可以选择应用自定义采样逻辑,设置采样以采样一定百分比的跟踪,或者根据预定义参数采样(如请求头或路由)。

上下文记录

  • OpenTelemetry Python SDK提供编码遥测数据之外的上下文数据记录的工具。
  • 开发人员可以通过上下文记录将跟踪和跨度上下文添加到日志消息中,这为故障诊断和调试提供了更多上下文。

创建和配置OpenTelemetry Python

设置OpenTelemetry配置

要为你的项目设置OpenTelemetry,可以先通过pip install opentelemetry-exporter-jaeger指令安装所需的包。

pip install opentelemetry-exporter-jaeger
pip install opentelemetry-exporter-jaeger
SHELL

以后,使用以下命令安装OpenTelemetry Python SDK:

pip install opentelemetry-sdk
pip install opentelemetry-sdk
SHELL

opentelemetry-api pip包提供了全面的检测API,并提供自动检测,使你的应用程序检测变得更加容易。 另一种方法是使用导出-导入BatchSpanProcessor方法,以确保高效的遥测数据导出。

要定义OpenTelemetry SDK参数,请创建一个配置文件。配置文件otel_config.py用作示例。 确保所有导入如resources导入Resourcetrace导入TracerProvider都存在,以便无错误地设置代码示例。

from opentelemetry import trace
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.jaeger.thrift import JaegerExporter

# Configure Jaeger exporter
jaeger_exporter = JaegerExporter(
    agent_host_name="localhost",
    agent_port=6831,
)

# Create a TracerProvider with Jaeger exporter
tracer_provider = TracerProvider(resource=Resource.create({'service.name': 'my-python-service'}))
tracer_provider.add_span_processor(BatchSpanProcessor(jaeger_exporter))
trace.set_tracer_provider(tracer_provider)
from opentelemetry import trace
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.jaeger.thrift import JaegerExporter

# Configure Jaeger exporter
jaeger_exporter = JaegerExporter(
    agent_host_name="localhost",
    agent_port=6831,
)

# Create a TracerProvider with Jaeger exporter
tracer_provider = TracerProvider(resource=Resource.create({'service.name': 'my-python-service'}))
tracer_provider.add_span_processor(BatchSpanProcessor(jaeger_exporter))
trace.set_tracer_provider(tracer_provider)
PYTHON

在这个配置文件中:

  • Jaeger导出器被设置为将跟踪导出到本地主机Jaeger代理。
  • 使用Jaeger导出器,我们构建了一个TracerProvider并配置它为全球跟踪提供者。
  • 我们为我们的Python程序提供服务名称。

在您的应用程序中初始化OpenTelemetry

otel_config模块导入到你的Python程序中,然后使用以下示例Python代码在开始时初始化OpenTelemetry:

from opentelemetry import trace
from otel_config import tracer_provider

# Initialize OpenTelemetry
trace.get_tracer(__name__)
from opentelemetry import trace
from otel_config import tracer_provider

# Initialize OpenTelemetry
trace.get_tracer(__name__)
PYTHON

通过这样做,otel_config.py中找到的配置被初始化用于OpenTelemetry检测。

检测您的应用程序

使用OpenTelemetry检测您的Python程序,以便能够记录跟踪。 您有两种检测代码的选择:手动或通过内置库。 这是一些手动检测调用的例子:

from opentelemetry import trace

# Start a span
with trace.get_tracer(__name__).start_as_current_span("example_span"):
    # Your code here
    pass
from opentelemetry import trace

# Start a span
with trace.get_tracer(__name__).start_as_current_span("example_span"):
    # Your code here
    pass
PYTHON

在Jaeger UI查看跟踪

要查看和检查记录的跟踪,请前往Jaeger用户界面。 要查看OpenTelemetry收集器记录的跟踪,请打开Web浏览器中的Jaeger UI(通常在http://localhost:16686)并选择您的服务名。

通过遵循这些说明,您已在应用程序中成功建立和配置OpenTelemetry Python。 现在,您可以使用OpenTelemetry来记录跟踪并将其导出到Jaeger后端,从而查看您的Python程序的行为和性能。

开始使用 IronPDF.

什么是 IronPDF? 通过来自Iron Software的强大的.NET库IronPDF,开发人员可以在.NET应用程序中创建、编辑和展示PDF文档。 开发人员可以使用IronPDF从多种来源编程性地创建PDF文档,例如现有的PDF文件、HTML文本、URL和图像。 让我们仔细看看IronPDF的特性: ![OpenTelemetry Python(开发人员工作原理):图2 - IronPDF主页](/static-assets/pdf/blog/opentelemetry-python/opentelemetry-python-2.webp) ### 将HTML转换为PDF 开发人员可以轻松地将HTML内容转换为PDF文件,使用IronPDF。 通过将HTML文本作为输入,开发人员可以生成具有格式、图像和样式的视觉丰富的PDF文档。 ### 将URL转换为PDF 开发人员可以使用IronPDF直接从URL生成PDF文档。 这种功能的一个极好的应用是从网页捕获内容或从Web应用程序动态生成的内容。 ### 将图像转换为PDF 使用IronPDF,PNG、JPEG和BMP格式的图像可以转换为PDF文档。 此功能让应用程序开发人员可以从照片创建PDF文档,这对制作图片专辑或将照片纳入PDF文件的应用程序非常有用。 ### 如何安装IronPDF 在确认您的计算机上已经安装了Python之后,使用`pip`安装IronPDF。 ```shell :ProductInstall ``` ### 使用OpenTelemetry与IronPDF生成PDF文档 在OpenTelemetry初始化之后,添加以下代码以使用IronPDF[创建PDF](/python/examples/using-html-to-create-a-pdf/)文档: ```python from ironpdf import ChromePdfRenderer from opentelemetry import trace # Generate PDF document with IronPDF with trace.get_tracer(__name__).start_as_current_span("pdf_generation"): iron_pdf = ChromePdfRenderer() html_content = "

Hello, IronPDF!

" pdf_content = iron_pdf.render_html_as_pdf(html_content) # Save or send the PDF content as needed with open("output.pdf", "wb") as file: file.write(pdf_content) ``` 在这段代码中: * 使用OpenTelemetry跟踪器,我们开始一个名为`pdf_generation`的新跨度。 * 我们使用IronPDF将HTML材料转换为PDF文档。 * 生成的PDF材料包含在一个名为`output.pdf`的文件中。 ![OpenTelemetry Python(开发人员工作原理):图3 - 从上面代码生成的示例输出](/static-assets/pdf/blog/opentelemetry-python/opentelemetry-python-3.webp) ## 结论 最终,由OpenTelemetry Python和IronPDF连接提供的组合在Python应用程序中提供了可观察性和文档生成能力。 通过将分布式跟踪与动态PDF生成相结合,开发人员可以在获得更好系统性能见解的同时轻松动态生成专业外观的文档。 随着公司在软件解决方案中追求效率和卓越,OpenTelemetry Python与IronPDF的结合作为一个强大的推动者,使开发人员能够创建可靠、可伸缩和高性能的应用程序。 IronPDF随附的终身许可证,当以套装购买时价格合理。 套装售价仅为$799,一次购买即可适用于多个系统,是一个非常划算的交易。 持牌用户全天候在线可获得工程帮助。请访问网站以了解更多关于收费的信息。 访问此页面以了解更多关于Iron Software出售的产品。
Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。