すべてのプロダクト
Search
ドキュメントセンター

Managed Service for OpenTelemetry:OpenTelemetry を使用して .NET アプリケーションのトレースデータをレポートする

最終更新日:Jun 11, 2025

OpenTelemetry を使用して .NET アプリケーションをインストルメントし、トレースデータを Managed Service for OpenTelemetry にレポートすると、Managed Service for OpenTelemetry は .NET アプリケーションの監視を開始します。 アプリケーショントポロジー、トレース、異常トランザクション、低速トランザクション、SQL分析など、アプリケーションのモニタリングデータを表示できます。 このトピックでは、OpenTelemetry を使用して .NET アプリケーションを自動または手動でインストルメントし、トレースデータをレポートする方法について説明します。

背景情報

OpenTelemetry は、.NET アプリケーションの自動および手動インストルメンテーションをサポートしています。

  • 自動インストルメンテーション

    • OpenTelemetry は、次の .NET バージョンを使用して自動インストルメンテーションをサポートしています。

      • .NET SDK 6 以降

      • OpenTelemetry は、.NET Framework を使用した自動インストルメンテーションをサポートしていません。

    • OpenTelemetry が自動インストルメンテーションをサポートしているフレームワークの詳細については、OpenTelemetry 公式ドキュメントの 利用可能なインストルメンテーション をご参照ください。

  • 手動および半自動インストルメンテーション

    • サポートされているバージョン

      • .NET 5.0 以降

      • .NET Core 2.0 以降

      • .NET Framework 4.6.1 以降

    • サポートされているフレームワーク

      サポートされているフレームワークとバージョン

      フレームワーク

      Windows 専用 .NET Framework でサポート

      クロスプラットフォーム .NET でサポート

      (.NET Core)

      サポートされているバージョン

      インストルメント化されたライブラリ

      ASPNET

      はい

      ASP.NET (.NET Framework) MVC および ASP.NET Web API はサポートされていません。

      該当なし

      該当なし

      ASPNETCORE

      該当なし

      はい

      該当なし

      該当なし

      Azure

      はい

      はい

      2021年10月1日以降にリリースされた Azure. プレフィックスのパッケージがサポートされています。

      Azure SDK

      Elasticsearch

      はい

      はい

      • V8.0.0 以降、V8.10.0 未満の Elasticsearch .NET クライアントがサポートされています。

      • V8.10.0 以降は、Elasticsearch Transport フレームワークでサポートされています。

      Elastic.Clients.Elasticsearch

      Elasticsearch Transport

      はい

      はい

      V0.4.16 以降

      Elastic.Transport

      Entity Framework Core

      該当なし

      はい

      V6.0.12 以降

      Microsoft.EntityFrameworkCore

      GraphQL

      該当なし

      はい

      V7.5.0 以降

      GraphQL

      gRPC クライアント

      はい

      はい

      V2.52.0 以降、V3.0.0 未満

      Grpc.Net.Client

      HttpClient

      はい

      はい

      *

      System.Net.Http.HttpClient

      System.Net.HttpWebRequest

      Quartz

      V4.7.1 以前はサポートされていません。

      はい

      V3.4.0 以降

      Quartz

      MassTransit

      該当なし

      はい

      V8.0.0 以降

      MassTransit

      MongoDB

      はい

      はい

      V2.13.3 以降、V3.0.0 未満

      MongoDB.Driver.Core

      MySQL Connector

      はい

      はい

      V2.0.0 以降

      MySqlConnector

      MySQL Data

      該当なし

      はい

      V8.1.0 以降

      MySql.Data

      Npgsql

      はい

      はい

      V6.0.0 以降

      Npgsql

      NServiceBus

      はい

      はい

      V8.0.0 以降

      NServiceBus

      SQL クライアント

      はい

      はい

      Microsoft.Data.SqlClient V3 はサポートされていません。

      StackExchange.Redis

      該当なし

      はい

      V2.0.405 以降、V3.0.0 未満

      StackExchange.Redis

      WCF クライアント

      はい

      はい

      該当なし

      該当なし

      WCF サービス

      はい

      該当なし

      該当なし

      該当なし

サンプルコード

dotnet-demo からサンプルコードをダウンロードします。

方法 1:アプリケーションの自動インストルメンテーションを設定する

