在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
OpenTelemetry OpenTelemetry 是一套工具、API 和 SDK,可共同收集、处理和导出遥测数据,如应用程序中的跟踪、所有指标和日志。本教程旨在帮助初学者了解如何使用扩展方法在 C# 应用程序中集成 OpenTelemetry,重点是内置指标收集,以有效监控 .NET 应用程序。我们还将学习 IronPDF 图书馆
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 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>
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>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'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
curl http://localhost:5000
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'curl http: 'localhost:5000
IronPDF 是面向 C# 开发人员的强大库,可直接在 .NET 应用程序中生成、处理和渲染 PDF 文档。这一功能对于生成报告、发票或任何其他文档尤其有用。 网络应用程序的文档式输出IronPDF 可为开发人员的应用程序、服务或桌面应用程序提供支持。将 IronPDF 与 OpenTelemetry 相结合,开发人员就可以监控其应用程序中 PDF 生成过程的性能和可靠性,从而确保流畅的用户体验。
首先,您需要将 IronPDF 添加到您的 .NET 项目中。您可以使用 NuGet 软件包管理器来完成这项工作。打开终端并导航到项目目录。然后,运行以下命令安装 IronPDF:
Install-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 提供 免费试用 用于生产,以全力测试其所有功能。许可证从 $749 开始。