跳至页脚内容
.NET 帮助

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

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

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 Web 项目:

dotnet new web -o MyTelemetryApp
cd MyTelemetryApp
dotnet new web -o MyTelemetryApp
cd MyTelemetryApp
SHELL

此命令会在名为 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>
SHELL

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

在您的应用程序中配置 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
$vbLabelText   $csharpLabel

此代码片段显示了如何配置 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
$vbLabelText   $csharpLabel

此设置启用从 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)
$vbLabelText   $csharpLabel

此代码片段演示了如何创建一个自定义指标来计数应用程序中的请求,并为每个指标加上请求路径标签。 通过利用 OpenTelemetry 提供的扩展方法,开发人员可以对遥测数据收集过程施加更细致的控制。

测试您的集成

使用命令行或 Visual Studio 运行您的应用程序。 通过在网络浏览器中导航到其 URL 或使用诸如 curl 之类的工具向您的应用程序发送一些请求。 您应该看到遥测数据,包括跟踪和指标,正在打印到您的控制台输出。

curl http://localhost:5000
curl http://localhost:5000
SHELL

IronPDF的介绍

Opentelemetry C#(开发者使用指南):图 2 - 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
$vbLabelText   $csharpLabel

设置 IronPDF

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

dotnet add package IronPDF
dotnet add package IronPDF
SHELL

使用 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
$vbLabelText   $csharpLabel

在此示例中,我们创建了一个新的服务类 PdfService,其中包含用于生成 PDF 文档的 GeneratePdf 方法。 我们使用 IronPDF 的 ChromePdfRenderer 类将 HTML 渲染为 PDF 文档。 使用 OpenTelemetry,我们启动了一个名为"生成 PDF"的新活动,以监控此操作。 我们为活动添加了自定义标签,以提供有关 PDF 生成过程的附加背景信息,例如 PDF 的大小、内容类型和输出路径。 我们还会捕获任何异常,以便在同一活动中适当地记录错误。

结论

Opentelemetry C#(开发者使用指南):图 3 - 授权

将 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的MeterCounter类手动对代码进行检测来收集的特定于应用程序的数据点。

如何确保C#中PDF的可靠生成?

使用IronPDF库可生成、操作和渲染PDF文档。IronPDF提供强大的功能,确保您的应用程序中PDF输出的高质量。

是否有关于在C#中生成PDF的库的可用许可选项?

IronPDF提供用于生产测试的免费试用,许可证从399美元起,使开发人员能够探索其全部功能。

如何测试我在C#应用程序中的OpenTelemetry集成?

运行您的应用程序并使用Web浏览器或curl等工具发出请求,然后观察控制台输出的遥测数据,如跟踪和指标。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。

Jacob 拥有曼彻斯特大学土木工程一级荣誉工程学士学位(BEng)(1998-2001 年)。他的旗舰产品 IronPDF 和 Iron Suite for .NET 库在全球的 NuGet 安装量已超过 3000 万次,其基础代码继续为全球使用的开发人员工具提供动力。Jacob 拥有 25 年的商业经验和 41 年的编码专业知识,他一直专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我