制限事項

  • OpenTelemetry は、.NET 6.0 以降の OpenTelemetry SDK を使用する場合にのみ、自動インストルメンテーションをサポートします。

  • OpenTelemetry は、.NET Framework を使用した自動インストルメンテーションをサポートしていません。

  1. ASP.NET Core を使用して Web アプリケーションを作成します。

    1. サンプルコードを使用してアプリケーションを作成します。

      mkdir dotnet-simple-demo
      cd dotnet-simple-demo
      dotnet new web
    2. 次のコードを Properties/launchSettings.json ファイルに追加します。

      {
        "$schema": "http://json.schemastore.org/launchsettings.json",
        "profiles": {
          "http": {
            "commandName": "Project",
            "dotnetRunMessages": true,
            "launchBrowser": true,
            "applicationUrl": "http://localhost:8080",
            "environmentVariables": {
              "ASPNETCORE_ENVIRONMENT": "Development"
            }
          }
        }
      }
    3. アプリケーションをビルドします。

      dotnet build
  2. アプリケーションの自動インストルメンテーションを設定します。

    1. .NET 用 OpenTelemetry SDK を使用して、自動インストルメンテーションのインストールスクリプトをダウンロードして実行します。

      curl -L -O https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/latest/download/otel-dotnet-auto-install.sh
      
      ./otel-dotnet-auto-install.sh
    2. 環境変数を設定し、自動インストルメンテーションスクリプトを実行します。

      <serviceName> をアプリケーション名に置き換えます。<endpoint><token> は、この Topic の 前提条件 セクションで取得したエンドポイントとトークンに置き換えます。

      export OTEL_TRACES_EXPORTER=otlp \
        OTEL_METRICS_EXPORTER=none \
        OTEL_LOGS_EXPORTER=none \
        OTEL_SERVICE_NAME=<serviceName> \
        OTEL_EXPORTER_OTLP_PROTOCOL=grpc
        OTEL_EXPORTER_OTLP_ENDPOINT=<endpoint> \
        OTEL_EXPORTER_OTLP_HEADERS="Authentication=<token>"
      . $HOME/.otel-dotnet-auto/instrument.sh
      説明

      .NET 用 OpenTelemetry SDK を使用して自動インストルメンテーションの環境変数を設定する方法の詳細については、OpenTelemetry 公式ドキュメントの 設定 をご参照ください。

  3. アプリケーションを実行してアクセスします。

    1. アプリケーションを実行します。

      dotnet run
    2. 次のコマンドを実行してアプリケーションにアクセスします。 生成されたトレースは、Managed Service for OpenTelemetry

      curl localhost:8080/

方法 2:アプリケーションを手動でインストルメントする

  1. dotnet-demo/opentelemetry-demo/manual-demo ディレクトリに移動し、アプリケーションを手動でインストルメントするために必要な次の OpenTelemetry 依存関係を追加します。

    dotnet add package OpenTelemetry
    dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
    dotnet add package OpenTelemetry.Exporter.Console // オプション。 コンソールにデータをエクスポートする場合に必要です。
    dotnet add package OpenTelemetry.Extensions.Hosting
  2. OpentelemetryExporterDemo.cs ファイルで、OpenTelemetry TracerProvider を作成し、HTTP ベースの OtlpExporter を追加してから、トレースデータがレポートされるアプリケーションの名前と、トレースデータのレポートに使用されるエンドポイントを指定します。

    using System.Diagnostics;
    using OpenTelemetry;
    using OpenTelemetry.Trace;
    using OpenTelemetry.Resources;
    using OpenTelemetry.Exporter;
    
    namespace Demo
    {
        internal static class OpentelemetryExporterDemo
        {
            internal static void Run()
            {
                Console.WriteLine("otlp running"); // otlp 実行中
                // OpenTelemetry を使用してトレースデータをレポートするアプリケーションの名前を指定します。
                var serviceName = "otlp-test";
                using var tracerProvider = Sdk.CreateTracerProviderBuilder()
                    .AddSource(serviceName)
                    .SetResourceBuilder(
                    ResourceBuilder.CreateDefault().AddService(serviceName))
                    .AddOtlpExporter(opt =>
                                     {
                                         // パラメーターの値を、このトピックの「前提条件」セクションで取得したエンドポイントに置き換えます。
                                         opt.Endpoint = new Uri("<endpoint>");
                                         // HTTP 経由でトレースデータをレポートします。
                                         opt.Protocol = OtlpExportProtocol.HttpProtobuf;
                                     })
                    .AddConsoleExporter() // オプション。 コンソールにデータをエクスポートします。
                    .Build();
                for(int i = 0; i<10; i++)
                {
                    var MyActivitySource = new ActivitySource(serviceName);
                    using var activity = MyActivitySource.StartActivity("SayHello");
                    activity?.SetTag("bar", "Hello World");
                }
            }
        }
    }
  3. Program.cs ファイルを変更して、Main メソッドで OpentelemetryExporterDemo を呼び出します。

    using System.Diagnostics;
    using System.Net.Http;
    using OpenTelemetry;
    using OpenTelemetry.Resources;
    using OpenTelemetry.Trace;
    
    
    namespace Demo
    {
        public class Otlp
        {
            public static void Main(string[] args)
            {
                OpentelemetryExporterDemo.Run();
            }
        }
    }
  4. 現在のパスで次のコマンドを実行します。

    dotnet run

