.NET 幫助

OpenTelemetry .NET(對開發人員的運作方式)

發佈 2024年7月1日
分享:

介紹

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

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

什麼是 OpenTelemetry?

OpenTelemetry 是一個供應商中立的觀測框架,專為雲原生應用程式而設計。OpenTelemetry 的自動化儀表提供單一 API,用於收集包括日誌、追踪和指標在內的遙測信息。使用這些廣泛的數據,開發者可以有效地調試問題,確定性能瓶頸,並全面了解程式行為。OpenTelemetry 支援自動和手動儀表,以實現全面且靈活的遙測數據收集。

OpenTelemetry 的主要組成部分

  • API: 為了對應用程式進行檢測並生成遙測數據,OpenTelemetry 規範了一組標準化的 API。這使得檢測過程更簡單,並保證在各種編程語言中保持一致性。
  • SDKs: OpenTelemetry 提供了針對特定語言的 SDK 來對應用程式進行檢測。開發人員可以藉助 .NET SDK 輕鬆地將 OpenTelemetry 功能整合到他們的 .NET 項目中。
  • Exporters: 這些部件負責將收集的遙測數據傳輸到後端系統,以便存儲和分析。許多廣泛使用的後端系統,如 Zipkin 的導出器。 (追踪), 普羅米修斯 (指標),和 Jaeger (追踪),支援 OpenTelemetry。
  • 自動化儀表:這種方法簡化了 .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 應用程式,這通常是在 Startup.cs 文件的 ConfigureServices 方法中完成的。以下是 Jaeger exporter 配置的示例:

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

