Azure Monitor OpenTelemetry Distro を構成する

この記事では、Azure Monitor OpenTelemetry ディストリビューションの構成設定について説明します。

接続文字列

Application Insights の接続文字列は、テレメトリ データの送信先の場所を定義し、監視と分析のために適切なリソースにデータが確実に到達するようにします。

接続文字列を構成するには、次の 3 つの方法のいずれかを使用します。

  • program.cs クラスで、アプリケーション スタートアップに UseAzureMonitor() を追加します。

    // Create a new ASP.NET Core web application builder.    
    var builder = WebApplication.CreateBuilder(args);
    
    // Add the OpenTelemetry telemetry service to the application.
    // This service will collect and send telemetry data to Azure Monitor.
    builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
        options.ConnectionString = "<Your Connection String>";
    });
    
    // Build the ASP.NET Core web application.
    var app = builder.Build();
    
    // Start the ASP.NET Core web application.    
    app.Run();
    
  • 環境変数を設定します。

    APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>
    
  • 次のセクションを appsettings.json config ファイルに追加します。

    {
      "AzureMonitor": {
          "ConnectionString": "<Your Connection String>"
      }
    }
    

Note

接続文字列を複数の場所に設定した場合は、次の優先順位に従います。

  1. コード
  2. 環境変数
  3. 構成ファイル

クラウド ロール名とクラウド ロール インスタンスを設定する

サポートされている言語の場合、Azure Monitor OpenTelemetry Distro はリソース コンテキストを自動的に検出し、コンポーネントの クラウド ロール名とクラウド ロール インスタンスのプロパティの既定値を提供します。 ただし、既定値をチームにとって意味のある値にオーバーライドしたい場合があります。 クラウド ロール名の値は、アプリケーション マップでノードの下に名前として表示されます。

[リソース] 属性を使って [クラウド ロール名] と [クラウド ロール インスタンス] を設定します。 クラウド ロール名は service.namespace および service.name 属性を使用しますが、service.namespace が設定されていない場合は service.name にフォールバックします。 クラウド ロール インスタンスは service.instance.id 属性値を使用します。 リソースの標準属性については、「OpenTelemetry セマンティック規則」を参照してください。

// Setting role name and role instance

// Create a dictionary of resource attributes.
var resourceAttributes = new Dictionary<string, object> {
    { "service.name", "my-service" },
    { "service.namespace", "my-namespace" },
    { "service.instance.id", "my-instance" }};

// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);

// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor();

// Configure the OpenTelemetry tracer provider to add the resource attributes to all traces.
builder.Services.ConfigureOpenTelemetryTracerProvider((sp, builder) => 
    builder.ConfigureResource(resourceBuilder => 
        resourceBuilder.AddAttributes(resourceAttributes)));

// Build the ASP.NET Core web application.
var app = builder.Build();

// Start the ASP.NET Core web application.
app.Run();

サンプリングを有効にする

サンプリングを有効にしてデータ インジェストの量を減らすと、コストを削減することができます。 Azure Monitor には、Application Insights が ItemCount に変換するサンプリング率をイベントに設定するカスタムの "固定レート" サンプラーが用意されています。 固定レートサンプラーにより、正確なエクスペリエンスとイベント数が保証されます。 サンプラーは、サービス間でトレースを保持するように設計されており、古い Application Insights SDK と相互運用できます。 詳細については、「サンプリングの詳細」を参照してください。

Note

メトリックとログはサンプリングの影響を受けません。

サンプラーでは、0 から 1 の間のサンプル レートが想定されます。 レート 0.1 は、トレースの約 10% が送信されることを意味します。

// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);

// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
    // Set the sampling ratio to 10%. This means that 10% of all traces will be sampled and sent to Azure Monitor.
    o.SamplingRatio = 0.1F;
});

// Build the ASP.NET Core web application.
var app = builder.Build();

// Start the ASP.NET Core web application.
app.Run();

ヒント

固定レートまたは比率のサンプリングを使い、サンプリング レートをどのように設定すればよいかわからない場合は、5% (つまり、0.05 のサンプリング レート) から始め、失敗とパフォーマンスのブレードに必要条件される操作の精度に基づいてレートを調整します。 一般に、レートが高いほど精度が高くなります。 ただし、ANY サンプリングは精度に影響するため、サンプリングの影響を受けないOpenTelemetry メトリック に対してアラートを生成することをお勧めします。

Microsoft Entra ID (旧称 Azure AD) 認証を有効にする

Azure への接続をより安全にするために、Microsoft Entra 認証を有効にすることができます。これにより、不正なテレメトリがサブスクリプションに取り込まれるのを防ぐことができます。

