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

OpenTelemetryは、アプリケーションからさまざまなデータを収集するための統一された方法を提供します。 .NET開発者にとって、OpenTelemetryを統合することは、アプリケーションの監視をより密接に行い、リアルタイムでのパフォーマンスを理解し、問題を迅速に特定することを意味します。 OpenTelemetryのインスツルメンテーションライブラリは、.NETアプリのトレーシングとメトリクス収集を自動的に有効にします。
OpenTelemetryフレームワークで収集されたメトリクスにより、開発者は.NETランタイム環境に関する貴重な洞察を得ることができます。 OpenTelemetry .NET実装は、.NET Coreや.NET Frameworkを含む.NETランタイムをサポートしています。 標準化されたテレメトリデータ収集のためのOpenTelemetryプロトコルに準拠しています。
環境のセットアップ
始めるには、マシンに.NET SDKがインストールされている必要があります。Visual Studioを使用している場合は、.NET SDKが同梱されている可能性があります。 コマンドラインを開いて次のコマンドを実行することで、現在 for .NET SDKバージョンを確認できます:
次に、以下のコマンドを実行して新しい.NET Webプロジェクトを作成します:
dotnet new web -o MyTelemetryApp
cd MyTelemetryApp
このコマンドは、ディレクトリ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>
**<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 Sub ConfigureServices(ByVal services As IServiceCollection)
services.AddControllers()
services.AddOpenTelemetryTracing(Sub(builder)
builder.AddAspNetCoreInstrumentation().AddHttpClientInstrumentation().AddConsoleExporter()
End Sub)
End Subこのコードスニペットは、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 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このセットアップにより、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();
});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)このコードスニペットは、アプリケーションへのリクエストをカウントし、各メトリクスにリクエストパスをタグ付けするカスタムメトリクスを作成する方法を示しています。 OpenTelemetryが提供する拡張メソッドを活用することで、開発者はテレメトリデータ収集プロセスをより詳細に制御できます。
統合テスト
コマンドラインまたはVisual Studioを使用してアプリケーションを実行します。 ウェブブラウザのURLにアクセスするか、curlのようなツールを使用して、アプリケーションにいくつかリクエストを行います。 コンソール出力に、トレースやメトリクスを含むテレメトリデータが表示されるはずです。
curl http://localhost:5000
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");
}
}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 ClassIronPDFのセットアップ
最初に、.NETプロジェクトにIronPDFを追加する必要があります。 これをNuGet Package Managerを使用して行うことができます。 ターミナルを開いてプロジェクトディレクトリに移動します。 次に、IronPDFをインストールするために、以下のコマンドを実行します:
dotnet add 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;
}
}
}Imports IronPdf
Imports OpenTelemetry.Trace
Public Class PdfService
Private ReadOnly _tracer As Tracer
Public Sub New(tracer As Tracer)
_tracer = tracer
End Sub
Public Sub GeneratePdf()
' Create a new activity for this operation
Using 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
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
activity?.SetTag("pdf.status", "Success")
activity?.SetTag("pdf.outputPath", outputPath)
Catch ex As Exception
' Log any exceptions that occur during PDF generation
activity?.SetTag("pdf.status", "Error")
activity?.SetTag("pdf.error", ex.Message)
Throw
End Try
End Using
End Sub
End Classこの例では、PDFドキュメントを生成するためのメソッドGeneratePdfを含む新しいサービスクラスPdfServiceを作成します。 HTMLをPDFドキュメントとしてレンダリングするために、IronPDFのChromePdfRendererクラスを使用します。 OpenTelemetryを使用して、この操作を監視するために"Generate PDF"という新しいアクティビティを開始します。 PDF生成プロセスに関する追加のコンテキストを提供するために、PDFのサイズ、コンテンツタイプ、出力パスなどのカスタムタグをアクティビティに追加します。 また、同じアクティビティ内でエラーを適切にログに記録するために例外をキャッチします。
結論
.NETアプリケーションにOpenTelemetryを統合すると、アプリケーションのパフォーマンスと動作に関する貴重なテレメトリデータを収集できます。 このチュートリアルで説明されている手順に従って、.NET Webアプリケーションの基本的なトレースとメトリクス収集を設定しました。 テレメトリデータを外部のモニタリングツールにエクスポートしたり、トレースやメトリクスに加えてログを収集したりするなど、OpenTelemetryの高度な機能を探求してさらに実験してください。
IronPDFは、その完全な機能を試すためにIronPDFの無料トライアルを提供しています。 ライセンスは$399からです。

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。
関連する記事


