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

OpenTelemetry .NET(開発者向けの動作方法)

Introduction

動的でデータ駆動的な豊富なPDFドキュメントを作成することは、現代のソフトウェア開発の多くの分野で一般的な要求です。 ビジネスは請求書、報告書、またはドキュメントを作成するために迅速に高品質のPDFを生成する能力に大きく依存しています。 しかし、アプリの健康を維持し、ユーザーの満足度を確保するためには、PDFの生成プロセスの効果性を追跡して理解することが不可欠です。

この記事は、開発者がIronPDFとOpenTelemetry.NETの機能を活用してPDF生成操作を改善し、アプリケーションのパフォーマンスについて重要な洞察を提供する方法について議論することを目的としています。 これら両方の技術の特性と利点を探り、.NETアプリケーションでのPDFの生成と監視の最適化のためにどのように調和して連携できるかを示します。

OpenTelemetryとは何ですか?

OpenTelemetryは、特にクラウドネイティブアプリ向けに作られたベンダーニュートラルの可観測性フレームワークです。OpenTelemetryの自動インストゥルメンテーションは、ログ、トレース、メトリクスを含むテレメトリ情報を収集するための単一APIを提供します。 この広範なデータの使用により、開発者は問題を効果的にデバッグし、パフォーマンスのボトルネックを特定し、プログラムの動作を完全に理解することができます。 OpenTelemetryは、包括的かつ柔軟なテレメトリデータ収集のために、自動および手動の両方のインストゥルメンテーションをサポートします。

OpenTelemetryの主要コンポーネント

  • API: アプリケーションをインストゥルメンテーションしてテレメトリデータを生成するために、OpenTelemetryは標準化されたAPIのセットを指定します。これにより、インストゥルメンテーション手続きが簡単になり、さまざまなプログラミング言語での一貫性が保証されます。
  • SDKs: アプリケーションをインストゥルメンテーションするために、OpenTelemetryは特定の言語に合わせたSDKを提供しています。 開発者は.NET SDKの助けを借りて、簡単にOpenTelemetryの機能を.NETプロジェクトに組み込むことができます。
  • エクスポーター: これらのパーツは、収集されたテレメトリデータをバックエンドシステムに送信し、保存と分析を行う責任を担っています。 Zipkin(トレース)、Prometheus(メトリクス)、Jaeger(トレース)などの広く使用されているバックエンドシステムのエクスポーターを多くサポートしています。
  • 自動インストゥルメンテーション: この方法は.NET Coreアプリケーションのプロセスを簡潔にします。 OpenTelemetryライブラリは、Webアプリケーションまたはサービス内の一般的な操作のデータを自動的にキャプチャできます。これにより手動のコード修正が不要になり、統合プロセスが簡素化されます。
  • 手動インストゥルメンテーション: データ収集を粒度の細かい制御で行うために、OpenTelemetryは手動インストゥルメンテーションのための強力なAPIを提供しています。 このアプローチは、独自のアプリケーションロジックに関連する特定のメトリクスとトレースをキャプチャすることを可能にします。 自動インストゥルメンテーションが特定のニーズをカバーしない場合.NET Frameworkアプリケーションに特に有用です。

.NETでOpenTelemetryを使用する利点

.NETアプリケーションにOpenTelemetryを統合すると、次のような利点があります。

  • ベンダーニュートラリティ: OpenTelemetryは、さまざまなバックエンドシステムとシームレスに統合することでアプリケーションに柔軟性と将来の保護を提供します。 バックエンドシステムを切り替えるためにインストゥルメンテーションコードを変更する必要はありません。
  • 標準化されたアプローチ: アプリケーションのさまざまな領域をインストゥルメンテーションすることがしやすくなります。 開発者は、統一されたAPIを使用してログ、トレース、メトリクスを収集できるため、コードが読みやすく維持しやすくなります。
  • 詳細なパフォーマンス分析: OpenTelemetryは、包括的なパフォーマンス分析のための豊富なデータ(メトリクス、トレース、ログ)を提供します。 この全体的な視点を使用して、最適化のための領域を特定し、問題の根本原因を判断できます。
  • トラブルシューティングの改善: OpenTelemetryがキャプチャするリッチなトレースデータを使用して、アプリケーションを介したリクエストの経路を追跡することで、開発者は問題を特定して修正しやすくなります。
  • スケーラビリティの向上: アプリケーションの複雑さは、OpenTelemetryのスケール能力を妨げないでしょう。 大きなコード修正をせずに新しい機能やサービスを簡単にインストゥルメンテーションできます。