方法 3:自動インストルメンテーションと手動インストルメンテーションを組み合わせる

OpenTelemetry は、数十の .NET フレームワークのトレースデータを自動的にアップロードできます。 詳細については、トレースのインストルメンテーション をご参照ください。

  1. dotnet-demo/opentelemetry-demo/auto-demo ディレクトリに移動し、ASP.NET Core を使用して Web アプリケーションを作成します。

    コード内の <your-project-name> をアプリケーション名に置き換えます。

    mkdir <your-project-name>
    cd <your-project-name>
    dotnet new mvc
  2. アプリケーションを監視するために必要な OpenTelemetry 依存関係をダウンロードします。

    dotnet add package OpenTelemetry.Exporter.Console // 収集されたデータをコンソールにエクスポートします。
    dotnet add package OpenTelemetry.Extensions.Hosting
    dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol // OpenTelemetry Protocol (OTLP) 経由でデータをエクスポートします。
  3. 自動インストルメンテーションの依存関係をダウンロードします。

    ASP.NET Core フレームワークでアプリケーションを自動的にインストルメントするために使用される依存関係をダウンロードします。 アプリケーションが HTTP リクエストを受信すると、スパンが自動的に生成され、レポートされます。 他のフレームワーク上のアプリケーションの自動インストルメンテーションを設定するには、トレースのインストルメンテーション から関連する依存関係をダウンロードします。

    dotnet add package OpenTelemetry.Instrumentation.AspNetCore
  4. <your-project-name>/Program.cs ファイルのコードを変更します。

    1. ソースファイルの先頭に必要なパッケージをインポートします。

      using System.Diagnostics;
      using OpenTelemetry.Exporter;
      using OpenTelemetry.Resources;
      using OpenTelemetry.Trace;
    2. ソースファイルの最後に DiagnosticsConfig クラスを追加します。

      コード内の <your-service-name><your-host-name> を実際のアプリケーション名とホスト名に置き換えます。

      public static class DiagnosticsConfig
      {
          public const string ServiceName = "<your-service-name>";
          public const string HostName = "<your-host-name>";
          public static ActivitySource ActivitySource = new ActivitySource(ServiceName);
      }
    3. OpenTelemetry を初期化するコードを追加します。

      • HTTP 経由でデータをレポートします。

        次のコードの <http_endpoint> を、このトピックの「前提条件」セクションで取得したエンドポイントに置き換えます。

        // ...
        builder.Services.AddOpenTelemetry()
            .WithTracing(tracerProviderBuilder =>
                tracerProviderBuilder
                    .AddSource(DiagnosticsConfig.ActivitySource.Name)
                    .SetResourceBuilder(OpenTelemetry.Resources.ResourceBuilder.CreateDefault()
                        .AddAttributes(new Dictionary<string, object> {
                            {"service.name", DiagnosticsConfig.ServiceName},
                            {"host.name",DiagnosticsConfig.HostName}
                        }))
                    .AddAspNetCoreInstrumentation()
                    .AddConsoleExporter() // オプション。 トレースデータをコンソールにエクスポートします。
                    .AddOtlpExporter(opt =>
                    {
                        // HTTP 経由でデータをレポートします。
                        opt.Endpoint = new Uri("<http_endpoint>");
                        opt.Protocol = OtlpExportProtocol.HttpProtobuf;
                    })
             );
        // ...
      • gRPC 経由でデータをレポートします。

        次のコードの <grpc_endpoint><token> を、このトピックの「前提条件」セクションで取得したエンドポイントとトークンに置き換えます。

        // ...
        builder.Services.AddOpenTelemetry()
            .WithTracing(tracerProviderBuilder =>
                tracerProviderBuilder
                    .AddSource(DiagnosticsConfig.ActivitySource.Name)
                    .SetResourceBuilder(OpenTelemetry.Resources.ResourceBuilder.CreateDefault()
                        .AddAttributes(new Dictionary<string, object> {
                            {"service.name", DiagnosticsConfig.ServiceName},
                            {"host.name",DiagnosticsConfig.HostName}
                        }))
                    .AddAspNetCoreInstrumentation()
                    .AddConsoleExporter() // オプション。 トレースデータをコンソールにエクスポートします。
                    .AddOtlpExporter(opt =>
                    {
                        // gRPC 経由でデータをレポートします。
                        opt.Endpoint = new Uri("<grpc_endpoint>");
                        opt.Headers = "Authentication=<token>";
                        opt.Protocol = OtlpExportProtocol.Grpc;
                    })
             );
        // ...

    Program.cs ファイルの完全なサンプルコード

    // 必要なパッケージをインポートします。
    using System.Diagnostics;
    using OpenTelemetry.Exporter;
    using OpenTelemetry.Resources;
    using OpenTelemetry.Trace;
    
    var builder = WebApplication.CreateBuilder(args);
    
    
    builder.Services.AddControllersWithViews();
    
    // OpenTelemetry を初期化します。
    builder.Services.AddOpenTelemetry()
        .WithTracing(tracerProviderBuilder =>
            tracerProviderBuilder
                .AddSource(DiagnosticsConfig.ActivitySource.Name)
                .SetResourceBuilder(OpenTelemetry.Resources.ResourceBuilder.CreateDefault()
                    .AddAttributes(new Dictionary<string, object> {
                        {"service.name", DiagnosticsConfig.ServiceName},
                        {"host.name",DiagnosticsConfig.HostName}
                    }))
                .AddAspNetCoreInstrumentation()
                .AddConsoleExporter() // オプション。 トレースデータをコンソールにエクスポートします。
                .AddOtlpExporter(opt =>
                {
                    // HTTP 経由でデータをレポートします。
                    opt.Endpoint = new Uri("<http_endpoint>");
                    opt.Protocol = OtlpExportProtocol.HttpProtobuf;
    
                    // gRPC 経由でデータをレポートします。
                    // opt.Endpoint = new Uri("<grpc_endpoint>");
                    // opt.Headers = "Authentication=<token>";
                    // opt.Protocol = OtlpExportProtocol.Grpc;
                })
         );
    
    
    var app = builder.Build();
    
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    
    app.UseRouting();
    
    app.UseAuthorization();
    
    app.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    
    app.Run();
    
    // DiagnosticsConfig クラスを作成します。
    public static class DiagnosticsConfig
    {
        public const string ServiceName = "<your-service-name>"; // アプリケーション名
        public const string HostName = "<your-host-name>"; // ホスト名
        public static ActivitySource ActivitySource = new ActivitySource(ServiceName);
    }
                                
  5. ターミナルで次のコマンドを実行して、プロジェクトを実行します。

    dotnet run

    コマンド出力の例:

    返された情報にある URL を取得します。 例:http://localhost:5107

    Building... // ビルド中...
    info: Microsoft.Hosting.Lifetime[14]
          Now listening on: http://localhost:5107 // リッスン中: http://localhost:5107
    info: Microsoft.Hosting.Lifetime[0]
          Application started. Press Ctrl+C to shut down. // アプリケーションが起動しました。 終了するには Ctrl+C を押します。
    info: Microsoft.Hosting.Lifetime[0]
          Hosting environment: Development // ホスティング環境: 開発
    info: Microsoft.Hosting.Lifetime[0]
          Content root path: /path/to/<your-project-name> // コンテンツルートパス: /path/to/<your-project-name>
  6. ブラウザで http://localhost:5107 にアクセスします。 次のページが表示された場合、トレースデータは Managed Service for OpenTelemetry コンソールにレポートされています。

    返回页面

モニタリングデータを表示する

Managed Service for OpenTelemetry コンソール[アプリケーション] ページで、アプリケーションの名前をクリックします。 表示されるページで、トレースデータを表示します。