Azure Identity によって提供される Credential (資格情報) クラスがサポートされています。

  • ローカル開発には DefaultAzureCredential をお勧めします。
  • システム割り当ておよびユーザー割り当てのマネージド ID には ManagedIdentityCredential をお勧めします。
    • システム割り当ての場合は、パラメーターを指定せずに既定のコンストラクターを使用します。
    • ユーザー割り当ての場合は、クライアント ID をコンストラクターに渡します。
  • サービス プリンシパルには ClientSecretCredential をお勧めします。
    • テナント ID、クライアント ID、およびクライアント シークレットをコンストラクターに渡します。
  1. 最新の Azure.Identity パッケージをインストールします。

    dotnet add package Azure.Identity
    
  2. 目的の資格情報クラスを指定します。

    // Create a new ASP.NET Core web application builder.    
    var builder = WebApplication.CreateBuilder(args);
    
    // Add the OpenTelemetry telemetry service to the application.
    // This service will collect and send telemetry data to Azure Monitor.
    builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
        // Set the Azure Monitor credential to the DefaultAzureCredential.
        // This credential will use the Azure identity of the current user or
        // the service principal that the application is running as to authenticate
        // to Azure Monitor.
        options.Credential = new DefaultAzureCredential();
    });
    
    // Build the ASP.NET Core web application.
    var app = builder.Build();
    
    // Start the ASP.NET Core web application.
    app.Run();
    

オフライン ストレージと自動再試行

信頼性と回復性を向上させるために、Azure Monitor OpenTelemetry ベースのオファリングは、アプリケーションが Application Insights との接続を失ったときに、既定でオフライン/ローカル ストレージに書き込みます。 アプリケーション テレメトリはディスクに保存され、最長 48 時間にわたって定期的に再送信が試行されます。 負荷の高いアプリケーションでは、2 つの理由でテレメトリがドロップされることがあります。 1 つ目は、許容時間を超えた場合、2 つ目は、最大ファイル サイズを超えた場合、または SDK がファイルを消去する機会がない場合です。 選択する必要がある場合、製品は過去のイベントよりも最近のイベントを保存します。 詳細情報

Distro パッケージには AzureMonitorExporter が含まれています。既定では、オフライン ストレージには次のいずれかの場所が使用されます (優先順位の高い順に記載されています)。

  • Windows
    • %LOCALAPPDATA%\Microsoft\AzureMonitor
    • %TEMP%\Microsoft\AzureMonitor
  • Windows 以外
    • %TMPDIR%/Microsoft/AzureMonitor
    • /var/tmp/Microsoft/AzureMonitor
    • /tmp/Microsoft/AzureMonitor

既定のディレクトリをオーバーライドするには、AzureMonitorOptions.StorageDirectory を設定する必要があります。

// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);

// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor(options =>
{
    // Set the Azure Monitor storage directory to "C:\\SomeDirectory".
    // This is the directory where the OpenTelemetry SDK will store any telemetry data that cannot be sent to Azure Monitor immediately.
    options.StorageDirectory = "C:\\SomeDirectory";
});

// Build the ASP.NET Core web application.
var app = builder.Build();

// Start the ASP.NET Core web application.
app.Run();

この機能を無効にするには、AzureMonitorOptions.DisableOfflineStorage = true を設定する必要があります。

OTLP エクスポーターを有効にする

2 つの場所にテレメトリを送信する場合、Azure Monitor エクスポーターと一緒に OpenTelemetry プロトコル (OTLP) エクスポーターを有効にする必要があります。

Note

OTLP エクスポーターは、便宜上表示されているだけです。 Microsoft では、OTLP エクスポーターや、そのすべてのコンポーネントまたはサードパーティ エクスペリエンス ダウンストリームを正式にサポートしていません。

  1. OpenTelemetry.Exporter.OpenTelemetryProtocol パッケージをプロジェクトにインストールします。

    dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
    
  2. 次のコード スニペットを追加します。 この例では、OpenTelemetry コレクターが OTLP レシーバーと共に実行されることを前提にしています。 詳細については、GitHub の例を参照してください。

    // Create a new ASP.NET Core web application builder.
    var builder = WebApplication.CreateBuilder(args);
    
    // Add the OpenTelemetry telemetry service to the application.
    // This service will collect and send telemetry data to Azure Monitor.
    builder.Services.AddOpenTelemetry().UseAzureMonitor();
    
    // Add the OpenTelemetry OTLP exporter to the application.
    // This exporter will send telemetry data to an OTLP receiver, such as Prometheus
    builder.Services.AddOpenTelemetry().WithTracing(builder => builder.AddOtlpExporter());
    builder.Services.AddOpenTelemetry().WithMetrics(builder => builder.AddOtlpExporter());
    
    // Build the ASP.NET Core web application.
    var app = builder.Build();
    
    // Start the ASP.NET Core web application.
    app.Run();
    

