跳至頁尾內容
開發者更新

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

介紹

建立動態、資料驅動、豐富的PDF文件是在現代軟體開發的許多領域中的典型需求。 企業極大地依賴於能夠快速生成高品質的PDF,無論是用於建立賬單、報告還是文件。 然而,追蹤和理解PDF生成過程的效率變得至關重要,以維持應用程式的健康並確保使用者滿意度,因為它們變得更加複雜和大規模。

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

什麼是OpenTelemetry?

OpenTelemetry是一個專為雲原生應用程式設計的供應商中立的可觀察性框架。OpenTelemetry自動化儀器提供了一個單一的API,用於收集遙測資訊,包括日誌、追蹤和度量。 借助這些廣泛的資料,開發人員可以有效地除錯問題、識別效能瓶頸,並充分理解程式行為。 OpenTelemetry支持自動和手動儀器,以進行全面且靈活的遙測資料收集。

OpenTelemetry的主要組成部分

  • API: 要儀器應用程式並生成遙測資料,OpenTelemetry指定了一組標準化的API。這簡化了儀器過程,並保證在不同的程式語言中的一致性。
  • SDKs: OpenTelemetry為一些特定語言提供了儀器應用的SDK。 開發人員可以在其.NET項目中輕鬆整合OpenTelemetry功能,使用.NET SDK的幫助。
  • Exporters: 這些組件負責將收集到的遙測資料傳輸到後端系統,以便儲存和分析。 OpenTelemetry支持許多廣泛使用的後端系統導出器,如Zipkin(追蹤)、Prometheus(度量)和Jaeger(追蹤)。
  • Automatic Instrumentation: 這一方法簡化了.NET Core應用程式的過程。 OpenTelemetry庫可以自動捕獲您的Web應用程式或服務中的常見操作資料。這消除了手動程式碼修改,簡化了整合過程。
  • Manual Instrumentation: 為了對資料收集進行精細控制,OpenTelemetry提供了一個強大的API,用於手動儀器。 這種方法允許您捕獲與您獨特應用程式邏輯相關的特定度量和追蹤。 這對於.NET Framework應用程式或自動儀器不涵蓋特定需求的情境特別有用。

在.NET中使用OpenTelemetry的優勢

將OpenTelemetry整合到您的.NET應用程式中可帶來多個優勢:

  • 供應商中立性: OpenTelemetry通過與各種後端系統輕鬆整合,提供了靈活性並使您的應用程式具備面向未來的特性。 您的儀器程式碼無需更改即可更換後端系統。
  • 標準化方法: 通過統一的API,使應用程式的各個領域更易於儀器化。 開發人員可以使用相同的API來收集日志、追蹤和度量,從而導致更易閱讀和維護的程式碼。
  • 深入的性能分析: OpenTelemetry提供豐富的資料(度量、追蹤和日志),以便進行全面的性能分析。 您可以通過這個全面的視角來定位需要優化的區域並確定問題的根本原因。
  • 更好的故障排除: 開發人員可以通過OpenTelemetry抓取的豐富跟踪資料, 更容易地檢測和修復通過應用程式的請求路徑。
  • 改進的擴展性: 您的應用程式的複雜性不會影響OpenTelemetry的擴展能力。 可以隨時儀器新功能或服務,無需大範圍程式碼修改。

建立和配置OpenTelemetry

在ASP.NET應用程式中配置OpenTelemetry

需要在您的應用程式中配置OpenTelemetry; 對於ASP.NET Core應用程式,這通常在您的Startup.cs文件中。這是一個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...
}
Imports OpenTelemetry.Trace
Imports OpenTelemetry.Exporter.Jaeger
Imports OpenTelemetry.Resources

Public Sub ConfigureServices(ByVal services As IServiceCollection)
	' Configure OpenTelemetry
	services.AddOpenTelemetry().WithTracing(Sub(builder)
		' Configure Jaeger exporter. The 'serviceName' can be read from environment variables
		builder.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("YourServiceName")).AddAspNetCoreInstrumentation().AddJaegerExporter(Sub(opt)
				opt.AgentHost = "localhost" ' Jaeger agent host
				opt.AgentPort = 14250 ' Jaeger agent port
		End Sub)
	End Sub)
	' Other service configurations...
End Sub
$vbLabelText   $csharpLabel

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

新增OpenTelemetry中介件

您必須在ASP.NET Core應用中包含OpenTelemetry中介件,以獲取自動儀器化進入的HTTP請求。 在您的Startup.cs 文件的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...
}
Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
	' Add Prometheus metrics middleware if using Prometheus
	app.UseHttpMetrics()
	' Other middleware configurations...
End Sub
$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的兩個關鍵優勢是它的易用性和簡單性。 由於其直觀的API和全面的文件,開發人員可以輕鬆地在其.NET項目中開始建立PDF。 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...
}
Imports IronPdf

Public Sub ConfigureServices(ByVal services As IServiceCollection)
	' Configure IronPDF
	services.AddSingleton(Of HtmlToPdf)()
	' Other service configurations...
