跳過到頁腳內容
.NET幫助

OpenTelemetry .NET(對於開發者的運行原理)

介紹

在現代軟體開發的許多領域中,創建動態的、數據驅動的、豐富的PDF文件是一項典型的需求。 企業極其依賴其快速生成高品質PDF的能力,無論是用於創建帳單、報告還是文件。 然而,隨著PDF生產過程變得更加複雜且大規模,追蹤和理解其有效性變得至關重要,以維護應用程式的健康並確保用戶滿意度。

本文旨在討論開發人員如何利用IronPDF和OpenTelemetry.NET的功能改進PDF生成操作,並提供關於應用程式性能的重要見解。 我們將探索這兩種技術的特性和優點,並展示它們如何和諧地共同運作,以優化.NET應用程式中PDF的創建和監控。

什麼是OpenTelemetry?

OpenTelemetry是一個專為雲原生應用而創建的中立觀察框架。OpenTelemetry自動儀器化提供了一個用於收集遙測信息的單一API,包括日誌、追蹤和指標。 利用這些豐富的數據,開發人員可以有效地調試問題,定位性能瓶頸,並獲得對程序行為的全面理解。 OpenTelemetry支持自動和手動兩種儀器化方式,以全面而靈活地收集遙測數據。

OpenTelemetry的關鍵組件

  • API:OpenTelemetry規定了一套標準化的API,以儀器化應用程式並生成遙測數據。這使儀器化過程更簡單,並保證了不同程式語言之間的一致性。
  • SDKs:OpenTelemetry針對特定語言提供了儀器化應用的SDK。 開發人員可以輕鬆地將OpenTelemetry功能集成到其.NET專案中,因為有.NET SDK的幫助。
  • Exporters:這些部分負責將已收集的遙測數據傳輸到後端系統,以便儲存和分析。 OpenTelemetry支持許多廣泛使用的後端系統導出器,例如Zipkin(追蹤)、Prometheus(指标)和Jaeger(追蹤)。
  • 自動儀器化:這個方法簡化了.NET Core應用的過程。 OpenTelemetry庫可以自動捕獲應用程式或服務中常見操作的數據。這消除了手動代碼修改,簡化了集成過程。
  • 手動儀器化:對於數據收集的精細控制,OpenTelemetry提供了一個強大的API供手動儀器化使用。 此方法允許您捕獲與特定應用邏輯相關的特定指標和追蹤。 它特別適用於.NET Framework應用或者自動儀器化無法滿足的特定場景。

使用OpenTelemetry於.NET的好處

將OpenTelemetry集成到您的.NET應用程式中有多個好處:

  • 供應商中立性:OpenTelemetry通過與多種後端系統輕鬆集成,提供靈活性和未來保障您的應用程式。 您的儀器化代碼不需要更改來切換後端系統。
  • 標準化方法:統一的API使您在應用程式的各個方面進行儀器化更加容易。 開發人員可以使用相同的API收集日誌、追蹤和指標,這使得代碼更易讀和維護。
  • 深入的性能分析:OpenTelemetry提供豐富的數據(指標、追蹤和日誌)供全面性能分析。 您可以找到優化的領域,並確定問題的根本原因,藉此全方位視角。
  • 更好的故障排除:開發人員可以更容易地通過OpenTelemetry捕獲的豐富追蹤數據來檢測和修復問題,並追溯請求在應用中的路徑。
  • 改善的可擴展性:應用的複雜性不會妨礙OpenTelemetry的擴展能力。 可以在不進行大規模代碼修改的情況下輕鬆地對新功能或服務進行儀器化。

創建和配置OpenTelemetry

在ASP.NET應用中配置OpenTelemetry

需要在您的應用中配置OpenTelemetry; 對於ASP.NET Core應用,通常是在您的ConfigureServices文件的方法中進行配置。以下是Jaeger導出器配置的一個範例:

using OpenTelemetry.Trace;
using OpenTelemetry.Exporter.Jaeger;
using OpenTelemetry.Resources;

