.NET ヘルプ

OpenTelemetry .NET(開発者向けの仕組み)

更新済み 7月 1, 2024
共有:

イントロダクション

動的でデータ駆動型のリッチな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 (トレース)、OpenTelemetryによってサポートされています。
  • 自動計装: この方法は .NET Core アプリケーションのプロセスを簡素化します。 OpenTelemetryライブラリは、ウェブアプリケーションやサービス内の一般的な操作に対するデータを自動的にキャプチャできます。これにより、手動でのコード修正を排除し、統合プロセスを合理化します。
  • 手動計測:詳細なデータ収集を行うために、OpenTelemetryは手動計測用の堅牢なAPIを提供しています。 このアプローチにより、独自のアプリケーションロジックに関連する特定のメトリクスやトレースをキャプチャすることができます。 これは特に、.NET Framework アプリケーションや自動計測が特定のニーズをカバーしていないシナリオに役立ちます。

.NETでOpenTelemetryを使用する利点

.NETアプリケーションにOpenTelemetryを統合することには、いくつかの利点があります:

  • ベンダーニュートラル: OpenTelemetryは多様なバックエンドシステムと簡単に統合できるため、アプリケーションに柔軟性を持たせ、将来に対応することが可能です。 インスツルメンテーションコードをバックエンドシステムを切り替えるために変更する必要はありません。
  • 標準化アプローチ: 一貫したAPIによって、アプリケーションのさまざまな分野の計測がより簡単になります。 同じ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
    builder.Services.AddOpenTelemetry().WithTracing(options =>
    {
        // Configure Jaeger exporter
        // serviceName we can read from environment variables
        options
            .SetResourceBuilder(
                ResourceBuilder.CreateDefault()
                    .AddService(serviceName))
            .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
    builder.Services.AddOpenTelemetry().WithTracing(options =>
    {
        // Configure Jaeger exporter
        // serviceName we can read from environment variables
        options
            .SetResourceBuilder(
                ResourceBuilder.CreateDefault()
                    .AddService(serviceName))
            .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
	builder.Services.AddOpenTelemetry().WithTracing(Sub(options)
		' Configure Jaeger exporter
		' serviceName we can read from environment variables
		options.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(serviceName)).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
VB   C#

あなたのサービス名を serviceName の部分に入れてください。 お客様のJaeger構成オプションに従い、Jaegerエージェントのホストとポートを変更してください。

OpenTelemetry ミドルウェアを追加

ASP.NET Coreアプリに自動的にHTTPリクエストを計測するためには、OpenTelemetryミドルウェアを含める必要があります。 Startup.cs ファイルの Configure メソッドにミドルウェアを追加します:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Add OpenTelemetry middleware if we are using Prometheus
    app.UseHttpMetrics();
    // Other middleware configurations...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Add OpenTelemetry middleware if we are using Prometheus
    app.UseHttpMetrics();
    // Other middleware configurations...
}
Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
	' Add OpenTelemetry middleware if we are using Prometheus
	app.UseHttpMetrics()
	' Other middleware configurations...
End Sub
VB   C#

トレースを開始

すべての設定が完了すると、OpenTelemetryは受信HTTPリクエストを追跡し、設定したJaegerバックエンドにテレメトリー情報を自動的に送信し始めます。

確認および監視

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

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

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

ジャーガー (イェーガー) (トレース)

  • プロメテウス (メトリクス)
  • ジップキン (トレース)

はじめに

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

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

.NETアプリケーションにIronPDFとOpenTelemetry.NETを統合することで、PDF生成プロセスを追跡および観察することができます。 コード例を詳しく見て、ステップごとに各段階を確認しましょう。

using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using System.Net;
using System.Net.Http.Headers;

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

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

        [HttpGet]
        public FileContentResult Generate()
        {
            string fileName = "Sample.pdf";
            var stream = GeneratePdf("Hello IronPDF");
            return new FileContentResult(stream, "application/octet-stream")
            {
                FileDownloadName = fileName
            };
        }

        private byte[] GeneratePdf(string htmlContent)
        {
            using (var activity = _tracer.StartActiveSpan("PDF Generation"))
            {
                var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);
                var pdfBytes = pdfDocument.BinaryData;
                return pdfBytes;
            }
        }
    }
}
using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using System.Net;
using System.Net.Http.Headers;

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

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

        [HttpGet]
        public FileContentResult Generate()
        {
            string fileName = "Sample.pdf";
            var stream = GeneratePdf("Hello IronPDF");
            return new FileContentResult(stream, "application/octet-stream")
            {
                FileDownloadName = fileName
            };
        }

        private byte[] GeneratePdf(string htmlContent)
        {
            using (var activity = _tracer.StartActiveSpan("PDF Generation"))
            {
                var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);
                var pdfBytes = pdfDocument.BinaryData;
                return pdfBytes;
            }
        }
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports OpenTelemetry.Trace
Imports System.Diagnostics
Imports System.Net
Imports System.Net.Http.Headers

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

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

		Private Function WeatherForecastController(ByVal logger As ILogger(Of WeatherForecastController), ByVal htmlToPdf As HtmlToPdf, ByVal tracerProvider As TracerProvider) As Public
			_tracer = tracerProvider.GetTracer("Demo")
			_htmlToPdf = htmlToPdf
		End Function

		<HttpGet>
		Public Function Generate() As FileContentResult
			Dim fileName As String = "Sample.pdf"
			Dim stream = GeneratePdf("Hello IronPDF")
			Return New FileContentResult(stream, "application/octet-stream") With {.FileDownloadName = fileName}
		End Function

		Private Function GeneratePdf(ByVal htmlContent As String) As Byte()
			Using activity = _tracer.StartActiveSpan("PDF Generation")
				Dim pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent)
				Dim pdfBytes = pdfDocument.BinaryData
				Return pdfBytes
			End Using
		End Function
	End Class
End Namespace
VB   C#

私たちのアプリケーション用にトレーサーインスタンスを生成するために、TracerProviderサービスを注入します。 Generateメソッドによって「PDF Generation」と呼ばれるOpenTelemetryアクティビティが作成され、現在進行中の作業を象徴します。 私たちはアクティビティ内でいくつかの作業を模倣します。 (独自のロジックに置き換えます). 私たちは、作業のミリ秒単位の時間を監視するために、work_duration_msというヒストグラムメトリクスを確立します。 メトリクスにデータポイントを追加し、タグ "Demo" を付けて "PDF Generation" の値を設定し、期間を記録します。 (この場合、1000ミリ秒). タグは分析に追加のコンテキスト層を提供します。

上記のソースコードから生成された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はかなり手頃な価格で、ライセンスは永久ライセンスが含まれています。 このパッケージは、複数のシステムに対して一度の支払いで、わずか$749という大変お得な価格を提供します。 ライセンス所有者には、24時間オンラインエンジニアリングサポートを提供します。 ご訪問ください ウェブサイト 料金の詳細については、こちらをご覧ください。 こちらをご覧ください ウェブサイト Iron Softwareが製造する製品についてさらに学ぶための詳細情報。

< 以前
DotnetOpenAuth .NET Core(開発者向けの仕組み)
次へ >
Autofac .NET 6(開発者向けの動作方法)

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

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