.NET 帮助

Opentelemetry C#(开发人员如何使用)

发布 2024年三月6日
分享:

OpenTelemetry OpenTelemetry 是一套工具、API 和 SDK,可共同收集、处理和导出遥测数据,如应用程序中的跟踪、所有指标和日志。本教程旨在帮助初学者了解如何使用扩展方法在 C# 应用程序中集成 OpenTelemetry,重点是内置指标收集,以有效监控 .NET 应用程序。我们还将学习 IronPDF 图书馆

OpenTelemetry 简介

OpenTelemetry C#(如何为开发人员工作):图 1 - 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 Framework 3.0,创建一个新的 .NET Web 项目:

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>
'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>
VB   C#

更换 每个软件包的最新版本。

在应用程序中配置 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
VB   C#

本代码片段展示了如何配置 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
VB   C#

此设置可从 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)
VB   C#

本代码片段演示了如何创建一个自定义指标,用于统计对应用程序的请求,并用请求路径标记每个指标。通过利用 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
VB   C#

IronPDF 简介

Opentelemetry C#(如何为开发人员工作):图 2 - IronPDF

IronPDF 是面向 C# 开发人员的强大库,可直接在 .NET 应用程序中生成、处理和渲染 PDF 文档。这一功能对于生成报告、发票或任何其他文档尤其有用。 网络应用程序的文档式输出IronPDF 可为开发人员的应用程序、服务或桌面应用程序提供支持。将 IronPDF 与 OpenTelemetry 相结合,开发人员就可以监控其应用程序中 PDF 生成过程的性能和可靠性,从而确保流畅的用户体验。

设置 IronPDF

首先,您需要将 IronPDF 添加到您的 .NET 项目中。您可以使用 NuGet 软件包管理器来完成这项工作。打开终端并导航到项目目录。然后,运行以下命令安装 IronPDF:

Install-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
VB   C#

在本例中,我们创建了一个新的服务类 PDFService,其中包含一个用于生成 PDF 文档的方法 GeneratePdf。我们使用 IronPDF 的 ChromePdfRenderer 类将 HTML 呈现为 PDF 文档。通过 OpenTelemetry,我们启动了一个名为 "生成 PDF "的新活动来监控这一操作。我们将自定义标签添加到活动中,以提供有关 PDF 生成过程的额外上下文,例如 PDF 的大小、内容类型和输出路径。我们还会捕捉任何异常,以便在同一活动中适当记录错误。

结论

Opentelemetry C#(如何为开发人员工作):图 3 - 许可证

将 OpenTelemetry 集成到您的 .NET 应用程序中,您就可以收集有价值的遥测数据,深入了解应用程序的性能和行为。按照本教程中概述的步骤,您已经为 .NET 网络应用程序设置了基本的跟踪和指标收集功能。您还可以探索更高级的 OpenTelemetry 功能,如将遥测数据导出到外部监控工具或在收集跟踪和指标的同时收集日志。

IronPDF 提供 免费试用 用于生产,以全力测试其所有功能。许可证从 $749 开始。

< 前一页
C# Span(开发人员如何使用)
下一步 >
C# WebRTC(开发人员如何工作)

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 10,731,156 查看许可证 >