可観測性とは

完了

コードの説明に入る前に、一歩後退して監視について説明します。 外部から見えるものに基づいてシステムの内部状態を把握するのに役立つツールが必要です。

監視を実装する理由

クラウドネイティブ アプリケーションの開発と改善で監視が重要な側面である理由はいくつかあります。

  • システムの動作を把握する: 監視により、アプリケーションのパフォーマンスと、ボトルネックまたはエラーが発生した場所に関する分析情報を得ることができます。
  • デバッグとトラブルシューティング: 問題が発生した場合、監視ツールを使用すると、問題発生時にシステム内で何が起こっていたかについて詳細な情報を得ることができます。
  • 継続的な改善: 監視は、問題を特定して解決するためだけではなく、継続的な改善にも使用されます。 システムのパフォーマンスを長期にわたって監視すると、コードの最適化、システム パフォーマンスの向上、ユーザー エクスペリエンスの定量的な改善を行う機会を特定できます。
  • 問題の早期検出: 適切な監視ツールを導入すると、多くの場合、ユーザーが気づく前に問題を検出できます。

クラウドネイティブ アプリケーションに監視を実装することは、単にベスト プラクティスであるだけでなく、アプリケーションの保守、最適化、継続的な改善に不可欠です。 これにより、開発者は信頼性が高くパフォーマンスに優れたアプリケーションを提供できるようになり、情報に基づいた意思決定を推進するために必要な分析情報が得られます。

監視の 3 つの柱

監視には、次の 3 つの主な柱があります。

  • ログ: ログは、アプリケーションまたはシステム内で発生したイベントの詳細な記録を提供します。 アプリでは、Microsoft.Extensions.Logging インフラストラクチャを使用してイベントをログします。
  • メトリック:メトリックは、システムのパフォーマンスと状態に関する分析情報を提供する数値の測定値とカウンターを指します。 たとえば、要求レート、応答時間、CPU とメモリの使用量、エラー率などがあります。 アプリでは、特定の測定値を追跡することが必要な場合があります。
  • 分散トレース: このプロセスには、クラウドネイティブ アプリ内のすべてのマイクロサービスに伝わる要求のトレースが含まれます。 各サービスでは要求 ID などのトレース データがログされるため、そのデータを使用してサービス間でイベントを関連付けることができます。 分散トレースは、複雑なシステムでのパフォーマンスの問題やエラーのデバッグにも役立ちます。

これら 3 つの柱を組み合わせると、システムに包括的な監視が提供されます。

テレメトリのデータ ソース

会社のクラウドネイティブ アプリでは、テレメトリのソースがいくつかあり、収集するソースを選択できます。

  • アプリケーション ログ: アプリケーションは、エラーが発生した場合、その操作とエラーに関する詳細情報を提供するログを生成します。 ログは、テレメトリ データの豊富なソースです。
  • データベース: データベースは、処理するクエリ、実行時間、発生したエラーに関するテレメトリ データを提供できます。
  • HTTP 要求と応答: マイクロサービス間の HTTP 要求と応答により、貴重なテレメトリ データが豊富に提供されます。 このデータには、要求と応答のヘッダー、本文の内容、状態コード、タイミング情報が含まれます。
  • クライアント側のパフォーマンス データ: フロントエンドを備えたクラウドネイティブ アプリでは、クライアント側のパフォーマンス データを収集できます。 このデータには、ページのヒット数、読み込み時間、UI 操作時間が含まれる場合があります。
  • インフラストラクチャ メトリック: アプリケーションがクラウド環境でホストされている場合、CPU 使用率、メモリ使用量、ネットワーク トラフィック、ディスク I/O 操作などのインフラストラクチャ メトリックを収集できます。

このテレメトリ データを収集して分析すると、アプリケーションのパフォーマンスと健全性に関する貴重な分析情報を得ることができます。

監視を実装する

監視をクラウドネイティブ アプリケーションに追加するには、次の手順のようにします。

  • ログを追加する。
  • メトリックを有効にして、キャプチャするカスタム メトリックを定義します。
  • OpenTelemetry と Zipkin で分散トレースを有効にします。
  • もう一度 OpenTelemetry を使用し、コードにテレメトリを追加して、アプリをインストルメント化する。
  • Prometheus、Grafana、または Application Insights を使って、テレメトリ データを分析します。

OpenTelemetry の概要

OpenTelemetry は、アプリに監視を追加するのにどのように役立つのでしょうか? また、OpenTelemetry が .NET でこれほど根強くサポートされているのはなぜでしょうか? OpenTelemetry は、オープンソースの監視フレームワークです。 テレメトリ データを生成するためのベンダーに依存しない標準的な方法が提供されます。

OpenTelemetry は、テレメトリ データが収集され、バックエンド プラットフォームに送信される方法を標準化します。 すべてのマイクロサービスにわたって共通の形式のインストルメンテーションを提供して、可視性のギャップを埋めます。 バックエンド プラットフォームが変更されるたびに、コードを再インストルメント化したり、別の専用エージェントをインストールしたりする必要はありません。

これはオープン標準であるため、.NET の他に多くのツールをサポートしています。 OpenTelemetry は、エクスポーターがさまざまなツールのすべてに対するテレメトリ データを作成できるようにする拡張機能を使用するように構成されています。 つまり、マイクロサービスが記述されている言語に関係なく、同じツールを使用してマイクロサービスを監視できます。

OpenTelemetry は、監視の 3 つの柱であるログ、メトリック、トレースをすべて収集して監視するのに役立ちます。 以降のユニットでは、これらのタスクを行う方法を見ていきます。