public void ConfigureServices(IServiceCollection services)
{
    // Configure OpenTelemetry
    builder.Services.AddOpenTelemetry().WithTracing(options =>
    {
        // Configure Jaeger exporter
        // serviceName we can read from environment variables
        options
            .SetResourceBuilder(
                ResourceBuilder.CreateDefault()
                    .AddService(serviceName))
            .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
    builder.Services.AddOpenTelemetry().WithTracing(options =>
    {
        // Configure Jaeger exporter
        // serviceName we can read from environment variables
        options
            .SetResourceBuilder(
                ResourceBuilder.CreateDefault()
                    .AddService(serviceName))
            .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
	builder.Services.AddOpenTelemetry().WithTracing(Sub(options)
		' Configure Jaeger exporter
		' serviceName we can read from environment variables
		options.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(serviceName)).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
VB   C#

將您的服務名稱替換為 serviceName。根據您的 Jaeger 配置選項,更改 Jaeger 代理主機和端口。

添加 OpenTelemetry 中間件

您必須在 ASP.NET Core 應用程式中包含 OpenTelemetry 中間件,才能自動監測到來的 HTTP 請求。在 Startup.cs 檔案的 Configure 方法中,添加中間件:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Add OpenTelemetry middleware if we are using Prometheus
    app.UseHttpMetrics();
    // Other middleware configurations...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Add OpenTelemetry middleware if we are using Prometheus
    app.UseHttpMetrics();
    // Other middleware configurations...
}
Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
	' Add OpenTelemetry middleware if we are using Prometheus
	app.UseHttpMetrics()
	' Other middleware configurations...
End Sub
VB   C#

開始追蹤

一切設置完成後,OpenTelemetry 將開始追蹤進入的 HTTP 請求,並將遙測信息自行發送到配置的 Jaeger 後端。

確認和監控

您可以在 Jaeger 後端檢查追蹤以確認 OpenTelemetry 是否正常運作。打開 Jaeger 用戶界面 (通常可在 http://localhost:16686 提供 Jaeger UI) 並查找與您的服務相關的痕跡。

選擇後端系統 (選填)

OpenTelemetry 並不是基本儀表化的必需品,但它可以與其他後端操作系統整合來存儲和處理遙測數據。受歡迎的選項包括正式支持的操作系統:

  • Jaeger (追踪)
  • 普羅米修斯 (指標) 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 應用程式的 Startup.cs 檔案以進入 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
VB   C#

此代碼確保通過將 IronPDF 的 HtmlToPdf 服務配置為單例,應用程序僅創建和使用一個 HtmlToPdf 實例。

您可以通過將 OpenTelemetry.NET 與 IronPDF 集成來跟蹤並觀察您 .NET 應用程序中的 PDF 生成過程。讓我們深入研究程式碼示例,一步一步地逐步講解每個步驟:

using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using System.Net;
using System.Net.Http.Headers;

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

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

        [HttpGet]
        public FileContentResult Generate()
        {
            string fileName = "Sample.pdf";
            var stream = GeneratePdf("Hello IronPDF");
            return new FileContentResult(stream, "application/octet-stream")
            {
                FileDownloadName = fileName
            };
        }

        private byte[] GeneratePdf(string htmlContent)
        {
            using (var activity = _tracer.StartActiveSpan("PDF Generation"))
            {
                var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);
                var pdfBytes = pdfDocument.BinaryData;
                return pdfBytes;
            }
        }
    }
}
using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using System.Net;
using System.Net.Http.Headers;

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

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

        [HttpGet]
        public FileContentResult Generate()
        {
            string fileName = "Sample.pdf";
            var stream = GeneratePdf("Hello IronPDF");
            return new FileContentResult(stream, "application/octet-stream")
            {
                FileDownloadName = fileName
            };
        }

        private byte[] GeneratePdf(string htmlContent)
        {
            using (var activity = _tracer.StartActiveSpan("PDF Generation"))
            {
                var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);
                var pdfBytes = pdfDocument.BinaryData;
                return pdfBytes;
            }
        }
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports OpenTelemetry.Trace
Imports System.Diagnostics
Imports System.Net
Imports System.Net.Http.Headers

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

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

		Private Function WeatherForecastController(ByVal logger As ILogger(Of WeatherForecastController), ByVal htmlToPdf As HtmlToPdf, ByVal tracerProvider As TracerProvider) As Public
			_tracer = tracerProvider.GetTracer("Demo")
			_htmlToPdf = htmlToPdf
		End Function

		<HttpGet>
		Public Function Generate() As FileContentResult
			Dim fileName As String = "Sample.pdf"
			Dim stream = GeneratePdf("Hello IronPDF")
			Return New FileContentResult(stream, "application/octet-stream") With {.FileDownloadName = fileName}
		End Function

		Private Function GeneratePdf(ByVal htmlContent As String) As Byte()
			Using activity = _tracer.StartActiveSpan("PDF Generation")
				Dim pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent)
				Dim pdfBytes = pdfDocument.BinaryData
				Return pdfBytes
			End Using
		End Function
	End Class
End Namespace
VB   C#

若要為我們的應用程式產生追蹤器實例,我們注入 TracerProvider 服務。由 Generate 方法創建的 OpenTelemetry 活動稱為「PDF 生成」,用以象徵目前正在進行的工作。我們在這個活動中模擬一些工作。 (替換您自己的邏輯). 我們建立了一個名為 work_duration_ms 的柱狀圖度量來監控工作的毫秒長度。我們向度量中添加數據點,標記為「Demo」,且值為「PDF Generation」,並記錄持續時間。 (在這種情況下為 1000 毫秒). 標籤為分析提供了額外的上下文層。

從上述源代碼生成的 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 價格合理,並包括終身許可證。該套件僅需 $749,是多個系統的一次性費用。它為許可證持有人提供全天候的線上工程支持。請訪問 網站 有關收費的更多詳細信息,請訪問此 網站 了解更多有關 Iron Software 生產的產品的資訊。

< 上一頁
Dotnetopenauth .NET Core(它如何為開發人員工作)
下一個 >
Autofac .NET 6(開發人員如何使用)

準備開始了嗎? 版本: 2024.10 剛剛發布

免費 NuGet 下載 總下載次數: 11,108,738 查看許可證 >