.NET ヘルプ

Opentelemetry C#(開発者向けの仕組み)

更新済み 3月 6, 2024
共有:

オープンテレメトリ は、ツール、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 を作成し、PDFドキュメントを生成するためのメソッド GeneratePdf を含めます。 私たちは、HTMLをPDFドキュメントとしてレンダリングするためにIronPDFのChromePdfRendererクラスを使用します。 OpenTelemetryを使用して、この操作を監視するために「Generate PDF」という名前の新しいアクティビティを開始します。 PDF生成プロセスに関する追加のコンテキストを提供するために、PDFのサイズ、コンテンツタイプ、出力パスなどの情報をカスタムタグとしてアクティビティに追加します。 私たちは同じアクティビティ内でエラーを適切にログに記録するために、例外もキャッチします。

結論

Opentelemetry C# (開発者向けの仕組み):図3 - ライセンス

.NET アプリケーションに OpenTelemetry を統合することで、貴重なテレメトリーデータを収集し、アプリケーションのパフォーマンスや動作に関する洞察を提供できます。 このチュートリアルの手順に従うことで、.NET ウェブアプリケーションの基本的なトレーシングおよびメトリクス収集を設定しました。 さらに実験を進めて、テレメトリデータを外部のモニタリングツールにエクスポートする機能や、トレースとメトリクスと共にログを収集する機能など、より高度なOpenTelemetry機能を探索してください。

IronPDFは提供します 無料試用 生産のために、すべての機能を最大限にテストするために。 ライセンスは $749 から開始します。

< 以前
C# スパン(開発者のための仕組み)
次へ >
C# WebRTC(開発者向けの仕組み)

準備はできましたか? バージョン: 2024.9 新発売

無料のNuGetダウンロード 総ダウンロード数: 10,659,073 View Licenses >