OpenTelemetryの作成と設定

ASP.NETアプリケーションでのOpenTelemetryの設定

OpenTelemetryをアプリケーションで設定する必要があります; ASP.NET Coreアプリケーションの場合、これは通常、Startup.csファイルのConfigureServicesメソッドで行われます。これは、Jaegerエクスポーター設定の一例です。

using OpenTelemetry.Trace;
using OpenTelemetry.Exporter.Jaeger;
using OpenTelemetry.Resources;

public void ConfigureServices(IServiceCollection services)
{
    // Configure OpenTelemetry
    services.AddOpenTelemetry().WithTracing(builder =>
    {
        // Configure Jaeger exporter. The 'serviceName' can be read from environment variables
        builder
            .SetResourceBuilder(
                ResourceBuilder.CreateDefault()
                    .AddService("YourServiceName"))
            .AddAspNetCoreInstrumentation()
            .AddJaegerExporter(opt =>
            {
                opt.AgentHost = "localhost"; // Jaeger agent host
                opt.AgentPort = 14250; // Jaeger agent port
            });
    });
    // Other service configurations...
}
using OpenTelemetry.Trace;
using OpenTelemetry.Exporter.Jaeger;
using OpenTelemetry.Resources;

public void ConfigureServices(IServiceCollection services)
{
    // Configure OpenTelemetry
    services.AddOpenTelemetry().WithTracing(builder =>
    {
        // Configure Jaeger exporter. The 'serviceName' can be read from environment variables
        builder
            .SetResourceBuilder(
                ResourceBuilder.CreateDefault()
                    .AddService("YourServiceName"))
            .AddAspNetCoreInstrumentation()
            .AddJaegerExporter(opt =>
            {
                opt.AgentHost = "localhost"; // Jaeger agent host
                opt.AgentPort = 14250; // Jaeger agent port
            });
    });
    // Other service configurations...
}
Imports OpenTelemetry.Trace
Imports OpenTelemetry.Exporter.Jaeger
Imports OpenTelemetry.Resources

Public Sub ConfigureServices(ByVal services As IServiceCollection)
	' Configure OpenTelemetry
	services.AddOpenTelemetry().WithTracing(Sub(builder)
		' Configure Jaeger exporter. The 'serviceName' can be read from environment variables
		builder.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("YourServiceName")).AddAspNetCoreInstrumentation().AddJaegerExporter(Sub(opt)
				opt.AgentHost = "localhost" ' Jaeger agent host
				opt.AgentPort = 14250 ' Jaeger agent port
		End Sub)
	End Sub)
	' Other service configurations...
End Sub
$vbLabelText   $csharpLabel

"YourServiceName"を実際のサービス名に置き換えます。Jaegerの設定オプションに応じて、Jaegerエージェントホストとポートを調整します。

OpenTelemetryミドルウェアを追加する

ASP.NET Coreアプリで、受信HTTPリクエストの自動インストゥルメンテーションを得るために、OpenTelemetryミドルウェアを含める必要があります。 Startup.csファイルのConfigureメソッドにミドルウェアを追加します。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Add Prometheus metrics middleware if using Prometheus
    app.UseHttpMetrics();
    // Other middleware configurations...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Add Prometheus metrics middleware if using Prometheus
    app.UseHttpMetrics();
    // Other middleware configurations...
}
Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
	' Add Prometheus metrics middleware if using Prometheus
	app.UseHttpMetrics()
	' Other middleware configurations...
End Sub
$vbLabelText   $csharpLabel

トレーシングの開始

すべてをセットアップした後、OpenTelemetryは受信HTTPリクエストを追跡し、設定されたJaegerバックエンドにテレメトリ情報を自動的に送信します。

検証と監視

