.NET Aspire は、監視可能で本番環境に対応した、分散アプリケーションを構築するための独自のクラウド対応スタックという点では、新参者です。監視データ用のダッシュボードが組み込まれていると、開発中に便利です。しかし、OpenTelemetryをオブザーバビリティバックエンドに送信するように正しく設定するにはどうすればよいでしょうか?このブログ記事ではこのことに焦点を当てています。また、OpenTelemetry SDKを利用してカスタムアトリビュートを送信する方法も説明します。

.NET Aspire

.NET Aspireは、.NET Conf 2023の基調講演で初めて発表および紹介されました。解決しようとしている課題は次のとおりです。

  • 複雑さ:クラウドコンピューティングは基本的に困難です。
  • はじめに:この分野の新しい開発者にとって、クラウドネイティブへの最初の一歩は大仕事になる可能性があります。
  • 選択:開発者は多くの選択を行う必要があります。
  • 舗装された道: .NETの開発者にはクラウドネイティブアプリケーションを構築するために利用できる黄金の舗装された道はありませんでした。

まさにここで.NET Aspireが活躍します。これには、スタックの一部として次の機能が含まれています。

  • コンポーネント:クラウドネイティブアプリケーションと、RedisやPostgreSQLなどの著名なサービスやプラットフォームとのインテグレーションを促進するために、特別に選択され、厳選されたNuGetパッケージスイート。各コンポーネントは、自動プロビジョニングまたは標準化された設定パターンを使用して、重要なクラウドネイティブ機能を提供します。

  • 開発者向けダッシュボード:ログ、トレース、環境設定など、アプリケーションのさまざまな側面をすべてリアルタイムで詳しく追跡できます。これは、ローカル開発エクスペリエンスを強化することを目的として構築されており、アプリの状態と構造に関する洞察力に富んだ概要を提供します。

  • ツールとオーケストレーション:.NET Aspireには、Visual Studio用のプロジェクトテンプレートとツールエクスペリエンスが含まれ、.NET Aspireアプリの作成と操作に役立つドットネットコマンドラインインタフェース(CLI)が付属しています。また、マルチプロジェクトアプリケーションとその依存関係を実行および接続するための機能も提供します。

eShopデモアプリケーション

サービスベースのアーキテクチャーを使用して、eコマースウェブサイトを実装するリファレンス.NETアプリケーション。

アプリケーションの最新バージョンでは、プロジェクトの一部として.NET Aspireが含まれるようにソースコードが既に更新されています。最新の.NET 8 SDKをインストールし、リポジトリのクローンを作成できます。さらに、次のコマンドを実行して Aspireワークロードをインストールできます。

dotnet workload update
dotnet workload install aspire
dotnet restore eShop.Web.slnf

マシン上でその他すべての前提条件を準備したら、次のコマンドを使用してターミナルからアプリケーションを実行できます。

dotnet run --project src/eShop.AppHost/eShop.AppHost.csproj

.NET Aspire開発者向けダッシュボード

アプリケーションが起動し実行されたら、開発者ダッシュボードに移動して、実行中のリソースに直接アクセスするためのエンドポイントやURLなど、eShopアプリケーションの一部であるさまざまなリソースを特定します。

このダッシュボードには、ログ、トレース、メトリクスなどの監視テレメトリーも含まれています。

.NET Aspireオーケストレーション

.NET Aspireは、分散アプリケーション内のリソースや依存関係を表現するためのAPIを提供します。

続行する前に、.NET Aspireで使用する一般的な用語をいくつかご検討ください。

  • アプリモデル:分散アプリケーション(DistributedApplication)を構成するリソースのコレクション。より正式な定義については、アプリモデルの定義を参照してください。
  • アプリホスト/オーケストレータープロジェクト:アプリモデルをオーケストレーションする.NETプロジェクト。(慣例により)*.AppHostサフィックスが付いた名前が付けられます。- リソースリソース は、.NETプロジェクト、コンテナ、実行可能ファイル、またはデータベース、キャッシュ、クラウドサービス(ストレージサービスなど)などのその他のリソースであるかどうかに関係なく、アプリケーションの一部を表します。- リファレンス:リファレンスは、依存関係として表現されるリソース間の接続を定義します。詳しくは、リファレンスリソースを参照してください。

