OpenTelemetry (OTel) は、分散システム (マイクロサービスアーキテクチャなど) からテレメトリ データを収集、処理、エクスポートするためのベンダー中立の標準を提供するオープン ソース プロジェクトです。 この簡素化された普遍的な可観測性アプローチにより、開発者はソフトウェアのパフォーマンスと動作をより簡単に分析できるようになり、アプリケーションの問題をより簡単に診断およびデバッグできるようになります。 OTel は以下のデータを収集します:
OTel はプログラミング言語や製品ではありません。 このオープンソース プロジェクトは2019 年から存在しており、現在はCloud Native Computing Foundation (CNCF) によって管理されています。
開始方法については、このビデオをご覧ください。
トレースは、単一のリクエストの処理など、操作中に発生するイベントを記録します。 トレースは一連のスパンに分割され、各スパンは作業単位を表します。
たとえば、Web リクエストのトレースには、次の 3 つのスパンが含まれる場合があります。
トレースは、複数のサービスを含む可能性のあるデータ フローを時系列順に並べられた一連のチャンクに分割し、次の内容を簡単に理解できるようにします。
OTel がトレースを生成したら、次のステップはそれを分析用のトレース バックエンドまたはツールにエクスポートすることです。 OTel は、 Jaeger 、 Zipkin 、 AWS X‑Rayなどの一般的なバックエンド用のエクスポーターのセットを提供します。 これらのサービスは、トレース データを分析および視覚化するためのツールを提供します。
OTel では、メトリックはオペレーティング システムの動作の特定の側面の測定値であり、時間の経過とともにキーと値のペア (メトリック ラベルと呼ばれる) として収集されます。 キーと値のペアは、時間の経過に伴う測定に関するコンテキストを提供します。 たとえば、Web サービスの応答時間のメトリックには、HTTP ステータス コード、エンドポイント、HTTP メソッドのラベルが含まれる場合があります。 すべてのメトリックにはタイムスタンプも付けられ、これも時系列の順序付けを可能にします。
ログは、特定のサービスで何が起こっているかを把握するための最も古く、最も一般的な方法です。 これらは通常テキストとして生成され、洞察を生成するために解析する必要があります。 OTel でのログのサポートはまだ実験段階です。
弊社のソリューション アーキテクトが OTel の可観測性機能セットを他の可観測性ツールと比較したときに発見した内容の詳細については、弊社のブログの「OpenTelemetry を最新のアプリ リファレンス アーキテクチャに統合する - 進捗レポート」を参照してください。
OTel は、多くの一般的なプログラミング言語、ライブラリ、フレームワークと統合されます。 一部の言語のサポートは他の言語よりも包括的です。 たとえば、 JavaScript インストルメンテーション ライブラリには、トレースとメトリックの両方に対して「安定した」実装が自称されており、ログに対して最も安定したサポートが提供されています。 また、自動インストルメンテーション オプションも提供されており、サービス ロジックにインストルメンテーション固有のコードを追加せずにトレースの受信を開始できます。 一方、 Goのような言語では、メトリックとログのサポートがあまり成熟しておらず、自動インストルメンテーション機能がありません。
テレメトリ計測を設定するときは、「すべてを送信して洞察を期待する」よりも明確な計測の目標から始めるのが最適です。 データを表示するまで何ができるかを完全に把握することはできないのは事実ですが、最低限の要件を設定することで、サービスのスムーズな運用と保守が可能になります。
次のような技術的な問題が考えられます:
しかし、次のような製品やユーザー エクスペリエンスに関連する懸念事項である可能性もあります。
チュートリアル「OpenTelemetry Tracing を使用してマイクロサービスを理解する方法」の例として、主要な目標として以下を定義できます。
OTel は、開発者に、一貫性のある標準化された方法でアプリケーションをインストルメント化するために使用できるアプリケーション プログラミング インターフェイス (API)、ソフトウェア開発キット (SDK)、およびインストルメンテーション ライブラリの単一セットを提供します。
OTel によって生成されるデータの形式は業界標準と見なされているため、複数のテレメトリ集約および視覚化ソリューションがそれを受け入れます。 Jaeger などのオンプレミス ソリューションを選択することも (このチュートリアルで行ったように)、 SumoLogicやSigNozなどの Software-as-a-Service (SaaS) ソリューションを選択することもできます。
これら 3 種類のテレメトリをすべて管理するには、OTel に代わる唯一の方法は、複数のツールを組み合わせることです。 これにより、マイクロサービス アーキテクチャとインフラストラクチャの実行に伴う固有の複雑さに加えて、さらに複雑さが増します。
API は、ソフトウェア コンポーネントが相互にやり取りするために使用するメソッド、関数、およびプロトコルを定義します。 OTel API は、開発者がアプリケーションを計測し、テレメトリ データを収集するために使用できる標準的なメソッドとプロトコルのセットを定義します。
NGINX は、OTel についてさらに詳しく知るための以下の追加リソースを提供できることを誇りに思います。