OpenTelemetryが正常に機能していることを確認するために、Jaegerバックエンドでトレースを確認できます。 Jaegerユーザーインターフェースを開き(通常、Jaeger UIにはhttp://localhost:16686でアクセス可能)サービスに関連したトレースを探します。

バックエンドシステムの選択(オプション)

OpenTelemetryは基本的なインストゥルメンテーションのためには必須ではありませんが、テレメトリーデータを保存および処理するために他のバックエンドオペレーティングシステムと統合します。 公式にサポートされているオペレーティングシステムには以下のものが含まれます。

  • Jaeger(トレース)
  • Prometheus(メトリクス)
  • Zipkin(トレース)

開始方法

IronPDFとは何ですか?

人気のある.NETパッケージIronPDFは、.NETプログラム内でPDFドキュメントを作成、編集、およびレンダリングすることを可能にします。 PDFを扱うための機能は豊富で、HTMLページのPDFへの変換、PDFからのテキストや画像の抽出、既存のPDFドキュメントへのテキスト、画像、図形の追加、HTMLコンテンツ、画像、または生データからのPDFの作成が含まれます。

IronPDFの主な利点の2つは、その使いやすさとシンプルさです。 開発者はその直感的なAPIと包括的なドキュメントのおかげで、その.NETプロジェクト内で簡単にPDFの作成を始めることができます。 IronPDFの効率性と速度もまた、開発者が高品質のPDFドキュメントを迅速かつ効率的に作成するのに役立つ特性です。

IronPDFの利点のいくつか:

  • HTML、画像、および生データからのPDFの製作
  • PDFファイルからのテキストと画像の抽出
  • PDFファイルへの透かし、ヘッダー、およびフッターの追加
  • PDFファイルは暗号化およびパスワードで保護されています
  • 電子署名とフォームの記入の機能

NuGetパッケージのインストール

OpenTelemetryのさまざまなコンポーネントには、複数のNuGetパッケージが利用可能です。 要件に応じて、必要なパッケージをインストールすることができます。 オブザーバビリティバックエンド(Jaeger、Zipkin、またはPrometheusなど)にテレメトリーデータを送信するには、少なくともOpenTelemetryパッケージ、アプリケーションフレームワーク(ASP.NET Coreなど)のためのインストゥルメンテーションパッケージ、およびエクスポーターパッケージが必要です。 また、プロジェクトにIronPDFパッケージがインストールされていることを確認してください。 それをインストールするには、NuGetパッケージマネージャーコンソールを使用してください。

Install-Package OpenTelemetry
Install-Package OpenTelemetry.Instrumentation.AspNetCore
Install-Package OpenTelemetry.Exporter.Jaeger
Install-Package IronPdf

IronPDFとOpenTelemetryを使用する

ASP.NET CoreアプリケーションのStartup.csファイルを開いてConfigureServicesメソッドにアクセスしてください。 IronPDFを設定するために次のコードを含めます。

using IronPdf;

public void ConfigureServices(IServiceCollection services)
{
    // Configure IronPDF
    services.AddSingleton<HtmlToPdf>();
    // Other service configurations...
}
using IronPdf;

public void ConfigureServices(IServiceCollection services)
{
    // Configure IronPDF
    services.AddSingleton<HtmlToPdf>();
    // Other service configurations...
}
Imports IronPdf

Public Sub ConfigureServices(ByVal services As IServiceCollection)
	' Configure IronPDF
	services.AddSingleton(Of HtmlToPdf)()
	' Other service configurations...
End Sub
$vbLabelText   $csharpLabel

このコードは、IronPDFのHtmlToPdfサービスをシングルトンとして構成することによって、アプリケーションがHtmlToPdfのインスタンスを作成して使用することを保証します。

IronPDFとOpenTelemetry.NETを統合することにより、.NETアプリケーションでPDF生成プロセスを追跡および観察できます。 以下で、コード例を各ステップを詳しく解説していきます。

using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using Microsoft.Extensions.Logging;
using IronPdf;

namespace DemoWebApplication.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class DemoController : ControllerBase
    {
        private readonly HtmlToPdf _htmlToPdf;
        private readonly ILogger<DemoController> _logger;
        private readonly Tracer _tracer;

        public DemoController(ILogger<DemoController> logger, HtmlToPdf htmlToPdf, TracerProvider tracerProvider)
        {
            _tracer = tracerProvider.GetTracer("Demo");
            _htmlToPdf = htmlToPdf;
            _logger = logger;
        }

        [HttpGet]
        public FileContentResult Generate()
        {
            // Define the PDF file name
            string fileName = "Sample.pdf";

            // Generate PDF from HTML content
            _logger.LogInformation("Generating PDF...");
            var pdfBytes = GeneratePdf("Hello, IronPDF!");

            // Return the PDF as a file result
            return new FileContentResult(pdfBytes, "application/pdf")
            {
                FileDownloadName = fileName
            };
        }

        private byte[] GeneratePdf(string htmlContent)
        {
            // Start a tracing activity for PDF generation
            using (var activity = _tracer.StartActiveSpan("PDF Generation"))
            {
                var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);

                // Log PDF generation
                _logger.LogInformation("PDF generated successfully.");

                return pdfDocument.BinaryData;
            }
        }
    }
}
using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using Microsoft.Extensions.Logging;
using IronPdf;