OpenTelemetry の構成

次の OpenTelemetry 構成は、Azure Monitor OpenTelemetry Distros の使用中に環境変数を介してアクセスできます。

環境変数 説明
APPLICATIONINSIGHTS_CONNECTION_STRING これを Application Insights リソースの接続文字列に設定します。
APPLICATIONINSIGHTS_STATSBEAT_DISABLED これを true に設定して、内部メトリック収集をオプトアウトします。
OTEL_RESOURCE_ATTRIBUTES リソース属性として使用するキーと値のペア。 リソース属性の詳細については、Resource SDK の仕様を参照してください。
OTEL_SERVICE_NAME service.name リソース属性の値を設定します。 service.nameOTEL_RESOURCE_ATTRIBUTES でも指定されている場合は、OTEL_SERVICE_NAME が優先されます。

よく寄せられる質問

このセクションでは、一般的な質問への回答を示します。

OpenTelemetry とは何ですか?

監視のための新しいオープンソース標準です。 詳細については、「OpenTelemetry」を参照してください。

Microsoft Azure Monitor が OpenTelemetry に投資しているのはなぜですか?

Microsoft は、OpenTelemetry への最大のコントリビューターの 1 つです。

OpenTelemetry の重要な価値提案は、ベンダーに中立であることと、言語間で一貫した API/SDK を提供することです。

時間の経過とともに、Microsoft は、OpenTelemetry によって、Azure Monitor のお客様がサポートされている言語以外の言語で記述されたアプリケーションを監視できるようになると考えるようになりました。 また、豊富なインストルメンテーション ライブラリのセットを通じて収集できるデータの種類も拡張します。 さらに、OpenTelemetry SDK は、以前の Application Insights SDK よりもパフォーマンスが大規模に向上する傾向があります。

最後に、OpenTelemetry はオープン ソースを採用するという Microsoft の戦略に一致しています。

OpenTelemetry はどのような状況ですか?

OpenTelemetry の状態を参照してください。

"Azure Monitor OpenTelemetry Distro" とは

これは、Azure でのファースト クラスのエクスペリエンスのためにすべての OpenTelemetry コンポーネントをバンドルするシン ラッパーと考えることができます。 このラッパーは、OpenTelemetry のディストリビューションとも呼ばれます。

"Azure Monitor OpenTelemetry Distro" を使用する必要がある理由

コミュニティのネイティブ OpenTelemetry よりも Azure Monitor OpenTelemetry Distro を使用することには、いくつかの利点があります。

OpenTelemetry の精神に基づいて、ディストリビューションはオープンで拡張できるように設計されています。 たとえば、次のようなものを追加できます。

  • OpenTelemetry Protocol (OTLP) エクスポーターと 2 番目の宛先に同時に送信する
  • ディストリビューションに含まれていない他のインストルメンテーション ライブラリ

このディストリビューションは OpenTelemetry ディストリビューションを提供しているため、このディストリビューションは OpenTelemetry でサポートされているものすべてをサポートしています。 たとえば、OpenTelemetry でサポートされている場合は、テレメトリ プロセッサ、エクスポーター、インストルメンテーション ライブラリをさらに追加できます。

Note

このディストリビューションは、サンプラーを Application Insights のカスタムの固定レート サンプラーに設定します。 これを別のサンプラーに変更できますが、変更した場合、このディストリビューションに含まれる機能の一部が無効になる可能性があります。 サポートされているサンプラーの詳細については、「Azure Monitor OpenTelemetry を構成する」の「サンプリングの有効化」セクションを参照してください。

サポートされているスタンドアロンの OpenTelemetry エクスポーターがない言語の場合、Azure Monitor OpenTelemetry Distro が、Azure Monitor で OpenTelemetry を使用するための現在サポートされている唯一の方法です。 スタンドアロンの OpenTelemetry エクスポーターがサポートされている言語では、テレメトリ シナリオに応じて、Azure Monitor OpenTelemetry Distro または適切なスタンドアロンの OpenTelemetry エクスポーターのいずれかを使用できます。 詳細については、「どのようなときに Azure Monitor OpenTelemetry エクスポーターを使う必要がありますか?」を参照してください。

Azure Monitor OpenTelemetry Distro をテストするにはどうすればよいですか?

.NET、Java、JavaScript (Node.js)、Python に関する Microsoft 提供のドキュメントを確認してください。

OpenTelemetry または Application Insights SDK を使用する必要がありますか?

Application Insights SDK の正式なサポートでのみ利用できる機能が必要な場合を除き、OpenTelemetry Distro を使うことをお勧めします。

