跳至頁尾內容
.NET幫助

Opentelemetry C#(對於開發者的運行原理)

OpenTelemetry 是一套工具、API 和 SDK,協同工作以收集、處理和匯出您的應用程式的遙測資料,如跟蹤、度量和日誌。 本教程旨在幫助初學者瞭解如何使用擴展方法將 OpenTelemetry 整合到 C# 應用程式中,重點在於內建的度量收集,以有效監控 .NET 應用程式。 我們還將學習 IronPDF library for PDF generation in C#

OpenTelemetry 簡介

Opentelemetry C# (對開發者運作方式):圖 1 - OpenTelemetry

OpenTelemetry 提供了一種統一的方法來收集您的應用程式中的所有資料。 對於 .NET 開發者來說,整合 OpenTelemetry 意味著您可以更密切地監控您的應用程式,實時了解其表現情況,並快速識別問題。 OpenTelemetry 的檢測程式庫會自動啟用對 .NET 應用的跟蹤和度量收集。

通過 OpenTelemetry 框架收集的度量,開發者可獲得 .NET 運行時環境的寶貴見解。 OpenTelemetry .NET 實現支持 .NET 運行時,包括 .NET Core 和 .NET Framework。 它遵循 OpenTelemetry 協議,用於標準化的遙測資料收集。

設置您的環境

首先,您需要在您的機器上安裝 .NET SDK。如果您使用 Visual Studio,它可能已附帶 .NET SDK。 您可以通過打開命令行並運行以下指令來檢查您當前的 .NET SDK 版本:

dotnet --version

接下來,運行以下指令以建立一個新的 .NET Web 專案:

dotnet new web -o MyTelemetryApp
cd MyTelemetryApp
dotnet new web -o MyTelemetryApp
cd MyTelemetryApp
SHELL

此命令在一個名為 MyTelemetryApp 的目錄中建立了一個新的 ASP.NET Core 專案。

整合 OpenTelemetry

新增所需的包

首先,將必要的 OpenTelemetry 包新增到您的專案中。 打開終端機並導航到您的專案目錄。 然後,使用 NuGet 套件管理器 CLI 安裝以下包:

dotnet add package OpenTelemetry -Version <version>
dotnet add package OpenTelemetry.Extensions.Hosting -Version <version>
dotnet add package OpenTelemetry.Instrumentation.AspNetCore -Version <version>
dotnet add package OpenTelemetry.Exporter.Console -Version <version>
dotnet add package OpenTelemetry -Version <version>
dotnet add package OpenTelemetry.Extensions.Hosting -Version <version>
dotnet add package OpenTelemetry.Instrumentation.AspNetCore -Version <version>
dotnet add package OpenTelemetry.Exporter.Console -Version <version>
SHELL

替換 為每個包的最新版本。

在您的應用程式中配置 OpenTelemetry

新增必要的包後,您需要在應用程式中配置 OpenTelemetry。 這涉及設置 OpenTelemetry SDK 並指定要收集哪些遙測資料。 OpenTelemetry 提供檢測程式庫,便於與 .NET 應用程式的無縫整合。

打開您專案中的 Startup.cs 文件,並修改 ConfigureServices 方法以包含 OpenTelemetry,如以下程式碼片段所示:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddOpenTelemetryTracing(builder =>
    {
        builder.AddAspNetCoreInstrumentation()
               .AddHttpClientInstrumentation()
               .AddConsoleExporter();
    });
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddOpenTelemetryTracing(builder =>
    {
        builder.AddAspNetCoreInstrumentation()
               .AddHttpClientInstrumentation()
               .AddConsoleExporter();
    });
}
Public Sub ConfigureServices(ByVal services As IServiceCollection)
	services.AddControllers()
	services.AddOpenTelemetryTracing(Sub(builder)
		builder.AddAspNetCoreInstrumentation().AddHttpClientInstrumentation().AddConsoleExporter()
	End Sub)
End Sub
$vbLabelText   $csharpLabel

此程式碼片段顯示如何配置 OpenTelemetry,以便從 ASP.NET Core 應用程式以及 HTTP 客戶端調用中收集遙測資料,然後將此資料匯出到控制台。 AddAspNetCoreInstrumentation 方法自動啟用對 ASP.NET Core 應用程式的傳入 HTTP 請求的檢測。

收集度量

要收集度量,您還需要配置 OpenTelemetry Metrics API,重點在於度量,而不是跟蹤。

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddOpenTelemetryMetrics(builder =>
    {
        builder.AddAspNetCoreInstrumentation()
               .AddHttpClientInstrumentation()
               .AddConsoleExporter(options => options.Targets = ConsoleExporterOutputTargets.Console);
    });
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddOpenTelemetryMetrics(builder =>
    {
        builder.AddAspNetCoreInstrumentation()
               .AddHttpClientInstrumentation()
               .AddConsoleExporter(options => options.Targets = ConsoleExporterOutputTargets.Console);
    });
}
Public Sub ConfigureServices(ByVal services As IServiceCollection)
	services.AddControllers()
	services.AddOpenTelemetryMetrics(Sub(builder)
		builder.AddAspNetCoreInstrumentation().AddHttpClientInstrumentation().AddConsoleExporter(Sub(options) options.Targets = ConsoleExporterOutputTargets.Console)
	End Sub)
End Sub
$vbLabelText   $csharpLabel

此設置使能從 ASP.NET Core 和 HTTP 客戶端檢測中收集內建的度量,並將其匯出到控制台以便於查看。

建立自定義度量

雖然 OpenTelemetry 可以自動收集許多有用的度量,但您可能希望收集特定於您的應用程式的自定義度量。 利用檢測程式庫提供的擴展方法,不僅可以自動收集遙測,還能給開發者更多控制發出的度量的細粒度控制。 這可以通過手動對程式碼進行測量來建立和記錄自定義度量。

var meter = new Meter("MyCustomMetrics", "1.0");
var counter = meter.CreateCounter<int>("custom_request_count", description: "Counts custom requests");
app.Use((context, next) =>
{
    counter.Add(1, new KeyValuePair<string, object>("path", context.Request.Path));
    return next();
});
var meter = new Meter("MyCustomMetrics", "1.0");
var counter = meter.CreateCounter<int>("custom_request_count", description: "Counts custom requests");
app.Use((context, next) =>
{
    counter.Add(1, new KeyValuePair<string, object>("path", context.Request.Path));
    return next();
});
Dim meter As New Meter("MyCustomMetrics", "1.0")
Dim counter = meter.CreateCounter(Of Integer)("custom_request_count", description:= "Counts custom requests")
app.Use(Function(context, [next])
	counter.Add(1, New KeyValuePair(Of String, Object)("path", context.Request.Path))
	Return [next]()
End Function)
$vbLabelText   $csharpLabel

此程式碼片段演示了如何建立一個自定義度量,用於計數對您的應用程式的請求,並為每個請求根據路徑標記每個度量。 通過利用 OpenTelemetry 提供的擴展方法,開發者可以對遙測資料收集過程施加更加細粒度的控制。

測試您的整合

使用命令行或 Visual Studio 運行您的應用程式。 對您的應用程式進行一些請求,無論是通過網路瀏覽器導航到其 URL 還是使用像 curl 這樣的工具。 您應該會看到包括跟蹤和度量在內的遙測資料被列印到您的控制台輸出。

curl http://localhost:5000
curl http://localhost:5000
SHELL

IronPDF的介紹

Opentelemetry C# (對開發者運作方式):圖 2 - IronPDF

IronPDF 是一個功能強大的程式庫,適用於 C# 開發者,允許在 .NET 應用程式內直接生成、操作、渲染 PDF 文件。 這一功能特別適用於生成報告、發票或任何基於文件的輸出從 Web 應用程式通過 HTML服務或桌面應用程式。將 IronPDF 與 OpenTelemetry 相結合,開發者可以監視在其應用程式中的 PDF 生成過程的性能和可靠性,確保流暢的使用者體驗。

