Azure Monitor OpenTelemetry Distro を構成する

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

接続文字列

Application Insights 内の接続文字列は、テレメトリ データを送信するためのターゲットの場所を定義します。

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

  • 以下のように program.cs ファイルに UseAzureMonitor() を追加します。

    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>";
    });
    
    var app = builder.Build();
    
    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 ResourceBuilder to add the custom resource attributes to all signals.
    // Custom resource attributes should be added AFTER AzureMonitor to override the default ResourceDetectors.
    .ConfigureResource(resourceBuilder => resourceBuilder.AddAttributes(_testResourceAttributes));

// 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(options =>
{
    // Set the sampling ratio to 10%. This means that 10% of all traces will be sampled and sent to Azure Monitor.
    options.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 メトリック に対してアラートを生成することをお勧めします。

ライブ メトリック

ライブ メトリックでは、アプリケーションのアクティビティとパフォーマンスに対する分析情報のリアルタイムな分析ダッシュボードを提供します。

重要

ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。

この機能は、既定で有効になっています。

ユーザーは、ディストリビューションを構成するときにライブ メトリックを無効にすることができます。

builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
	// Disable the Live Metrics feature.
    options.EnableLiveMetrics = false;
});

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 が優先されます。