Opentelemetry C#(對於開發者的運行原理)
OpenTelemetry 是一套工具、API 和 SDK,可共同收集、處理和匯出來自應用程式的軌跡、度量和日誌等遙測資料。 本教學旨在幫助初學者瞭解如何使用擴充方法在 C# 應用程式中整合 OpenTelemetry,並將重點放在內建的度量資料收集,以有效監控 .NET 應用程式。 我們還將瞭解 用於 C# 產生 PDF 的 IronPDF 函式庫。
OpenTelemetry 簡介

OpenTelemetry 提供統一的方式從您的應用程式收集各種資料。 對 .NET 開發人員而言,整合 OpenTelemetry 代表您可以更密切地監控您的應用程式,瞭解它們的即時效能,並快速找出問題。 OpenTelemetry 的儀器函式庫可自動啟用 .NET 應用程式的追蹤與度量資料收集功能。
透過 OpenTelemetry Framework 所收集的度量指標,開發人員可獲得對 .NET 執行環境的寶貴洞察力。 OpenTelemetry .NET 實作支援 .NET runtime,包括 .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
此指令會在一個名為 MyTelemetryApp 的目錄中建立一個新的 ASP.NET Core 專案。
整合 OpenTelemetry
新增所需的套件
首先,在您的專案中加入必要的 OpenTelemetry 套件。 開啟您的終端機,並導航至您的專案目錄。 然後,使用 NuGet Package Manager 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>
以每個套件的最新版本取代
在您的應用程式中設定 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
本程式碼片段展示如何設定 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
此設定可從 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)
此程式碼片段示範如何建立自訂指標,以計算對您應用程式的請求,並以請求路徑標記每個指標。 透過利用 OpenTelemetry 提供的擴充方法,開發人員可對遙測資料收集程序進行更仔細的控制。
測試您的整合
使用命令列或 Visual Studio 執行您的應用程式。 向您的應用程式提出一些請求,方法是在網頁瀏覽器中導航至其 URL,或是使用 curl 之類的工具。 您應該可以看到遙測資料,包括軌跡和指標,列印到您的主控台輸出。
curl http://localhost:5000
curl http://localhost:5000
IronPDF 簡介

IronPDF 是專為 C# 開發人員設計的功能強大的函式庫,可直接在 .NET 應用程式中產生、處理和渲染 PDF 文件。 此功能對於從使用 HTML 的 Web 應用程式、服務或桌面應用程式產生報告、發票或任何 以文件為基礎的輸出尤其有用。結合 IronPDF 與 OpenTelemetry,開發人員可以監控應用程式中 PDF 產生流程的效能與可靠性,確保順暢的使用者體驗。
IronPDF 擅長於 HTML 至 PDF 的轉換,可確保精確保留原始版面與樣式。 它非常適合從網頁內容(如報告、發票和文件)建立 PDF。 IronPDF 支援 HTML 檔案、URL 和原始 HTML 字串,可輕鬆製作高品質的 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
設定 IronPDF。
首先,您需要將 IronPDF 加入您的 .NET 專案。 您可以使用 NuGet Package Manager 進行這項工作。 開啟您的終端機,並導航至您的專案目錄。 然後,執行下列指令安裝 IronPDF:
dotnet add package IronPDF
dotnet add package IronPDF
使用 IronPDF 生成 PDF 並使用 OpenTelemetry 進行監控
以下是如何使用 OpenTelemetry 產生一個簡單 PDF 文件並監控運作的範例。 以下範例假設您已在應用程式中設定 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
在這個範例中,我們建立一個新的服務類 PdfService,其中包含一個方法 GeneratePdf,用來產生 PDF 文件。 我們使用 IronPDF 的 ChromePdfRenderer 類將 HTML 呈現為 PDF 文件。 透過 OpenTelemetry,我們啟動一個名為"Generate PDF"的新活動來監控這項作業。 我們在活動中加入自訂標籤,以提供 PDF 產生過程的其他相關資訊,例如 PDF 的大小、內容類型和輸出路徑。 我們也會捕捉任何異常,以便在同一活動中適當地記錄錯誤。
結論

將 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 的 Meter 和 Counter 類手動為代碼進行插裝來收集。
如何確保 C# 中的 PDF 生成可靠性?
使用 IronPDF 庫可靠地生成、操作和呈現 PDF 文檔。IronPDF 提供穩健的功能,確保您的應用程式中高品質的 PDF 輸出。
是否有助於在 C# 中生成 PDF 的庫的許可選項?
IronPDF 提供了生產測試的免費試用,許可證起價為 $399,讓開發人員可以探索其全部功能。
如何測試我在 C# 應用程式中的 OpenTelemetry 整合?
運行您的應用程式並使用網頁瀏覽器或像 curl 這樣的工具發送請求,然後觀察控制台輸出的遙測數據,例如追蹤和指標。