IronPDF在HTML到PDF的轉換中表現出色,確保精確保留原始佈局和樣式。 它非常適合從基於網路的內容(如報告、發票和文件)建立PDF文件。 用於HTML文件、URL和原始HTML字串的支持,IronPDF可以輕鬆生成高品質的PDF文件。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

設置 IronPDF

首先,您需要將 IronPDF 新增到您的 .NET 專案中。 您可以使用 NuGet 套件管理器來達成此操作。 打開終端機並導航到您的專案目錄。 然後,運行以下命令以安裝 IronPDF:

dotnet add package IronPDF
dotnet add package IronPDF
SHELL

使用 IronPDF 生成 PDF 並用 OpenTelemetry 監控

以下是一個如何生成簡單的 PDF 文件並使用 OpenTelemetry 監控該操作的範例。 下列範例假設您之前已如上所示在您的應用程式中配置好 OpenTelemetry。

using IronPdf;
using OpenTelemetry.Trace;

public class PdfService
{
    private readonly Tracer _tracer;

    public PdfService(Tracer tracer)
    {
        _tracer = tracer;
    }

    public void GeneratePdf()
    {
        // Create a new activity for this operation
        using var activity = _tracer.StartActivity("Generate PDF");

        // Simulate adding some attributes related to the operation
        activity?.SetTag("pdf.size", "A4");
        activity?.SetTag("pdf.content", "Hello World");

        try
        {
            // Initialize the PDF generator
            var renderer = new ChromePdfRenderer();

            // Generate a PDF from HTML
            var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");

            // Save the PDF to a file
            var outputPath = "output.pdf";
            pdf.SaveAs(outputPath);

            // Log success
            activity?.SetTag("pdf.status", "Success");
            activity?.SetTag("pdf.outputPath", outputPath);
        }
        catch (Exception ex)
        {
            // Log any exceptions that occur during PDF generation
            activity?.SetTag("pdf.status", "Error");
            activity?.SetTag("pdf.error", ex.Message);
            throw;
        }
    }
}
using IronPdf;
using OpenTelemetry.Trace;

public class PdfService
{
    private readonly Tracer _tracer;

    public PdfService(Tracer tracer)
    {
        _tracer = tracer;
    }

    public void GeneratePdf()
    {
        // Create a new activity for this operation
        using var activity = _tracer.StartActivity("Generate PDF");

        // Simulate adding some attributes related to the operation
        activity?.SetTag("pdf.size", "A4");
        activity?.SetTag("pdf.content", "Hello World");

        try
        {
            // Initialize the PDF generator
            var renderer = new ChromePdfRenderer();

            // Generate a PDF from HTML
            var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");

            // Save the PDF to a file
            var outputPath = "output.pdf";
            pdf.SaveAs(outputPath);

            // Log success
            activity?.SetTag("pdf.status", "Success");
            activity?.SetTag("pdf.outputPath", outputPath);
        }
        catch (Exception ex)
        {
            // Log any exceptions that occur during PDF generation
            activity?.SetTag("pdf.status", "Error");
            activity?.SetTag("pdf.error", ex.Message);
            throw;
        }
    }
}
Imports IronPdf
Imports OpenTelemetry.Trace