namespace DemoWebApplication.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class DemoController : ControllerBase
    {
        private readonly HtmlToPdf _htmlToPdf;
        private readonly ILogger<DemoController> _logger;
        private readonly Tracer _tracer;

        public DemoController(ILogger<DemoController> logger, HtmlToPdf htmlToPdf, TracerProvider tracerProvider)
        {
            _tracer = tracerProvider.GetTracer("Demo");
            _htmlToPdf = htmlToPdf;
            _logger = logger;
        }

        [HttpGet]
        public FileContentResult Generate()
        {
            // Define the PDF file name
            string fileName = "Sample.pdf";

            // Generate PDF from HTML content
            _logger.LogInformation("Generating PDF...");
            var pdfBytes = GeneratePdf("Hello, IronPDF!");

            // Return the PDF as a file result
            return new FileContentResult(pdfBytes, "application/pdf")
            {
                FileDownloadName = fileName
            };
        }

        private byte[] GeneratePdf(string htmlContent)
        {
            // Start a tracing activity for PDF generation
            using (var activity = _tracer.StartActiveSpan("PDF Generation"))
            {
                var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);

                // Log PDF generation
                _logger.LogInformation("PDF generated successfully.");

                return pdfDocument.BinaryData;
            }
        }
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports OpenTelemetry.Trace
Imports System.Diagnostics
Imports Microsoft.Extensions.Logging
Imports IronPdf

Namespace DemoWebApplication.Controllers
	<ApiController>
	<Route("[controller]")>
	Public Class DemoController
		Inherits ControllerBase

		Private ReadOnly _htmlToPdf As HtmlToPdf
		Private ReadOnly _logger As ILogger(Of DemoController)
		Private ReadOnly _tracer As Tracer

		Public Sub New(ByVal logger As ILogger(Of DemoController), ByVal htmlToPdf As HtmlToPdf, ByVal tracerProvider As TracerProvider)
			_tracer = tracerProvider.GetTracer("Demo")
			_htmlToPdf = htmlToPdf
			_logger = logger
		End Sub

		<HttpGet>
		Public Function Generate() As FileContentResult
			' Define the PDF file name
			Dim fileName As String = "Sample.pdf"

			' Generate PDF from HTML content
			_logger.LogInformation("Generating PDF...")
			Dim pdfBytes = GeneratePdf("Hello, IronPDF!")

			' Return the PDF as a file result
			Return New FileContentResult(pdfBytes, "application/pdf") With {.FileDownloadName = fileName}
		End Function

		Private Function GeneratePdf(ByVal htmlContent As String) As Byte()
			' Start a tracing activity for PDF generation
			Using activity = _tracer.StartActiveSpan("PDF Generation")
				Dim pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent)

				' Log PDF generation
				_logger.LogInformation("PDF generated successfully.")

				Return pdfDocument.BinaryData
			End Using
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

この例では:

  • HtmlToPdfILoggerTracerProviderDemoControllerに注入します。
  • Generateメソッドはファイルダウンロードを開始し、コンテンツ「Hello, IronPDF!」を持つ動的に作成されたPDFを返します。
  • GeneratePdfメソッドはHtmlToPdf.RenderHtmlAsPdfを使用してPDFをレンダリングし、PDFのバイナリデータを出力します。
  • コードはOpenTelemetryを使用してPDF生成プロセスをトレースし、トレースデータをログに記録します。

上のソースコードから生成されたPDF出力

Opentelemetry .NET (開発者向けの動作方法): 図1 - 上記のコードを使用してIronPDFおよびOpenTelemetryで生成された出力

以下は、Jaeger UIから生成されたトレースの画面です。

Opentelemetry .NET (開発者向けの動作方法): 図2 - Jaeger UIからの生成された出力トレース

結論

OpenTelemetryは.NETアプリケーションのパフォーマンス最適化と健康監視のためのゲームチェンジャーです。 これにより、開発者はベンダーニュートラルで標準化された手法でテレメトリデータ(メトリクス、トレース、ログ)を収集、分析、およびエクスポートすることで、アプリケーションの内部動作を詳細に理解できます。

