Opentelemetry C#(开发人员如何使用)
OpenTelemetry 是一套工具、API 和 SDK,它们共同协作以收集、处理和导出应用程序中的跟踪、指标和日志等遥测数据。 本教程旨在帮助初学者理解如何使用扩展方法将 OpenTelemetry 集成到 C# 应用程序中,重点是内置指标收集,以有效监控 .NET 应用程序。 我们还将学习 IronPDF 库用于 C# 中的 PDF 生成。
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 指标 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 应用程序、服务或桌面应用程序生成文件。结合 OpenTelemetry,开发人员可以监控 PDF 生成过程的性能和可靠性,确保用户体验顺畅。
IronPDF在HTML到PDF转换方面表现出色,确保精确保留原始布局和样式。 它非常适合从基于Web的内容中创建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,其中包含用于生成 PDF 文档的 GeneratePdf 方法。 我们使用 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来验证安装。
如何使用HTML内容在C#中生成PDF?
您可以使用IronPDF库的ChromePdfRenderer类将HTML渲染为PDF文档,然后使用SaveAs方法保存生成的PDF。
如何在C#应用程序中监控PDF生成过程?
使用OpenTelemetry的Tracer创建一个PDF生成的活动,添加自定义标签来记录关于过程的相关信息以便进行监控。
什么是自定义指标,它们如何在OpenTelemetry与C#中使用?
自定义指标是您可以通过用OpenTelemetry的Meter和Counter类手动对代码进行检测来收集的特定于应用程序的数据点。
如何确保C#中PDF的可靠生成?
使用IronPDF库可生成、操作和渲染PDF文档。IronPDF提供强大的功能,确保您的应用程序中PDF输出的高质量。
是否有关于在C#中生成PDF的库的可用许可选项?
IronPDF提供用于生产测试的免费试用,许可证从399美元起,使开发人员能够探索其全部功能。
如何测试我在C#应用程序中的OpenTelemetry集成?
运行您的应用程序并使用Web浏览器或curl等工具发出请求,然后观察控制台输出的遥测数据,如跟踪和指标。




