.NET 帮助

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

Chipego
奇佩戈-卡琳达
2024年三月6日
分享:

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

OpenTelemetry 简介

OpenTelemetry C#(如何为开发人员工作):图 1 - OpenTelemetry

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

添加所需软件包

首先,将必要的 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。 这包括设置 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();
    });
}

本代码片段展示了如何配置 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);
    });
}

此设置可从 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();
});

本代码片段演示了如何创建一个自定义指标,用于统计对应用程序的请求,并用请求路径标记每个指标。 通过利用 OpenTelemetry 提供的扩展方法,开发人员可以对遥测数据收集过程进行更精细的控制。

测试集成

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

curl http://localhost:5000

IronPDF 介绍

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

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

IronPDF 在以下方面表现出色HTML 转 PDF转换,确保精确保留原始布局和样式。 它非常适合从基于网络的内容(如报告、发票和文档)创建PDF。 IronPDF 支持 HTML 文件、URL 和原始 HTML 字符串,能够轻松生成高质量的 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");
    }
}

设置 IronPDF

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

dotnet add 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;
        }
    }
}

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

结论

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

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

IronPDF 提供一个免费试用 IronPDF我们将在本文档的最后一部分中介绍我们的产品,以测试其全部功能。 许可证起价低至 399 美元。

Chipego
软件工程师
Chipego 拥有出色的倾听技巧,这帮助他理解客户问题并提供智能解决方案。他在 2023 年加入 Iron Software 团队,此前他获得了信息技术学士学位。IronPDF 和 IronOCR 是 Chipego 主要专注的两个产品,但他对所有产品的了解每天都在增长,因为他不断找到支持客户的新方法。他喜欢 Iron Software 的合作氛围,公司各地的团队成员贡献他们丰富的经验,以提供有效的创新解决方案。当 Chipego 离开办公桌时,你经常可以发现他在看书或踢足球。
< 前一页
C# Span(开发人员如何使用)
下一步 >
C# WebRTC(开发人员如何工作)