.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 應用程式或自動化工具無法滿足您特定需求的情境特別有用。

在 .NET 中使用 OpenTelemetry 的好處

將 OpenTelemetry 整合到您的 .NET 應用程式中具有多項優勢:

  • 供應商中立性:OpenTelemetry 提供彈性並為您的應用程式做好未來準備,能輕鬆整合多種後端系統。 您的儀器代碼不需要更改即可切換後端系統。
  • 標準化方法:透過統一的 API,為應用程式的各個區域進行工具化變得更加容易。 開發人員可以使用相同的 API 來收集日誌、跟蹤和指標,從而使代碼更易於閱讀和維護。
  • 深入性能分析:OpenTelemetry 提供豐富的資料(度量、追蹤和日誌)進行全面的性能分析。 透過這個全方位的視角,您可以找到優化的領域並確定問題的根本原因。
  • 更好的故障排除:開發人員可以透過使用OpenTelemetry捕獲的豐富跟蹤數據,沿著請求路徑檢測和修復應用程式中的問題。
  • 改進的可擴展性:應用程式的複雜性不會妨礙 OpenTelemetry 的擴展能力。 新功能或服務可以輕鬆實現,無需進行大規模的代碼修改。

建立和配置 OpenTelemetry

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

您需要在您的應用程式中配置 OpenTelemetry。 對於 ASP.NET Core 應用程式,這通常在 Startup.cs 文件的 ConfigureServices 方法中完成。以下是 Jaeger 出口配置的示例:

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 agent 主機和端口。

添加 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 方法創建了一個名為 "PDF Generation" 的 OpenTelemetry 活動,用以象徵當前正在進行的工作。 我們模擬了活動中的一些工作(替換您自己的邏輯). 我們建立一個名為 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 網站更多關於收費的詳情。 探索Iron Software 的產品瞭解更多關於他們提供的解決方案。

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

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

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