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