在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
OpenTelemetry是一套工具、API 和 SDK,可共同收集、处理和导出应用程序中的跟踪、度量和日志等遥测数据。 本教程旨在帮助初学者了解如何使用扩展方法在 C# 应用程序中集成 OpenTelemetry,重点是内置指标收集,以有效监控 .NET 应用程序。 我们还将了解用 C# 生成 PDF 的 IronPDF 库.
OpenTelemetry该工具提供了一种从应用程序中收集各种数据的统一方法。 对于 .NET 开发人员来说,集成 OpenTelemetry 意味着您可以更密切地监控应用程序,了解它们的实时运行情况,并快速发现问题。 OpenTelemetry 的仪器库可自动跟踪 .NET 应用程序并收集指标。
通过 OpenTelemetry Framework 收集的指标,开发人员可以获得对 .NET 运行环境的宝贵见解。 OpenTelemetry .NET 实现支持 .NET 运行时,包括 .NET Core 和 .NET Framework。 它遵循 OpenTelemetry 协议,用于标准化遥测数据收集。
首先,您需要在计算机上安装 .NET SDK。如果您使用的是 Visual Studio,它很可能自带 .NET SDK。 您可以打开命令行并运行以下命令来检查当前的 .NET SDK 版本:
dotnet --version
接下来,运行.NET Framework 3.0,创建一个新的 .NET Web 项目:
dotnet new web -o MyTelemetryApp
cd MyTelemetryApp
此命令将在名为 MyTelemetryApp 的目录下创建一个新的 ASP.NET Core 项目。
首先,将必要的 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>
更换
添加必要的软件包后,您需要在应用程序中配置 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
IronPDF 是面向 C# 开发人员的强大库,可直接在 .NET 应用程序中生成、处理和渲染 PDF 文档。 这种能力尤其适用于生成报告、发票或任何其他文件。使用 HTML 从网络应用程序输出基于文档的内容IronPDF 可为开发人员的应用程序、服务或桌面应用程序提供支持。将 IronPDF 与 OpenTelemetry 相结合,开发人员就可以监控其应用程序中 PDF 生成过程的性能和可靠性,从而确保流畅的用户体验。
首先,您需要将 IronPDF 添加到您的 .NET 项目中。 您可以使用 NuGet 软件包管理器来完成这项工作。 打开终端并导航到项目目录。 然后,运行以下命令安装 IronPDF:
dotnet add package IronPDF
以下是如何使用 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,其中包含一个用于生成 PDF 文档的方法 GeneratePdf。 我们使用 IronPDF 的 ChromePdfRenderer 类将 HTML 呈现为 PDF 文档。 通过 OpenTelemetry,我们启动了一个名为 "生成 PDF "的新活动来监控该操作。 我们在活动中添加了自定义标签,以提供有关 PDF 生成过程的额外上下文,例如 PDF 的大小、内容类型和输出路径。 我们还要捕捉任何异常情况,以便在同一活动中适当记录错误。
将 OpenTelemetry 集成到您的 .NET 应用程序中,您就可以收集宝贵的遥测数据,深入了解应用程序的性能和行为。 按照本教程概述的步骤,您已经为 .NET 网络应用程序设置了基本的跟踪和指标收集功能。 通过探索更高级的 OpenTelemetry 功能,如将遥测数据导出到外部监控工具或收集日志以及跟踪和指标,进一步进行实验。
IronPDF 提供一个免费试用 IronPDF我们将在本文档的最后一部分中介绍我们的产品,以测试其全部功能。 许可证起价低至 399 美元。