IConfigurationを使用して、依存関係の注入 (DI) と統合するカスタム メトリック リスナーのインストルメントをフィルター処理します。 これらのフィルターは、測定を集計またはエクスポートする方法ではなく、リスナーがサブスクライブできるインストルメントを制御します。
メトリクス リスナー
メトリック リスナーは、 Meterによって作成されたカウンターやヒストグラムなどのインストルメントから測定値を受け取ります。 MeterListener クラスは、インストルメントを検出し、その測定値に直接サブスクライブする低レベル API を提供します。 メトリック収集のチュートリアルでは、この API の使用方法を示します。
IMetricsListener インターフェースを使用すると、カスタム リスナーを DI や設定ベースのフィルターと統合することができます。 メトリック インフラストラクチャは、登録されたMeterListener実装ごとに内部的にIMetricsListenerを作成します。
InstrumentPublished を呼び出して実装にインストゥルメントを提供する前に、構成されたルールを適用します。 リスナーがインストルメントを受け入れる場合、インフラストラクチャは実装によって提供されるコールバックに測定データを配信します。
カスタム リスナーを登録するには、 AddListenerを使用します。 この記事の設定は、これらの登録済みリスナーに適用されるものであり、コードやコレクターによって直接構成される MeterListener インスタンスには適用されません。
構成の読み込み
既定のビルダー設定を使用する汎用ホスト アプリケーションでは、AddMetricsが自動的に呼び出され、Metrics から IConfiguration セクションが読み込まれます。 ホストされていない DI アプリケーションでは、同じセクションをバインドするには、AddMetrics と AddConfiguration(IMetricsBuilder, IConfiguration) を明示的に呼び出します:
services.AddMetrics(metrics =>
metrics.AddConfiguration(configuration.GetSection("Metrics")));
これらの拡張メソッドを使用するには、Microsoft.Extensions.DependencyInjection と Microsoft.Extensions.Diagnostics.Metrics 名前空間をインポートしてください。
Important
Metrics構成では、登録されたIMetricsListener実装のインストルメントのみがフィルター処理されます。 リスナーを登録したり、そのサブスクリプションをアクティブ化したり、メトリックを作成したり、測定値を集計したり、データをエクスポートしたり、OpenTelemetry、Prometheus、dotnet-counters、またはその他のコレクターを自動的に構成したりすることはありません。
メーターと計器を選択する
次のセクションを使用して、ルールを適用するメーターを選択します。
| セクション | 適用対象 |
|---|---|
EnabledMetrics |
グローバルメーターとローカルメーターの両方。 |
EnabledGlobalMetrics |
Meter で直接作成されたメーターなど、スコープのないメーター。 |
EnabledLocalMetrics |
サービス コンテナーの IMeterFactory にスコープが設定されたメーター。 |
EnabledLocalMetricsのすぐ下にあるMetrics、EnabledMetrics、またはEnabledGlobalMetricsセクションは、登録されているすべてのリスナーに適用されます。 1 つのリスナーを対象にするには、Name など、リスナーの Metrics:MyListener:EnabledMetrics 値の下にセクションを入れ子にします。 リスナー名とインストルメント名では、大文字と小文字を区別せずに完全に一致する必要があります。
これらのセクションのいずれかで、ブールメーターエントリは、メーター名が一致するすべてのインストゥルメントを有効または無効にします。 インストルメントレベルのルールを設定するには、インストルメント名をキーとするオブジェクトを使用します。 特殊な Default エントリはフォールバックを提供します。 メーター レベルのブール Default エントリは、それ以外の場合は一致しないメーターに適用されます。 1 メートル以内の対象物については、Default は、それ以外では一致しないインストゥルメントに適用されます。 一致するルールがない場合、リスナーはインストルメントを受け取りません。
以下の appsettings.json の例では、名前が Contoso.Web で始まるメーターのインストルメントを有効にしますが、request-duration という名前のインストルメントは除きます:
{
"Metrics": {
"EnabledMetrics": {
"Contoso.Web": {
"Default": true,
"request-duration": false
}
}
}
}
ルールを照合し、競合を解決する
メーター名では、大文字と小文字を区別しないプレフィックスの一致が使用されます。 メーター名には、プレフィックスとサフィックスを照合するための * ワイルドカードを最大 1 つ含めることができます。 より具体的なルールは、リスナー固有のルール、長いメーター名パターン、インストルメント固有のルール、スコープ固有のルールの順に優先されます。 同じように特定のルールが競合する場合は、最後に設定されたルールが優先されます。
参照
.NET