public void ConfigureServices(IServiceCollection services)
{
    // Configure OpenTelemetry
    services.AddOpenTelemetry().WithTracing(builder =>
    {
        // Configure Jaeger exporter. The 'serviceName' can be read from environment variables
        builder
            .SetResourceBuilder(
                ResourceBuilder.CreateDefault()
                    .AddService("YourServiceName"))
            .AddAspNetCoreInstrumentation()
            .AddJaegerExporter(opt =>
            {
                opt.AgentHost = "localhost"; // Jaeger agent host
                opt.AgentPort = 14250; // Jaeger agent port
            });
    });
    // Other service configurations...
}
using OpenTelemetry.Trace;
using OpenTelemetry.Exporter.Jaeger;
using OpenTelemetry.Resources;

public void ConfigureServices(IServiceCollection services)
{
    // Configure OpenTelemetry
    services.AddOpenTelemetry().WithTracing(builder =>
    {
        // Configure Jaeger exporter. The 'serviceName' can be read from environment variables
        builder
            .SetResourceBuilder(
                ResourceBuilder.CreateDefault()
                    .AddService("YourServiceName"))
            .AddAspNetCoreInstrumentation()
            .AddJaegerExporter(opt =>
            {
                opt.AgentHost = "localhost"; // Jaeger agent host
                opt.AgentPort = 14250; // Jaeger agent port
            });
    });
    // Other service configurations...
}
$vbLabelText   $csharpLabel

"YourServiceName"替換為您服務的實際名稱。根據Jaeger的配置選項調整Jaeger代理主機和端口。

添加OpenTelemetry中介軟體

您必須在ASP.NET Core應用中包含OpenTelemetry中介軟體以自動儀器化所有進入的HTTP請求。 在您的Configure方法中添加中介軟體:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Add Prometheus metrics middleware if using Prometheus
    app.UseHttpMetrics();
    // Other middleware configurations...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Add Prometheus metrics middleware if using Prometheus
    app.UseHttpMetrics();
    // Other middleware configurations...
}
$vbLabelText   $csharpLabel

開始追蹤

設置好所有內容後,OpenTelemetry將開始自動跟蹤進入的HTTP請求並將遙測信息發送到配置的Jaeger後端。

確認和監控