End Sub
$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;
            }
        }
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports OpenTelemetry.Trace
Imports System.Diagnostics
Imports Microsoft.Extensions.Logging
Imports IronPdf

Namespace DemoWebApplication.Controllers
	<ApiController>
	<Route("[controller]")>
	Public Class DemoController
		Inherits ControllerBase

		Private ReadOnly _htmlToPdf As HtmlToPdf
		Private ReadOnly _logger As ILogger(Of DemoController)
		Private ReadOnly _tracer As Tracer

		Public Sub New(ByVal logger As ILogger(Of DemoController), ByVal htmlToPdf As HtmlToPdf, ByVal tracerProvider As TracerProvider)
			_tracer = tracerProvider.GetTracer("Demo")
			_htmlToPdf = htmlToPdf
			_logger = logger
		End Sub

		<HttpGet>
		Public Function Generate() As FileContentResult
			' Define the PDF file name
			Dim fileName As String = "Sample.pdf"

			' Generate PDF from HTML content
			_logger.LogInformation("Generating PDF...")
			Dim pdfBytes = GeneratePdf("Hello, IronPDF!")

			' Return the PDF as a file result
			Return New FileContentResult(pdfBytes, "application/pdf") With {.FileDownloadName = fileName}
		End Function

		Private Function GeneratePdf(ByVal htmlContent As String) As Byte()
			' Start a tracing activity for PDF generation
			Using activity = _tracer.StartActiveSpan("PDF Generation")
				Dim pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent)

				' Log PDF generation
				_logger.LogInformation("PDF generated successfully.")

				Return pdfDocument.BinaryData
			End Using
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

在此範例中:

  • 我們將DemoController
  • Generate方法啟動文件下載,返回一個動態建立的PDF,內容為"Hello, IronPDF!"。
  • HtmlToPdf.RenderHtmlAsPdf來渲染PDF並輸出PDF的二進制資料。
  • 該程式碼使用OpenTelemetry來追踪PDF生成過程並記錄跟踪資料。

從上述源程式碼生成的PDF輸出:

OpenTelemetry .NET (對開發人員的工作原理):圖1 - 利用IronPDF和OpenTelemetry從上述程式碼生成的輸出圖1 - 利用IronPDF和OpenTelemetry從上述程式碼生成的輸出

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

OpenTelemetry .NET (對開發人員的工作原理):圖2 - 從Jaeger UI生成的輸出追蹤圖2 - 從Jaeger UI生成的輸出追蹤

結論

OpenTelemetry是.NET應用程式性能優化和健康監測的遊戲改變者。 它為開發人員提供了一種供應商中立和標準化的方法來收集、分析和導出遙測資料(度量、追蹤和日誌),從而全面了解其應用的內部工作。

通過將OpenTelemetry.NET與IronPDF整合,開發人員可以改善建立PDF的工作流程,並獲得有關其應用性能的見解。 通過利用OpenTelemetry.NET實施手動儀器化PDF生成過程,開發人員可以追踪執行路徑、監控性能指標和定位需要優化的區域。 此外,通過將遙測資料出口到可觀察性平台,實現集中監控度量收集和分析,賦予開發人員維持其應用健康並提供無縫使用者體驗的能力。

OpenTelemetry.NET實施和IronPDF的整合可以提高開發人員建立PDF的工作流程,並保證在.NET應用程式中的可擴展性、性能和可靠性。 這些技術的整合有助於開發人員滿足現代軟體開發的需求,無論是建立發票、報告還是文件,並產生卓越的結果。

當作為套件購買時,IronPDF價格合理,並包含終身授權。 該套餐僅需一次性支付$999,就可以為多個系統提供了很高的價值。 它為授權持有人提供全天候的線上工程支援。 請存取Iron Software網站以獲取有關收費的更多詳細資訊。 探索Iron Software的產品,以了解更多他們提供的解決方案。

常見問題

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

OpenTelemetry是一個為雲原生應用程式設計的中立供應商可觀測性框架。透過提供標準化的API和SDK來捕捉日誌、追蹤和度量,能提高.NET應用程式的效能,幫助診斷問題、識別效能瓶頸,並獲得應用程式行為的全面見解。

OpenTelemetry如何與ASP.NET Core整合以進行自動化儀?

OpenTelemetry可以通過在`Startup.cs`檔案中配置服務和中介軟體以進行自動化儀來與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核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

Jacob擁有曼徹斯特大學的土木工程一等榮譽學士學位(BEng),於1998-2001年之間獲得。在1999年於倫敦創辦他的第一家軟體公司並於2005年建立了他的第一批.NET元組件後,他專注於解決Microsoft生態系統中的複雜問題。

他的旗艦IronPDF和Iron Suite .NET程式庫在全球獲得了超過3000萬次NuGet安裝依據,他的基礎程式碼基繼續支援著世界各地開發者使用的工具。擁有25年的商業經驗和41年的程式設計專業知識,他仍專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話