跳過到頁腳內容
PYTHON 幫助

在 Python 應用中使用 OpenTelemetry

在當代軟體開發中,有效的文件生成和可觀察性是開發可擴展和高穩定性系統的基本基礎。 開發人員可以使用 OpenTelemetry 這個開源的可觀察性平台對分佈式系統進行儀器化、數據收集和分析可觀察性數據。

使用強大的 .NET 框架 IronPDF,開發人員可以輕鬆創建、修改和輸出 PDF 文檔。 本文將討論 OpenTelemetry Python 與 IronPDF 的集成,展示這兩種技術如何協同工作以提升可觀察性和文件生成的潛力。

開發人員可以使用 OpenTelemetry API 和 SDK 套件這一 Python 的 OpenTelemetry 項目實現,以訪問大量的功能來為分佈式系統中開放的遙測和數據進行儀器化、收集和匯出。

OpenTelemetry Python (它如何為開發者服務): 圖 1 - OpenTelemetry 主頁

OpenTelemetry 功能

讓我們來檢查OpenTelemetry為 Python 提供的重要特徵儀器化:

分佈式跟踪

  • 分佈式跟踪使開發人員能夠通過分佈式系統跟隨請求的路徑,這是 OpenTelemetry for Python 提供的功能。
  • Trace 提供了請求序列的見解,包括服務連接的日期和時間。
  • 開發人員可以對 Python 程序進行儀器化以記錄 span,這是分佈式跟踪中的離散動作或部分。

指標收集

  • OpenTelemetry Python 支持通過 MeterProvider 匯入指標,收集有關系統行為和性能的數字數據。
  • 開發人員可以對其應用程序進行儀器化以收集如延遲、吞吐量、錯誤率和資源使用量等度量。
  • 此類指標透過提供使用模式、性能趨勢和系統健康狀況的見解,有助於理解系統行為。

上下文傳播

  • OpenTelemetry API 套件使上下文傳播變得更容易,確保分佈式上下文(如 trace 和 span 上下文)在服務邊界間傳播。
  • 上下文傳播保持遙測數據的連續性和一致性,使得遙測數據在系統中傳遞時可以被關聯和具體化。

儀器化庫

  • OpenTelemetry Python 通過提供流行的框架、庫和協議的儀器化包,使得對現有的 Python 應用程序進行簡單的儀器化。
  • 網絡框架(如 Flask 和 Django)、數據庫客戶端(如 SQLAlchemy 和 Pymongo)、消息系統(如 Kafka 和 RabbitMQ)以及更多集成可以在儀器化庫中找到。

出口生態系統

  • OpenTelemetry Python 提供的一系列出口使開發人員能夠將遙測數據匯出到不同的可觀察性系統和後端。
  • 出口支持與 Jaeger、Zipkin、Prometheus、AWS X-Ray、Google Cloud Trace 和其他可觀察性平台整合。
  • 開發人員可以設置出口以將遙測數據傳輸到一個或多個後端進行長期存儲、分析和顯示。
  • OpenTelemetry Python 支持可變采樣技術,以調節收集的遙測數據量。
  • 開發人員可以選擇應用自定義采樣邏輯,設置采樣以采樣一定百分比的 trace,或根據預定義的參數(如請求標頭或路線)進行采樣。

上下文記錄

  • OpenTelemetry Python SDK 提供了工具來記錄上下文數據以及遙測數據。
  • 開發人員可以通過上下文登錄將 trace 和 span 上下文添加到日誌信息中,這為排錯和調試提供了更多的上下文。

創建和配置 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 出口設置為將 trace 匯出到本地主機的 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

透過這樣做,OpenTelemetry 儀器化的配置 otel_config.py 被初始化。

給您的應用程序添加儀器化

使用 OpenTelemetry 給你的 Python 程序添加儀器化以便它可以記錄 trace。 給代碼添加儀器化有兩種方法:手動或使用內建的庫。 這是一個手動儀器化調用的說明:

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 中查看 trace

