.NET のテレメトリ API
トラブルシューティングやパフォーマンスの最適化のためにアプリの動作を調査するにはどうすればよいですか? アプリの実行内容に関するデータが多いほど、問題の診断が容易になります。
あなたはアウトドア用機器の販売店で働いているとします。 チームは、テスト フェーズの準備ができているマイクロサービスを構築しています。 テスト、ステージング、運用中に問題を診断できるように、クラウドネイティブ アプリによってその動作に関するテレメトリが確実に出力されるようにしたいと考えています。
このユニットでは、テレメトリと記録できるさまざまな種類のデータについて学習します。
テレメトリとは
エンジニアリングでは、テレメトリとはデータを測定し、監視用の中央システムに自動送信することを意味します。 たとえば、レーシング カーでは、そのパフォーマンスに関するデータを記録し、それをエンジニアが分析するパドックに送り返す場合があります。 同様に、宇宙カプセルでは、カプセル内の状態に関する情報を記録し、それを宇宙管制センターに送り返す場合があります。 近年では、より一般的なシステムでテレメトリ データを記録および分析することが一般的になっています。 たとえば、セントラル ヒーティングでは、トラブルシューティングに役立つテレメトリが製造元に送信される場合があります。
クラウドネイティブ アプリを作成する場合、テレメトリは次の場合に役立ちます。
- マイクロサービスを開発していて、それらが期待どおりに動作しているかどうかを知りたい。
- アプリをテストしていて、テストに失敗したときに何が起こるかを知りたい。
- アプリをステージングしていて、その実行方法を知りたい。
- 運用環境でアプリをサポートしており、例外のトラブルシューティングやパフォーマンスの最適化を行いたい。
豊富なテレメトリを出力するシステムは次のように表現できます。
- 監視可能:監視可能なシステムは、外部からの動作を把握できるようにするものです。
- インストルメント化された:インストルメント化されたシステムは、開発者が問題のトラブルシューティングに必要なすべてのデータを出力するものです。
OpenTelemetry は、テレメトリ データを作成、処理、出力するためにアプリで使用できる監視フレームワークとツールキットです。 クラウドネイティブ アプリのマイクロサービスなど、任意の .NET アプリケーションに簡単に追加できます。 Jaeger や Prometheus のような一般的な監視ツールで使用および分析できる形式でデータが出力されます。
可観測性の重要な要素
さまざまなテクノロジを使用する分散マイクロサービスで構成されるクラウドネイティブ アプリの性質により、監視可能で適切にインストルメント化されたコードの構築が困難になる可能性があります。 すべてのチームが監視をマイクロサービスに統合する必要があります。そうしないと、アプリの一部の監視とトラブルシューティングが困難な場合があります。
重要
アプリ全体を確実に監視できるようにするには、すべての開発チームがマイクロサービスの監視の次の 3 つの柱を考慮していることを確かめる必要があります: ログ、メトリック、およびトレース。
監視の 3 つの柱は、後で分析するためにソフトウェア コンポーネントの動作を格納する 3 種類のレコードです。
- ログ: 要求の処理中に発生した内容のタイムスタンプ付きテキスト レコード。
- メトリック: 実行時にキャプチャされたサービスの測定値。 メトリック値は、次のようなプロセスに関する統計情報に集約できます。
- 使用されたメモリや発生したガベージ コレクションの数など、.NET ランタイムの統計情報。
- 完了した要求の数、要求期間、エラー数など、ASP.NET または NuGet パッケージの統計情報。
- 注文の数など、アプリに固有のカスタム統計情報。
- 分散トレース: 個々の要求を処理するために必要なすべての作業単位 (多くの場合、スパンと呼ばれる) のレコード。 クラウドネイティブ アプリでは、多くのマイクロサービスとバッキング サービスが 1 つの要求に関係する可能性があり、分散トレースでは、応答を準備するために共同作業を行う場合に、それらのすべてが表示されます。
Note
OpenTelemetry では、分散トレースやメトリックに含まれていないデータは、イベントなどのログと見なされます。
.NET でのテレメトリの使用
.NET には、次の 3 つの柱を表す組み込みの型があります。
- ILogger:このインターフェイスでは、.NET コードからイベントをログに記録するときに使用できる標準インターフェイスが提供されます。
- Meter:このクラスを使用して、それぞれがコードのパフォーマンスまたは動作に関連付けられた値を測定する、インストルメントのグループを作成できます。 たとえば、製品の売上をカウントするインストルメントや、メッセージがキューで待機した時間の長さを測定する別のものを追加できます。 .NET では多くの組み込みメトリックも提供されます。
- アクティビティ: このクラスを使用して、トレース情報を記録できます。 まず、名前空間の
ActivitySource
オブジェクトを作成します。 その後、StartActivity
メソッドを呼び出してデータの記録を開始します。
これらのクラスは任意の .NET コードで使用できます。 次のユニットでは、.NET Aspire によって、クラウドネイティブ アプリで OpenTelemetry クラスをいかに簡単に使用できるようになるかを確認します。