OpenTelemetry.NETとIronPDFを統合することで、開発者はPDF作成のワークフローを改善し、アプリケーションのパフォーマンスに関する洞察を得ることができます。 OpenTelemetry.NETの実装を活用してPDF生成プロセスを手動でインストゥルメンテーションすることで、開発者は実行経路を追跡し、パフォーマンスメトリクスを監視し、最適化が必要な領域を特定することができます。 さらに、中央監視のメトリクスコレクションと分析がテレメトリデータをオブザーバビリティプラットフォームにエクスポートすることで可能になり、開発者はアプリケーションの健康を維持し、完璧なユーザー体験を提供する能力を得ます。

OpenTelemetry.NETの実装とIronPDFの統合により、開発者のPDF作成ワークフローを強化し、.NETアプリケーションのスケーラビリティ、パフォーマンス、および信頼性を保証できます。 これらの技術の統合は、現代のソフトウェア開発のニーズを満たし、優れた成果をもたらす開発者を支援します。これには、請求書の作成、報告書の作成、またはドキュメントの作成があります。

パッケージとして購入すると、IronPDFは非常にリーズナブルな価格で生涯ライセンスが含まれています。 このパッケージは、さまざまなシステムのために$liteLicenseのみ、1回限りの料金で大きな価値を提供します。 ライセンス保有者には24時間365日オンラインのエンジニアリングサポートが提供されます。 Iron Softwareのウェブサイトを訪問して料金についての詳細を確認してください。 彼らが提供するソリューションについてもっと知るためにIron Softwareの製品を探求してください。

よくある質問

OpenTelemetryとは何ですか、そして.NETアプリケーションをどのように強化するのでしょうか?

OpenTelemetryは、クラウドネイティブアプリケーション向けに設計されたベンダーニュートラルな可観測性フレームワークです。ログ、トレース、およびメトリクスのキャプチャ用に標準化されたAPIとSDKを提供し、問題の診断、性能のボトルネックの特定、およびアプリケーションの動作に関する包括的な洞察を得るのに役立ちます。

OpenTelemetryをASP.NET Coreとどのように統合して自動計装を可能にするのでしょうか?

OpenTelemetryは、サービスとミドルウェアを`Startup.cs`ファイルで設定して自動計装を可能にすることで、ASP.NET Coreに統合できます。これには、トレースとエクスポーター(例:Jaeger)を設定してテレメトリデータを送信し、アプリケーションのパフォーマンスを監視することが含まれます。

IronPDFは、.NETアプリケーション向けのPDF生成においてどんな役割を果たしますか?

IronPDFは.NETライブラリで、.NETアプリケーション内でのPDFの作成と操作を簡素化します。HTMLからPDFへの変換、PDFからのテキスト抽出、および透かしや暗号化の追加などの機能をサポートし、PDFドキュメントを扱うための多用途ツールです。

開発者はOpenTelemetryを使用してPDF生成プロセスをどのように追跡および分析できますか?

開発者はOpenTelemetry.NETをIronPDFと統合することで、PDF生成プロセスを追跡し分析できます。この統合により、テレメトリデータの収集と分析が可能になり、PDF生成のワークフローに関する洞察が得られ、アプリケーションのパフォーマンスの最適化が支援されます。

OpenTelemetryを使用して.NETアプリケーションでIronPDFを組み合わせるメリットは何ですか?

OpenTelemetryとIronPDFを.NETアプリケーションで使用することで、アプリケーションのスケーラビリティの向上、パフォーマンス分析の強化、PDF生成ワークフローの最適化など、複数のメリットがあります。この組み合わせを使用することで、開発者はアプリケーションの健全性を効果的に監視・向上させることができます。

開発者はIronPDFを使用してASP.NET CoreアプリケーションでどのようにPDFを生成できますか?

ASP.NET Coreアプリケーション内で、開発者はコントローラーに`HtmlToPdf`クラスを注入し、HTMLコンテンツをPDFとしてレンダリングし、生成されたPDFをダウンロード用のファイル結果として返すことでPDFを生成できます。

OpenTelemetryでバックエンドシステムをサポートしているエクスポーターは何ですか?

OpenTelemetryは、トレース用のJaeger、メトリクス用のPrometheus、トレース用のZipkinなど、さまざまなバックエンドシステム向けのエクスポーターをサポートしています。これらのエクスポーターは、さまざまなシステムでのテレメトリデータの保存と分析を可能にします。

Curtis Chau
テクニカルライター

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

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