OpenTelemetry (OTel) は、分散システム (マイクロサービスアーキテクチャなど) からテレメトリ データを収集、処理、エクスポートするためのベンダー中立の標準を提供するオープン ソース プロジェクトです。 この簡素化された普遍的な可観測性アプローチにより、開発者はソフトウェアのパフォーマンスと動作をより簡単に分析できるようになり、アプリケーションの問題をより簡単に診断およびデバッグできるようになります。 OTel は以下のデータを収集します:

  • 痕跡 – 「問題はどこにありますか?」
  • メトリクス – 「問題はありますか?」
  • ログ – 「問題は何ですか?」

OTel はプログラミング言語や製品ではありません。 このオープンソース プロジェクトは2019 年から存在しており、現在はCloud Native Computing Foundation (CNCF) によって管理されています。

開始方法については、このビデオをご覧ください。

OTel によって生成されるデータの種類

痕跡

トレースは、単一のリクエストの処理など、操作中に発生するイベントを記録します。 トレースは一連のスパンに分割され、各スパンは作業単位を表します。

たとえば、Web リクエストのトレースには、次の 3 つのスパンが含まれる場合があります。

  • リクエストを承認する
  • データベースのクエリ
  • 応答を送信

トレースは、複数のサービスを含む可能性のあるデータ フローを時系列順に並べられた一連のチャンクに分割し、次の内容を簡単に理解できるようにします。

  • 各チャンクで発生したすべてのステップ
  • チャンクが実行される順序
  • 各ステップの所要時間
  • 各ステップに関するメタデータ

OTel がトレースを生成したら、次のステップはそれを分析用のトレース バックエンドまたはツールにエクスポートすることです。 OTel は、 JaegerZipkinAWS X‑Rayなどの一般的なバックエンド用のエクスポーターのセットを提供します。 これらのサービスは、トレース データを分析および視覚化するためのツールを提供します。

メトリクス

OTel では、メトリックはオペレーティング システムの動作の特定の側面の測定値であり、時間の経過とともにキーと値のペア (メトリック ラベルと呼ばれる) として収集されます。 キーと値のペアは、時間の経過に伴う測定に関するコンテキストを提供します。 たとえば、Web サービスの応答時間のメトリックには、HTTP ステータス コード、エンドポイント、HTTP メソッドのラベルが含まれる場合があります。 すべてのメトリックにはタイムスタンプも付けられ、これも時系列の順序付けを可能にします。

ログ

ログは、特定のサービスで何が起こっているかを把握するための最も古く、最も一般的な方法です。 これらは通常テキストとして生成され、洞察を生成するために解析する必要があります。 OTel でのログのサポートはまだ実験段階です。

弊社のソリューション アーキテクトが OTel の可観測性機能セットを他の可観測性ツールと比較したときに発見した内容の詳細については、弊社のブログの「OpenTelemetry を最新のアプリ リファレンス アーキテクチャに統合する - 進捗レポート」を参照してください。

OTel 計装

OTel は、多くの一般的なプログラミング言語、ライブラリ、フレームワークと統合されます。 一部の言語のサポートは他の言語よりも包括的です。 たとえば、 JavaScript インストルメンテーション ライブラリには、トレースとメトリックの両方に対して「安定した」実装が自称されており、ログに対して最も安定したサポートが提供されています。 また、自動インストルメンテーション オプションも提供されており、サービス ロジックにインストルメンテーション固有のコードを追加せずにトレースの受信を開始できます。 一方、 Goのような言語では、メトリックとログのサポートがあまり成熟しておらず、自動インストルメンテーション機能がありません。

テレメトリの目標

テレメトリ計測を設定するときは、「すべてを送信して洞察を期待する」よりも明確な計測の目標から始めるのが最適です。 データを表示するまで何ができるかを完全に把握することはできないのは事実ですが、最低限の要件を設定することで、サービスのスムーズな運用と保守が可能になります。

次のような技術的な問題が考えられます:

  • サービスに負荷がかかっていてスケーリングが必要になったときにそれを知りたい。
  • サービスが頻繁に再起動されているかどうかを知りたいです。

しかし、次のような製品やユーザー エクスペリエンスに関連する懸念事項である可能性もあります。

  • ユーザーが 5 秒以内にシステム内の新しいメッセージを確認できるようにしたいです。
  • メッセージが送信されてから 1 分以内に通知が送信されるようにしたいです。

チュートリアル「OpenTelemetry Tracing を使用してマイクロサービスを理解する方法」の例として、主要な目標として以下を定義できます。

  • 新しいメッセージ フローを実現するためにリクエストが実行するすべての手順を理解します。
  • ユーザーフローが正常に完了したことを確認します。
  • ユーザーフローが最初から最後まで 5 秒より速く実行されることに自信を持つことができます (「通常の」状況下)。
  • 通知サービスがイベント(メッセンジャー サービスによってディスパッチされた)をタイムリーに処理しているかどうかを確認します。 
OTel 実装

OTel は、開発者に、一貫性のある標準化された方法でアプリケーションをインストルメント化するために使用できるアプリケーション プログラミング インターフェイス (API)、ソフトウェア開発キット (SDK)、およびインストルメンテーション ライブラリの単一セットを提供します。

OTel によって生成されるデータの形式は業界標準と見なされているため、複数のテレメトリ集約および視覚化ソリューションがそれを受け入れます。 Jaeger などのオンプレミス ソリューションを選択することも (このチュートリアルで行ったように)、 SumoLogicSigNozなどの Software-as-a-Service (SaaS) ソリューションを選択することもできます。

これら 3 種類のテレメトリをすべて管理するには、OTel に代わる唯一の方法は、複数のツールを組み合わせることです。 これにより、マイクロサービス アーキテクチャとインフラストラクチャの実行に伴う固有の複雑さに加えて、さらに複雑さが増します。

OTel のコンテキストにおける API とは何ですか?

API は、ソフトウェア コンポーネントが相互にやり取りするために使用するメソッド、関数、およびプロトコルを定義します。 OTel API は、開発者がアプリケーションを計測し、テレメトリ データを収集するために使用できる標準的なメソッドとプロトコルのセットを定義します。

OTel のコンテキストにおける SDK とは何ですか?

SDK は、標準またはアプリケーションの作成者によって提供されるソフトウェア開発ツールであり、開発者が標準に準拠したアプリケーションやアプリと対話するアプリケーションを簡単に構築できるようにします。SDK には通常、ライブラリ、コード サンプル、ドキュメント、およびテスト、デバッグ、パフォーマンス チューニング用のツールが含まれています。 OTel は、トレースメトリックリソース管理用の SDK を提供します。