Opentelemetry C#(對於開發者的運行原理)
OpenTelemetry 是一套工具、API 和 SDK,協同工作以收集、處理和匯出您的應用程式的遙測資料,如跟蹤、度量和日誌。 本教程旨在幫助初學者瞭解如何使用擴展方法將 OpenTelemetry 整合到 C# 應用程式中,重點在於內建的度量收集,以有效監控 .NET 應用程式。 我們還將學習 IronPDF library for PDF generation in C#。
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
此命令在一個名為 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>
替換
在您的應用程式中配置 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 文件。 這一功能特別適用於生成報告、發票或任何基於文件的輸出從 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
設置 IronPDF
首先,您需要將 IronPDF 新增到您的 .NET 專案中。 您可以使用 NuGet 套件管理器來達成此操作。 打開終端機並導航到您的專案目錄。 然後,運行以下命令以安裝 IronPDF:
dotnet add package IronPDF
dotnet add package IronPDF
使用 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
在此範例中,我們建立了一個新的服務類 PdfService,其包含一個方法 GeneratePdf 用於生成 PDF 文件。 我們使用 IronPDF 的 ChromePdfRenderer 類將 HTML 渲染為 PDF 文件。 利用 OpenTelemetry,我們啟動了一個名為"生成 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等工具發出請求,然後觀察控制台中輸出的遙測資料如追踪和指標。




