.NET 幫助

Opentelemetry C#(開發人員如何使用)

發佈 2024年3月6日
分享:

開放遙測 是一組工具、API 和 SDK,它們協同工作來收集、處理和導出遙測數據,如追踪、所有指標和應用程式日誌。本教程旨在幫助初學者了解如何使用擴展方法在 C# 應用程式中整合 OpenTelemetry,重點關注內建的指標收集,以有效地監控 .NET 應用程式。我們還將了解 IronPDF 圖書館

OpenTelemetry 簡介

Opentelemetry C#(如何為開發者運作):圖1 - 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

此命令會在一個名為 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 指標 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 與 OpenTelemetry,開發者可以監控應用程式內 PDF 生成流程的性能與可靠性,確保用戶體驗順暢。

設置 IronPDF

首先,您需要將 IronPDF 添加到您的 .NET 專案。您可以使用 NuGet 套件管理器來完成此操作。打開您的終端並導航到您的專案目錄。然後,運行以下命令來安裝 IronPDF:

Install-Package IronPdf

使用 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
VB   C#

在此範例中,我們創建了一個新的服務類別 PdfService,其中包含一個方法 GeneratePdf 用於生成 PDF 文件。我們使用 IronPDF 的 ChromePdfRenderer 類來渲染 HTML 為 PDF 文件。使用 OpenTelemetry,我們開始一個名為「Generate PDF」的新活動來監控此操作。我們為活動添加自定義標籤,以提供有關 PDF 生成過程的額外上下文資訊,例如 PDF 的大小、內容類型和輸出路徑。我們還捕捉任何異常,以便在同一活動中適當記錄錯誤。

結論

OpenTelemetry C#(對開發人員的工作方式):圖 3 - 授權

將 OpenTelemetry 整合到您的 .NET 應用程式中,可以收集寶貴的遙測數據,提供有關應用程式效能和行為的見解。通過遵循本教程中的步驟,您已經為 .NET 網頁應用程式設置了基本的追蹤和度量收集。進一步實驗,探索更多高級的 OpenTelemetry 功能,如將遙測數據匯出到外部監控工具或在追蹤和度量的同時收集日誌。

IronPDF 提供 免費試用 用於生產以全力測試其所有功能。授權起價為 $749。

< 上一頁
C# Span(開發者如何使用)
下一個 >
C# WebRTC(開發人員如何運作)

準備開始了嗎? 版本: 2024.10 剛剛發布

免費 NuGet 下載 總下載次數: 10,993,239 查看許可證 >