Public Class PdfService
	Private ReadOnly _tracer As Tracer

	Public Sub New(ByVal tracer As Tracer)
		_tracer = tracer
	End Sub

	Public Sub GeneratePdf()
		' Create a new activity for this operation
		Dim activity = _tracer.StartActivity("Generate PDF")

		' Simulate adding some attributes related to the operation
		If activity IsNot Nothing Then
			activity.SetTag("pdf.size", "A4")
		End If
		If activity IsNot Nothing Then
			activity.SetTag("pdf.content", "Hello World")
		End If

		Try
			' Initialize the PDF generator
			Dim renderer = New ChromePdfRenderer()

			' Generate a PDF from HTML
			Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")

			' Save the PDF to a file
			Dim outputPath = "output.pdf"
			pdf.SaveAs(outputPath)

			' Log success
			If activity IsNot Nothing Then
				activity.SetTag("pdf.status", "Success")
			End If
			If activity IsNot Nothing Then
				activity.SetTag("pdf.outputPath", outputPath)
			End If
		Catch ex As Exception
			' Log any exceptions that occur during PDF generation
			If activity IsNot Nothing Then
				activity.SetTag("pdf.status", "Error")
			End If
			If activity IsNot Nothing Then
				activity.SetTag("pdf.error", ex.Message)
			End If
			Throw
		End Try
	End Sub
End Class
$vbLabelText   $csharpLabel

在此範例中,我們建立了一個新的服務類 PdfService,其包含一個方法 GeneratePdf 用於生成 PDF 文件。 我們使用 IronPDF 的 ChromePdfRenderer 類將 HTML 渲染為 PDF 文件。 利用 OpenTelemetry,我們啟動了一個名為"生成 PDF"的新活動來監視此次操作。 我們為活動新增了自定義標籤,以提供有關 PDF 生成過程的附加上下文,如 PDF 的大小、內容型別及輸出路徑。 我們還捕獲自任何異常,以便在相同活動中適當地記錄錯誤。

結論

Opentelemetry C# (對開發者運作方式):圖 3 - 授權

將 OpenTelemetry 整合到您的 .NET 應用程式中,可以收集寶貴的遙測資料,提供有關您的應用程式性能和行為的見解。 通過遵循本教程中列出步驟,您已為 .NET Web 應用程式設置了基本的跟蹤和度量收集。 通過探索更多高級 OpenTelemetry 功能,如將遙測資料匯出到外部監控工具或同時收集日誌、跟蹤和度量來進一步試驗。

IronPDF 提供IronPDF 的免費試用以供生產使用來測試其完整功能。 授權的起價低至 $399。

常見問題

OpenTelemetry在C#開發中的目的為何?

OpenTelemetry提供了一個統一的方法來收集、處理和導出遙測資料,如追踪、指標和日誌,使開發者能夠即時監控和了解應用程式的性能。

我可以如何開始將OpenTelemetry整合到我的C#應用程式中?

首先通過NuGet安裝必要的OpenTelemetry套件,然後通過修改'Startup.cs'中的'ConfigureServices'方法來配置您的應用程式,以包含OpenTelemetry的追踪和指標。

設置C#中的OpenTelemetry環境需要哪些步驟?

確保您的機器上已安裝.NET SDK。您可以通過在命令行中運行dotnet --version來驗證安裝。

如何在C#中使用HTML內容生成PDF?

您可以使用IronPDF程式庫的ChromePdfRenderer類渲染HTML為PDF文件,然後使用SaveAs方法保存生成的PDF。

如何在C#應用程式中監控PDF生成過程?

使用OpenTelemetry的Tracer為PDF生成建立一個活動,新增自定義標籤以記錄過程中的相關資訊以供監控。

什麼是自定義指標,如何在C#中使用OpenTelemetry?

自定義指標是特定於應用程式的資料點,您可以通過使用OpenTelemetry的MeterCounter類手動檢測您的程式碼來收集。

如何確保C#中的PDF生成可靠?

使用IronPDF程式庫可可靠生成、操作和渲染PDF文件。IronPDF提供了強大的功能以確保應用程式中高質量的PDF輸出。

是否有適用於C#中的PDF生成幫助程式庫的授權選項?

IronPDF提供用於生產測試的免費試用,授權起價為$399,使開發者能夠探索其全部功能。

如何測試C#應用程式中的OpenTelemetry整合?

運行您的應用程式並使用網頁瀏覽器或curl等工具發出請求,然後觀察控制台中輸出的遙測資料如追踪和指標。

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天。
聊天
電子郵件
給我打電話