.NET Aspireでは、クラウドアプリケーションの構築、プロビジョニング、デプロイ、設定、テスト、実行、監視をシームレスに行うことができます。これを実現するには、アプリ内のリソースとその関係を概説するアプリモデルを利用します。

New RelicなどのOpenTelemetryバックエンドへのテレメトリーの送信

監視データ用のダッシュボードが組み込まれていると、開発中に便利です。このセクションでは、OpenTelemetryを正しく設定し、すべてのテレメトリーをオブザーバビリティバックエンドとしてNew Relicに送信する方法について焦点を当てます。

この記事で説明するシナリオのために、公式eShopアプリケーションの独自のフォークを作成しました。このリポジトリ内で、その主要コンポーネント を含むアプリホストプロジェクトを見つけることができます。

17行目から26行目では、ターミナルの環境変数を使用して提供できるいくつかの基本的な設定変数を定義します。

  • NEW_RELIC_LICENSE_KEY:OpenTelemetryプロトコル(OTLP)APIヘッダー値のNew Relicライセンスキー
  • NEW_RELIC_REGION:New Relicアカウントの米国またはEUリージョン設定

New Relicリージョン設定に基づいて、コードはOpenTelemetryのNew Relic OTLPエンドポイントを定義し、それをOTEL_EXPORTER_OTLP_ENDPOINT変数で使用します。

Aspireアプリケーションの一部である各プロジェクトに環境設定を追加できるよう、アプリホストプロジェクトの残りの部分は既に準備されています。たとえば、Identity.APIプロジェクトの設定は次のとおりです。

...
//各種サービス
var identityApi = builder.AddProject<Projects.Identity_API>("identity-api")
    .WithReference(identityDb)
    .WithEnvironment("OTEL_EXPORTER_OTLP_ENDPOINT", OTEL_EXPORTER_OTLP_ENDPOINT)
    .WithEnvironment("OTEL_EXPORTER_OTLP_HEADERS", OTEL_EXPORTER_OTLP_HEADERS)
    .WithEnvironment("OTEL_SERVICE_NAME", "identity-api");
...

eShopアプリケーションのこのフォークでは、追加の環境設定をいくつか追加しました。各.WithEnvironmentステートメントは、サービスに必要な環境変数を追加します。

  • OTEL_EXPORTER_OTLP_ENDPOINT:このサービスのすべてのテレメトリーのOTLPエンドポイント。当社の場合は、New Relic OTLPエンドポイント。
  • OTEL_EXPORTER_OTLP_HEADERS:New Relicライセンスキー(string OTEL_EXPORTER_OTLP_HEADERS = &quot;api-key=&quot; + NEW_RELIC_LICENSE_KEY;)を含むAPIヘッダー値。
  • OTEL_SERVICE_NAME:New Relicでそれぞれのエンティティの作成に関連するサービスの名前。

残りのサービスは適切に設定されています。

ターミナルで環境変数(つまり、NEW_RELIC_LICENSE_KEYNEW_RELIC_REGION)を設定したら、次のコマンドを使用してAspireアプリケーションを起動できます。

dotnet run --project src/eShop.AppHost/eShop.AppHost.csproj

環境を確認し、いずれかのプロジェクトの表示アイコンをクリックすると、すべてが正しく設定されているかどうかを確認できます。

OTEL_EXPORTER_OTLP_ENDPOINTはNew Relic OTLPエンドポイントを指す必要があります。

しばらくすると、アプリケーションのデータがNew RelicのAPMとサービス - OpenTelemetryセクションに表示されます。

その後、すべてのテレメトリーを監視して分析できます。たとえば、New Relicサービスマップをご覧ください。

...または分散トレーシングビュー:

楽に監視しましょう!

結論

OpenTelemetryを.NET Aspire eShopアプリケーションおよびNew Relicと統合すると、強力なテレメトリーツールを活用してアプリケーションのパフォーマンスを監視して改善できます。この設定により、貴重なインサイトが得られるだけでなく、問題を迅速かつ効率的に診断する能力も強化されます。このガイドで概説されている手順を実行すれば、よりレジリエンスの高い、監視力に優れたアプリケーションを構築できるようになります。今すぐテレメトリーデータの可能性を最大限に活用し、安定的なシステム稼働を維持しましょう。