OpenTelemetry を採用すると、後で移行する必要がなくなります。

どのようなときに Azure Monitor OpenTelemetry エクスポーターを使う必要がありますか?

ASP.NET Core、Java、Node.js、Python では、Azure Monitor OpenTelemetry Distro の使用をお勧めします。 1 行のコードで始められます。

他のすべての .NET シナリオ (従来の ASP.NET やコンソール アプリなどを含む) では、.NET Azure Monitor OpenTelemetry エクスポーター (Azure.Monitor.OpenTelemetry.Exporter) の使用をお勧めします。

高度な構成を必要とするより複雑な Python テレメトリ シナリオでは、Python Azure Monitor OpenTelemetry エクスポーターの使用をお勧めします。

Azure Monitor OpenTelemetry Distro 内の機能は、現在どのようなリリース状態ですか?

次のグラフは、各言語に対する OpenTelemetry 機能のサポートを示しています。

機能 .NET Node.js Python Java
分散トレース
カスタム メトリック
標準メトリック (現状、精度はサンプリングの影響を受けます)
固定レート サンプリング
オフライン ストレージと自動再試行
例外のレポート
ログの収集 ⚠️
[カスタム イベント] ⚠️ ⚠️ ⚠️
Microsoft Entra 認証
ライブ メトリック
VM/VMSS と App Service のリソース コンテキストを検出する
AKS と関数のリソース コンテキストを検出する
可用性テストのスパン フィルター処理
ユーザー ID、認証されたユーザー ID、ユーザー IP の自動設定
操作名、ユーザー ID、または認証されたユーザー ID の手動オーバーライド/設定
アダプティブ サンプリング
Profiler ⚠️
スナップショット デバッガー

キー

  • ✅ この機能は、正式なサポートを受けるすべてのお客様が利用できます。
  • ⚠️ この機能は、パブリック プレビューとして利用できます。 「Microsoft Azure プレビューの追加利用規約」を参照してください。
  • ❌ この機能は利用できないか、適用されません。

OpenTelemetry は Web ブラウザーで使用できますか?

はい。ただし、お勧めしません。また、Azure ではサポートされていません。 OpenTelemetry JavaScript は、Node.js 用に非常に最適化されています。 代わりに、Application Insights JavaScript SDK を使用することをお勧めします。

Web ブラウザーで OpenTelemetry SDK を使用できるようになるのはいつですか?

OpenTelemetry Web SDK が利用可能になるタイムラインはまだ決定されていません。 Application Insights JavaScript SDK の有効な代替手段となるブラウザー SDK が登場するのは、おそらく数年先です。

現在、Web ブラウザーで OpenTelemetry をテストできますか?

OpenTelemetry Web Sandbox は、ブラウザーで OpenTelemetry を動作させるために設計されたフォークです。 Application Insights にテレメトリを送信することはまだできません。 この SDK では、一般的なクライアント イベントは定義されていません。

AppDynamics、DataDog、NewRelic などの競合エージェントと共に Application Insights を実行することはサポートされていますか?

不正解です。 このような実行をテストまたはサポートする予定はありませんが、Distro では、Azure Monitor と共に同時に OTLP エンドポイントにエクスポートできます。

運用環境でプレビュー機能を使用できますか?

それは推奨されません。 「Microsoft Azure プレビューの追加利用規約」を参照してください。

手動インストルメンテーションと自動インストルメンテーションの違いは何ですか?

OpenTelemetry の概要」を参照してください。

OpenTelemetry Collector を使用できますか?

Microsoft がアプリケーション監視のためのエージェントベースのアプローチをまだ正式にサポートしていないにもかかわらず、一部のお客様は、エージェントの代替として OpenTelemetry-Collector を使い始めています。 その間、オープンソース コミュニティは OpenTelemetry-Collector Azure Monitor エクスポーターを提供してきました。一部のお客様は、これを使ってデータを Azure Monitor Application Insights に送信しています。 これは、Microsoft ではサポートされません。

OpenCensus と OpenTelemetry の違いは何ですか?

OpenCensusOpenTelemetry の前段階です。 Microsoft は、OpenTracing と OpenCensus を統合して、世界の単一の監視標準である OpenTelemetry の作成を支援しました。 Azure Monitor 用に現在の運用環境で推奨されている Python SDK は、OpenCensus に基づいています。 Microsoft は、Azure Monitor を OpenTelemetry に基づくものにすることに取り組んでいます。

トラブルシューティング

動作していませんか? ASP.NET Core のトラブルシューティング ページをご確認ください。

サポート

選択した言語のタブを選択して、サポート オプションを検出します。

OpenTelemetry のフィードバック

フィードバックを提供するには: