演習 - .NET Aspire プロジェクトでテレメトリを使用する
この演習では、OpenTelemetry API を使用して、カスタム データをログに追加します。 また、ログを調べてカスタム イベントを見つけます。
必須コンポーネントのインストール
この演習の前提条件
- .NET 8
- Visual Studio 2022 Preview
- Docker Desktop
- Visual Studio の .NET Aspire ワークロード
これらのパッケージが既にインストールされている場合は、先に進んで OpenTelemetry ログの操作を開始できます。
.NET 8 をインストールする
この .NET 8 のリンクに従って、オペレーティング システムに適したインストーラーを選択します。 たとえば、Windows 11 と最新のプロセッサを使用している場合は、x64 .NET 8 SDK for Windows を選択します。
ダウンロードが完了した後、インストーラーを実行し、指示に従います。 ターミナル ウィンドウで、次のコマンドを実行して、インストールが成功したことを確認します。
dotnet --version
インストールした .NET SDK のバージョン番号が表示されるはずです。 次に例を示します。
8.0.300-preview.24203.14
Visual Studio 2022 Preview をインストールする
この Visual Studio 2022 Preview のリンクに従って、[プレビューのダウンロード] を選択します。 ダウンロードが完了した後、インストーラーを実行し、指示に従います。
Docker Desktop のインストール
この Docker Desktop のリンクに従って、オペレーティング システムに適したインストーラーを選択します。 ダウンロードが完了した後、インストーラーを実行し、指示に従います。 パフォーマンスと互換性を最大限に高めるには、WSL 2 バックエンドを使用します。
Docker Desktop アプリケーションを開き、サービス契約に同意します。
Visual Studio に .NET Aspire ワークロードをインストールする
.NET CLI を使用して、.NET Aspire ワークロードをインストールします。
ターミナルを開きます。
次のコマンドを使用して .NET ワークロードを更新します。
dotnet workload update
ワークロードが正常に更新されたことを示すメッセージが表示されるはずです。
No workloads installed for this feature band. To update workloads installed with earlier SDK versions, include the --from-previous-sdk option. Updated advertising manifest microsoft.net.sdk.ios. Updated advertising manifest microsoft.net.workload.mono.toolchain.net6. Updated advertising manifest microsoft.net.sdk.android. Updated advertising manifest microsoft.net.workload.emscripten.net7. Updated advertising manifest microsoft.net.workload.emscripten.net6. Updated advertising manifest microsoft.net.sdk.macos. Updated advertising manifest microsoft.net.workload.emscripten.current. Updated advertising manifest microsoft.net.workload.mono.toolchain.current. Updated advertising manifest microsoft.net.sdk.maui. Updated advertising manifest microsoft.net.workload.mono.toolchain.net7. Updated advertising manifest microsoft.net.sdk.maccatalyst. Updated advertising manifest microsoft.net.sdk.tvos. Updated advertising manifest microsoft.net.sdk.aspire. No workloads installed for this feature band. To update workloads installed with earlier SDK versions, include the --from-previous-sdk option. Successfully updated workload(s): .
次のコマンドを使用して、.NET Aspire ワークロードをインストールします。
dotnet workload install aspire
Aspire ワークロードが正常にインストールされたことを示すメッセージが表示されるはずです。
Installing Aspire.Hosting.Sdk.Msi.x64 ...... Done Installing Aspire.ProjectTemplates.Msi.x64 ..... Done Installing Aspire.Hosting.Orchestration.win-x64.Msi.x64 ............. Done Installing Aspire.Hosting.Msi.x64 ..... Done Installing Aspire.Dashboard.Sdk.win-x64.Msi.x64 ....... Done Successfully installed workload(s) aspire.
次のコマンドを使用して、.NET Aspire ワークロードがインストールされていることを確認します。
dotnet workload list
.NET Aspire ワークロードの詳細が表示されます。
Installed Workload Id Manifest Version Installation Source --------------------------------------------------------------------------------------------- aspire 8.0.0/8.0.100 SDK 8.0.300-preview.24203, VS 17.10.34902.84 Use `dotnet workload search` to find additional workloads to install.
サンプル アプリの複製
サンプル アプリを取得するために git
を使用 してみましょう。 アプリには .NET Aspire が含まれているため、 OpenTelemetry は既定のログ記録、メトリック、分散トレースに含まれています。
コマンド ラインで、コードを操作できる任意のフォルダーを参照します。
次のコマンドを実行して、Northern Mountains eShop サンプル アプリケーションを複製します。
git clone -b aspire-telemetry https://github.com/MicrosoftDocs/mslearn-aspire-starter
コンパイル時ソース生成を使用して、メッセージをログに記録する
コンパイル時ソース生成を使用して、パフォーマンスの高いログ コードを自動的に作成できます。 製品ブランドを取得するため、その手法を実装しましょう。
Visual Studio を開き、 [プロジェクトまたはソリューションを開く] を選択します。
スターター プロジェクトを複製したフォルダーを参照します。 start フォルダーを開き、[eShop.aspiretelemetry.sln] を選択し、[開く] を選択します。
ソリューション エクスプローラーで、WebApp> Services を展開 し、CatalogService.cs をダブルクリックします。
CatalogService
クラスを宣言する次のコード行を見つけます。public class CatalogService(HttpClient httpClient)
コンパイル時ソース生成を使用するには、この
partial
クラスを作成し、依存関係の挿入を使用してロガーを取得する必要があります。 次のコードに一致するように行を変更します。public partial class CatalogService(HttpClient httpClient, ILogger<CatalogService> logger)
次に、
CatalogService
クラス内の他のメソッド以外の場所に、LogGetBrands という名前の新しいstatic partial
メソッドを作成します。public static partial void LogGetBrands(string uri, ILogger logger);
その行の直前に
LoggerMessageAttribute
を追加し、ログ レベルとメッセージを定義します。[LoggerMessage( EventId = 0, Level = LogLevel.Information, Message = "Getting brands from URI: {uri}")]
GetBrands()
メソッドとその中にある次のコード行を見つけます。var uri = $"{remoteServiceBaseUrl}catalogBrands";
新しいログ メソッドを呼び出すには、その行の後に次のコードを挿入します。
LogGetBrands(uri, logger);
変更を保存するには、CTRL キーを押しながら S キーを押 すか、 ファイル >[すべて保存] を選択します。
インストルメンテーションのテスト
次に、コンパイル時のソース生成ログをテストします。
Visual Studio でアプリをデバッグ モードで起動するには、F5 キーを押すか、[デバッグ]>[デバッグの開始] を選択します。
[Docker Desktop の起動] メッセージが表示されたら、[はい] を選択します。 アプリが起動し、ブラウザー タブに .NET Aspire ダッシュボードが表示されます。
いくつかの要求を行うには、[リソース] ボックスの一覧で [webapp] プロジェクトを見つけて 、[エンドポイント] 列でそのエントリのいずれかを選択します。
新しいブラウザー タブが表示され、Northern Mountains のホームページが表示されます。 左側にブランド リストが含まれています。 .NET Aspire ダッシュボードに戻り、左側の [構造化] を選択します。
[フィルター] ボックスに 、「ブランドの取得」と入力します。 このページには、ログに記録されたイベントが表示されます。
イベントの [詳細] 列で、[表示] を選択します。 ダッシュボードで下のウィンドウが開き、エントリの詳細が表示されます。
ブラウザーのタブを閉じ、Visual Studio で SHIFT キーを押しながら F5 キーを押すか、デバッグ >[デバッグの停止] を選択します 。
Visual Studio を閉じます。