您可以在Jaeger後端檢查追蹤記錄以確認OpenTelemetry是否正常工作。 打開Jaeger用戶介面(通常在http://localhost:16686處可以找到Jaeger UI),查找與您的服務相關的追蹤記錄。

選擇後端系統(可選)

OpenTelemetry不是進行基本儀器化的必須條件,但它與其他後端操作系統集成,用於儲存和處理遙測數據。 流行的選項包括官方支持的操作系統:

  • Jaeger(追蹤)
  • Prometheus(指標)
  • Zipkin(追蹤)

開始

什麼是IronPDF?

受歡迎的.NET套件IronPDF允許您在.NET程序中創建、編輯和渲染PDF文件。 處理PDF的功能眾多,包括將HTML頁面轉換為PDF、從PDF中提取文本和圖片、向現有PDF文件添加文本、圖片和形狀, 以及從HTML內容、照片或原始數據生成PDF。

IronPDF的兩大優點是其易用性和簡潔性。 開發人員可以輕鬆地在其.NET專案中開始創建PDF,得益於其直觀的API和全面的文檔。 IronPDF的效率和速度是幫助開發人員快速有效地創建高品質PDF文件的另外兩個特點。

IronPDF的一些好處包括:

  • 從HTML、圖片和原始數據生成PDF
  • 從PDF文件中提取文本和圖片
  • 在PDF文件中嵌入水印、頁眉和頁腳
  • 透過加密和密碼保護PDF文件
  • 可以進行電子簽名和填寫表單

安裝NuGet包

OpenTelemetry有多個NuGet包可用於不同的組件。 根據您的需求,可以安裝所需的包。 要將遙測數據發送到觀察後端(如Jaeger、Zipkin或Prometheus),至少需要OpenTelemetry包、您的應用框架的儀器化包(如ASP.NET Core),以及一個導出器包。 此外,確保項目中已安裝IronPDF包。 要安裝它,可使用NuGet套件管理器控制台:

Install-Package OpenTelemetry
Install-Package OpenTelemetry.Instrumentation.AspNetCore
Install-Package OpenTelemetry.Exporter.Jaeger
Install-Package IronPdf

將OpenTelemetry與IronPDF一起使用

打開ASP.NET Core應用中的ConfigureServices方法。 要設置IronPDF,請包含以下代碼。

using IronPdf;

public void ConfigureServices(IServiceCollection services)
{
    // Configure IronPDF
    services.AddSingleton<HtmlToPdf>();
    // Other service configurations...
}
using IronPdf;

public void ConfigureServices(IServiceCollection services)
{
    // Configure IronPDF
    services.AddSingleton<HtmlToPdf>();
    // Other service configurations...
}
$vbLabelText   $csharpLabel

此代碼確保通過將IronPDF的HtmlToPdf的實例。

通過將OpenTelemetry.NET與IronPDF集成,可以在.NET應用中跟蹤和觀察PDF生成過程。 讓我們深入查看代碼範例,逐步解析每個步驟:

using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using Microsoft.Extensions.Logging;
using IronPdf;

namespace DemoWebApplication.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class DemoController : ControllerBase
    {
        private readonly HtmlToPdf _htmlToPdf;
        private readonly ILogger<DemoController> _logger;
        private readonly Tracer _tracer;

        public DemoController(ILogger<DemoController> logger, HtmlToPdf htmlToPdf, TracerProvider tracerProvider)
        {
            _tracer = tracerProvider.GetTracer("Demo");
            _htmlToPdf = htmlToPdf;
            _logger = logger;
        }

        [HttpGet]
        public FileContentResult Generate()
        {
            // Define the PDF file name
            string fileName = "Sample.pdf";

            // Generate PDF from HTML content
            _logger.LogInformation("Generating PDF...");
            var pdfBytes = GeneratePdf("Hello, IronPDF!");

            // Return the PDF as a file result
            return new FileContentResult(pdfBytes, "application/pdf")
            {
                FileDownloadName = fileName
            };
        }

        private byte[] GeneratePdf(string htmlContent)
        {
            // Start a tracing activity for PDF generation
            using (var activity = _tracer.StartActiveSpan("PDF Generation"))
            {
                var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);

                // Log PDF generation
                _logger.LogInformation("PDF generated successfully.");

                return pdfDocument.BinaryData;
            }
        }
    }
}
using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using Microsoft.Extensions.Logging;
using IronPdf;

namespace DemoWebApplication.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class DemoController : ControllerBase
    {
        private readonly HtmlToPdf _htmlToPdf;
        private readonly ILogger<DemoController> _logger;
        private readonly Tracer _tracer;

        public DemoController(ILogger<DemoController> logger, HtmlToPdf htmlToPdf, TracerProvider tracerProvider)
        {
            _tracer = tracerProvider.GetTracer("Demo");
            _htmlToPdf = htmlToPdf;
            _logger = logger;
        }

        [HttpGet]
        public FileContentResult Generate()
        {
            // Define the PDF file name
            string fileName = "Sample.pdf";

            // Generate PDF from HTML content
            _logger.LogInformation("Generating PDF...");
            var pdfBytes = GeneratePdf("Hello, IronPDF!");

            // Return the PDF as a file result
            return new FileContentResult(pdfBytes, "application/pdf")
            {
                FileDownloadName = fileName
            };
        }

        private byte[] GeneratePdf(string htmlContent)
        {
            // Start a tracing activity for PDF generation
            using (var activity = _tracer.StartActiveSpan("PDF Generation"))
            {
                var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);

                // Log PDF generation
                _logger.LogInformation("PDF generated successfully.");

                return pdfDocument.BinaryData;
            }
        }
    }
}
$vbLabelText   $csharpLabel

在此範例中:

  • 我們將DemoController
  • Generate方法啟動檔案下載,返回一個動態創建的PDF,內容為"Hello, IronPDF!"。
  • HtmlToPdf.RenderHtmlAsPdf渲染PDF並輸出PDF的二進位數據。
  • 代碼使用OpenTelemetry跟蹤PDF生成過程並記錄追蹤數據。

從上面源代碼生成的PDF輸出:

OpenTelemetry .NET (它是如何為開發人員工作的): 圖 1 - 使用IronPDF和OpenTelemetry的代碼生成的輸出

下面是從Jaeger UI生成的追蹤屏幕:

OpenTelemetry .NET (它是如何為開發人員工作的): 圖 2 - Jaeger UI生成的追蹤輸出

結論

OpenTelemetry是.NET應用性能優化和健康監控的遊戲規則改變者。 它透過提供一個中立供應商和標準化的方法來收集、分析和導出遙測數據(指標、追蹤和日誌),使開發人員對應用程式內部運作有透徹了解。

通過將OpenTelemetry.NET與IronPDF集成,開發人員可以改善創建PDF的工作流程並獲得應用性能的見解。 通過OpenTelemetry.NET實現的手動儀器化PDF生成過程,開發人員可以追蹤執行路徑、監控性能指標並確定需要優化的區域。 此外,導出遙測數據到觀察平台使集中監控指標的收集和分析成為可能,讓開發人員能夠保持應用健康並提供無縫的用戶體驗。

OpenTelemetry.NET實現和IronPDF的集成可以提升開發人員創建PDF的工作流程,並保證.NET應用的可擴展性、性能和可靠性。 這些技術的集成幫助開發人員滿足現代軟件開發的需求並創造出色的結果,無論是創建發票、報告還是文件。

當購入為一個包時,IronPDF的價格相當合理,並包含終身授權。 該包僅需一次性支付$799,對於多個系統是一個很高價值的選擇。 它為持有授權的人提供全天候的線上工程支援。 請訪問Iron Software網站以獲取更多關於費用的詳情。 探索Iron Software的產品以了解他們提供的解決方案的更多信息。

常見問題解答

什麼是 OpenTelemetry,它如何增強 .NET 應用程式?

OpenTelemetry 是一個中立於供應商的可觀察性框架,專為雲原生應用程式設計。它透過提供標準化的 API 和 SDK 來增強 .NET 應用程式,以捕獲日誌、跟蹤和指標,這有助於診斷問題、識別性能瓶頸,並全面了解應用程式行為。

如何將 OpenTelemetry 與 ASP.NET Core 集成以進行自動儀器化?

可以通過在 `Startup.cs` 文件中配置服務和中介軟件將 OpenTelemetry 與 ASP.NET Core 集成,以啟用自動儀器化。這包括設置跟蹤和導出器,如 Jaeger,以傳輸遙測數據和監控應用程式性能。

IronPDF 在 .NET 應用程式的 PDF 生成中扮演什麼角色?

IronPDF 是一個 .NET 庫,簡化了在 .NET 應用程式中創建和操作 PDF。它支持將 HTML 轉換為 PDF、從 PDF 中提取文本,以及添加水印和加密等功能,使其成為處理 PDF 文檔的多功能工具。

開發人員如何使用 OpenTelemetry 跟蹤和分析 PDF 生成過程?

開發人員可以通過將 OpenTelemetry.NET 與 IronPDF 集成來跟蹤和分析 PDF 生成過程。這種集成允許收集和分析遙測數據,提供 PDF 生成工作流的見解,並幫助優化應用程式性能。

在 .NET 應用程式中使用 OpenTelemetry 與 IronPDF 有哪些好處?

在 .NET 應用程式中使用 OpenTelemetry 與 IronPDF 提供了多項優勢,包括改善應用程式擴展性、增強性能分析和優化 PDF 生成工作流。這一組合允許開發人員有效地監控和改善其應用程式的健康狀況。

開發人員如何在 ASP.NET Core 應用程式中使用 IronPDF 生成 PDF?

在 ASP.NET Core 應用程式中,開發人員可以將 `HtmlToPdf` 類注入控制器中,將 HTML 內容渲染為 PDF,然後以文件結果的形式返回生成的 PDF 以供下載。

OpenTelemetry 支持哪些後端系統的導出器?

OpenTelemetry 支持多種後端系統的導出器,包括用於跟蹤的 Jaeger、用於指標的 Prometheus 和用於跟蹤的 Zipkin。這些導出器能夠存儲和分析跨不同系統的遙測數據。

Jacob Mellor, Team Iron 首席技術官
首席技術官

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me