要查看和檢查錄製的 trace,請轉到 Jaeger 用戶界面。 要查看 OpenTelemetry 收集器錄製的 trace,請打開您的網絡瀏覽器中的 Jaeger UI(通常位於 http://localhost:16686)並選擇您的服務名稱。

透過完成這些步驟,您已經在應用程序中成功設置並配置了 OpenTelemetry Python。 現在你可以看到你的 Python 程序是如何透過使用 OpenTelemetry 記錄 traces 並將它們匯出到 Jaeger 後端來觀察和表現的。

開始使用 IronPDF

什麼是 IronPDF?

使用來自 Iron Software 的強大 .NET 庫 IronPDF,開發人員可以在 .NET 應用程序中創建、編輯和呈現 PDF 文檔。 開發人員可以使用 IronPDF 從一系列來源中程序化地創建 PDF 文檔,如預先存在的 PDF 文件、HTML 文本、URL 和圖像。 讓我們仔細看看 IronPDF 的特點:

OpenTelemetry Python (它如何為開發者服務): 圖 2 - IronPDF 主頁

將 HTML 轉換為 PDF

開發人員可以輕鬆地將 HTML 內容轉換為 PDF 文件使用 IronPDF。 使用 HTML 文本作為輸入,開發人員可以製作具有格式、圖像和樣式的視覺豐富的 PDF 文檔。

將 URL 轉換為 PDF

開發人員可以使用 IronPDF 直接從 URL 生成 PDF 文檔。 此功能的一個絕佳應用是從網頁捕獲內容或從網絡應用程序動態創建的內容。

將圖像轉換為 PDF

使用 IronPDF,可將 PNG、JPEG 和 BMP 格式的圖像轉換為 PDF 文檔。 此功能允許應用程序開發人員從照片生成 PDF 文檔,這對於如製作圖片輯樣的應用程序或將照片整合到 PDF 文件中非常有用。

如何安裝 IronPDF

確認您的計算機上已安裝 Python 之後,使用 pip 安裝 IronPDF。

 pip install ironpdf

使用 OpenTelemetry 生成 PDF 文檔和 IronPDF

在 OpenTelemetry 初始化之後添加以下代碼,使用 IronPDF 創建一個 PDF 文檔:

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 = "<html><body><h1>Hello, IronPDF!</h1></body></html>"

    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)
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 = "<html><body><h1>Hello, IronPDF!</h1></body></html>"

    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)
PYTHON

在這段代碼中:

  • 我們利用 OpenTelemetry 追蹤器開始一次名為 pdf_generation 的新 span。
  • 我們使用 IronPDF 在這段時間內將 HTML 材料轉換為 PDF 文檔。
  • 生成的 PDF 材料包含在名為 output.pdf 的文件中。

OpenTelemetry Python (它如何為開發者服務): 圖 3 - 上述代碼生成的範例輸出

結論

最終,Python 應用程序中可觀察性和文件生成功能的結合由 OpenTelemetry Python 和 IronPDF 連接提供。 透過將分佈式路徑追蹤和指標收集與動態 PDF 生成集成起來,開發人員可以在快速生成專業品質文檔的同時,獲得更好的系統性能見解。

在企業追求軟體解決方案中效率和卓越的過程中,OpenTelemetry Python 與 IronPDF 之間的合作產生了一個強大的推動者,使開發人員能夠創建可靠、可擴展且性能良好的應用程序。

IronPDF 隨附終生許可證,並且在捆綁購買時價格合理。 該捆綁包只售 $799 僅需一次性購買即可適用於多個系統,是一筆劃算的交易。 許可證持有者可獲得全天候 24/7 在線工程幫助。請訪問網站了解更多關於收費的詳情。 請訪問此頁了解更多有關 Iron Software 銷售的產品。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。