可観測性とは
コードに進む前に、一歩前に戻り、可観測性について話しましょう。 外部から見えるものに基づいてシステムの内部状態を理解するのに役立つツールが必要です。
可観測性を実装する理由
クラウドネイティブ アプリケーションの開発と改善において、可観測性が重要な側面である理由はいくつかあります。
- システムの動作を理解する: 監視機能は、アプリケーションのパフォーマンスとボトルネックやエラーが発生する場所に関する分析情報を提供します。
- デバッグとトラブルシューティング: 問題が発生した場合、監視ツールは、問題の発生時にシステムで発生した内容に関する詳細情報を提供できます。
- 継続的な改善: 可観測性は、問題を特定して解決するためのものであり、継続的な改善にも使用されます。 時間の経過と伴うシステム パフォーマンスを監視することで、コードを最適化し、システム パフォーマンスを向上させ、ユーザーのエクスペリエンスを定量的に向上させる機会を特定できます。
- 事前対応型の問題検出: 適切な監視ツールを用意することで、ユーザーが問題を見る前に検出できることがよくあります。
クラウドネイティブ アプリケーションでの可観測性の実装は、単なるベスト プラクティスではなく、アプリケーションを維持、最適化、継続的に改善するために必要です。 これにより、開発者は信頼性の高い高パフォーマンスのアプリケーションを提供でき、情報に基づく意思決定を促進するために必要な分析情報が提供されます。
観測の 3 つの柱
可観測性には、主に次の 3 つの柱があります。
-
ログ: ログは、アプリケーションまたはシステム内で発生するイベントの詳細なレコードを提供します。 アプリでは、
Microsoft.Extensions.Loggingインフラストラクチャを使用してイベントをログに記録できます。 - メトリック: メトリックとは、システムのパフォーマンスと正常性に関する分析情報を提供する数値の測定値とカウンターを指します。 たとえば、要求レート、応答時間、CPU/メモリ使用量、エラー率などがあります。 アプリでは、追跡する必要がある特定の測定値がある場合があります。
- 分散トレース: このプロセスでは、クラウドネイティブ アプリ内のすべてのマイクロサービスに伝達される要求のトレースが含まれます。 各サービスは、サービス間でイベントを関連付けることができる要求 ID などのトレース データをログに記録します。 分散トレースは、複雑なシステムでのパフォーマンスの問題やエラーのデバッグにも役立ちます。
これら 3 つの柱を組み合わせることで、システムに包括的な可観測性が提供されます。
テレメトリのデータ ソース
会社のクラウドネイティブ アプリには、収集できるテレメトリのソースがいくつかあります。
- アプリケーション ログ: アプリケーションは、操作に関する詳細情報と発生した場合のエラーを提供するログを生成します。 ログ記録は、テレメトリ データの豊富なソースです。
- データベース: データベースは、処理するクエリ、実行時間、発生したエラーに関するテレメトリ データを提供できます。
- HTTP 要求と応答: マイクロサービス間の HTTP 要求と応答は、豊富で貴重なテレメトリ データを提供します。 このデータには、要求ヘッダーと応答ヘッダー、本文の内容、状態コード、タイミング情報が含まれます。
- クライアント側のパフォーマンス データ: フロントエンドを備えたクラウドネイティブ アプリでは、クライアント側のパフォーマンス データを収集できます。 このデータには、ページ ヒット、読み込み時間、UI 操作時間が含まれる場合があります。
- インフラストラクチャ メトリック: アプリケーションがクラウド環境でホストされている場合は、CPU 使用率、メモリ使用量、ネットワーク トラフィック、ディスク I/O 操作などのインフラストラクチャ メトリックを収集できます。
このテレメトリ データを収集して分析することで、アプリケーションのパフォーマンスと正常性に関する貴重な分析情報を得ることができます。
可観測性を実装する
クラウドネイティブ アプリケーションに可観測性を追加するには、次の手順を実行します。
- ログ記録を追加します。
- メトリックを有効にし、キャプチャするカスタム メトリックを定義します。
- OpenTelemetry と Zipkin を使用して分散トレースを有効にします。
- OpenTelemetry を使用し、コードにテレメトリを追加して、アプリをインストルメント化します。
- Prometheus、Grafana、または Application Insights を使用してテレメトリ データを分析します。
OpenTelemetry の概要
OpenTelemetry は、アプリに可観測性を追加するのにどのように役立ちますか。また、.NET でこのような詳細なサポートが提供されているのはなぜですか? OpenTelemetry は、オープンソースの可観測性フレームワークです。 テレメトリ データを生成するための、ベンダーに依存しない標準的な方法が提供されます。
OpenTelemetry は、テレメトリ データを収集してバックエンド プラットフォームに送信する方法を標準化します。 すべてのマイクロサービスに共通の形式のインストルメンテーションを提供することで、可視性のギャップを埋めます。 バックエンド プラットフォームが変更されるたびに、コードを再挿入したり、異なる独自のエージェントをインストールしたりする必要はありません。
オープン標準であるため、.NET 以外の他の多くのツールをサポートしています。 OpenTelemetry は、エクスポーターがさまざまなツールへのテレメトリ データを作成できるようにする拡張機能を使用するように構成されています。 つまり、記述されている言語に関係なく、同じツールを使用してマイクロサービスを監視できます。
OpenTelemetry は、監視の 3 つの柱 (ログ、メトリック、トレース) をすべて収集して監視するのに役立ちます。 これらのタスクの実行方法は、次のユニットで確認できます。