フッターコンテンツにスキップ
.NETヘルプ

Opentelemetry C#(開発者向けの動作方法)

OpenTelemetryは、トレース、メトリクス、ログなどのテレメトリデータをアプリケーションから収集、処理、エクスポートするためのツール、API、SDKのセットです。 このチュートリアルは、初心者がOpenTelemetryをC#アプリケーションに統合する方法を理解するのに役立ち、.NETアプリケーションを効果的に監視するための組み込みメトリクス収集に焦点を当てています。 さらに、C#でのPDF生成のためのIronPDFライブラリについて学びます。

OpenTelemetryの紹介

Opentelemetry C#(開発者向けの仕組み):図1 - OpenTelemetry

OpenTelemetryは、アプリケーションからさまざまなデータを収集するための統一された方法を提供します。 .NET開発者にとって、OpenTelemetryを統合することは、アプリケーションの監視をより密接に行い、リアルタイムでのパフォーマンスを理解し、問題を迅速に特定することを意味します。 OpenTelemetryのインスツルメンテーションライブラリは、.NETアプリのトレーシングとメトリクス収集を自動的に有効にします。

OpenTelemetryフレームワークで収集されたメトリクスにより、開発者は.NETランタイム環境に関する貴重な洞察を得ることができます。 OpenTelemetry .NET実装は、.NET Coreや.NET Frameworkを含む.NETランタイムをサポートしています。 標準化されたテレメトリデータ収集のための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 Package Manager 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

このコードスニペットは、ASP.NET CoreアプリケーションおよびHTTPクライアントからのテレメトリデータを収集し、コンソールにエクスポートするためのOpenTelemetryの設定方法を示しています。 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
$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アプリケーションからのドキュメントベースの出力、サービス、デスクトップアプリの生成に特に便利です。IronPDFと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のセットアップ

最初に、.NETプロジェクトにIronPDFを追加する必要があります。 これをNuGet Package Managerを使用して行うことができます。 ターミナルを開いてプロジェクトディレクトリに移動します。 次に、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

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

結論

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

.NETアプリケーションにOpenTelemetryを統合すると、アプリケーションのパフォーマンスと動作に関する貴重なテレメトリデータを収集できます。 このチュートリアルで説明されている手順に従って、.NET Webアプリケーションの基本的なトレースとメトリクス収集を設定しました。 テレメトリデータを外部のモニタリングツールにエクスポートしたり、トレースやメトリクスに加えてログを収集したりするなど、OpenTelemetryの高度な機能を探求してさらに実験してください。

IronPDFは、その完全な機能を試すためにIronPDFの無料トライアルを提供しています。 ライセンスは$399からです。

よくある質問

C#開発におけるOpenTelemetryの目的は何ですか?

OpenTelemetryは、トレース、メトリクス、ログなどのテレメトリーデータを収集、処理、エクスポートするための統一されたアプローチを提供し、開発者がリアルタイムでアプリケーションのパフォーマンスを監視し、理解することを可能にします。

C#アプリケーションにOpenTelemetryを統合し始めるにはどうすればよいですか?

最初に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生成のアクティビティを作成し、モニタリングのためにプロセスに関する関連情報をログに記録するカスタムタグを追加します。

カスタムメトリクスとは何で、C#でOpenTelemetryと共にどのように使用できますか?

カスタムメトリクスは、OpenTelemetryのMeterCounterクラスを使用してコードに手動でインストルメンテーションを施すことにより収集できるアプリケーション固有のデータポイントです。

C#で信頼性の高いPDF生成を確保するにはどうすればよいですか?

IronPDFライブラリを使用してPDFドキュメントを生成、操作、およびレンダリングします。IronPDFは、アプリケーションで高品質なPDF出力を確保するための堅牢な機能を提供します。

C#でのPDF生成を支援するライブラリに利用可能なライセンスオプションはありますか?

IronPDFは、$399から始まるライセンスで試用版を提供しており、開発者がその完全な機能を探求することができます。

C#アプリケーションでOpenTelemetry統合をテストするにはどうすればよいですか?

アプリケーションを実行し、Webブラウザやcurlのようなツールを使用してリクエストを行い、その後、コンソールに出力されたトレースやメトリクスなどのテレメトリーデータを観察します。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。