OpenTelemetryとは
OpenTelemetry(OTel)は、分散システム(マイクロサービスアーキテクチャなど)からテレメトリデータを収集、処理、エクスポートするための、ベンダーに依存しない標準を提供するオープンソースプロジェクトです。このシンプルで汎用的なオブザーバビリティのアプローチにより、開発者はソフトウェアのパフォーマンスと動作を分析しやすくなり、アプリケーションの問題をより容易に診断、デバッグできます。OTelは次のデータを収集します。
- トレース – 「問題はどこにあるのか?」
- メトリクス – 「問題はあるか?」
- ログ – 「問題は何か?」
OTelはプログラミング言語でも製品でもありません。このオープンソースプロジェクトは2019年から存在し、現在はCloud Native Computing Foundation(CNCF)によって管理されています。
この動画で、利用を開始する方法をご確認ください。
OTelが生成するデータの種類
トレース
トレースは、単一のリクエストの処理など、オペレーション中に発生するイベントを記録します。トレースは一連のスパンに分割され、各スパンは作業の単位を表します。
たとえば、Webリクエストのトレースには、次の3つのスパンが含まれる場合があります。
- リクエストの受け付け
- データベースへのクエリ
- レスポンスの送信
トレースは、複数のサービスを含む場合があるデータフローを時系列順の一連のチャンクに分割し、以下の内容を容易に把握できるようにします。
- 各チャンクで実行されたすべてのステップ
- チャンクが実行された順序
- 各ステップの所要時間
- 各ステップのメタデータ
OTelでトレースを生成したら、次に、分析のためにトレーシングバックエンドまたはツールへエクスポートします。OTelは、次のような一般的なバックエンド向けのエクスポーターを提供しています。Jaeger、Zipkin、AWS X‑Ray。これらのサービスには、トレースデータを分析および可視化するためのツールが用意されています。
メトリクス
OTelでは、メトリクスはオペレーティングシステムの動作の特定の側面を測定したものであり、時系列でキーと値のペア(メトリクラベル)として収集されます。キーと値のペアは、時系列の測定値に関するコンテキストを提供します。たとえば、Webサービスの応答時間を示すメトリクスには、HTTPステータスコード、エンドポイント、HTTPメソッドのラベルが含まれる場合があります。また、すべてのメトリクスには、時系列順に並べられるようタイムスタンプが付与されます。
ログ
ログは、特定のサービスで何が起きているかを把握するための、最も古くからある一般的な手段です。通常はテキストとして生成され、知見を得るには解析が必要です。OTelのログサポートは、現在も試験的な段階です。
F5のソリューションアーキテクトがOTelと他のオブザーバビリティツールの機能セットを比較して得た知見について詳しくは、F5のブログ記事「最新アプリのリファレンスアーキテクチャへのOpenTelemetryの統合 – 進捗レポート」をご覧ください。
OTelインストルメンテーション
OTelは、多くの一般的なプログラミング言語、ライブラリ、フレームワークと統合できます。対応の充実度は言語によって異なります。たとえば、JavaScript計装ライブラリでは、トレースとメトリクスの両方について「安定版」とされる実装が提供されており、ログについても特に安定したサポートが提供されています。また、サービスロジックに計装固有のコードを追加せずにトレースの受信を開始できる自動計装オプションも用意されています。一方、Goなどの言語では、メトリクスとログのサポートがまだ十分に成熟しておらず、自動計装機能もありません。
テレメトリの目標
テレメトリ計測を設定する際は、「すべてを送信して、何らかの知見が得られることを期待する」という漠然とした方針ではなく、より明確な計測目標を定めることから始めるのが最善です。データを確認するまでは、何がどこまで可能かを完全には把握できませんが、最低限の要件を設定しておくことで、サービスの円滑な運用と保守に役立ちます。
たとえば、次のような技術的な考慮事項があります。
- サービスの負荷が高まり、スケーリングが必要になるタイミングを把握したい。
- サービスが頻繁に再起動しているかどうかを確認したい。
ただし、製品やユーザーエクスペリエンスに関する次のような懸念事項もあります。
- ユーザーがシステム内の新しいメッセージを5秒以内に確認できるようにしたい。
- メッセージの送信後1分以内に通知が配信されるようにしたい。
チュートリアル「OpenTelemetryトレーシングを使用してマイクロサービスを理解する方法」の例では、主な目標として次の項目を設定できます。
- 新しいメッセージフローを完了するまでに、リクエストがたどるすべてのステップを把握する。
- ユーザーフローが正常に完了したことを確認します。
- ユーザーフローがエンドツーエンドで5秒未満に実行されていることを確認します(「通常」の状況下)。
- notifierサービスが、messengerサービスによってディスパッチされたイベントを適時に処理しているかどうかを確認します。
OTelの実装
OTelは、開発者がアプリケーションを一貫した標準的な方法で計装するために使用できる、アプリケーションプログラミングインターフェース(API)、ソフトウェア開発キット(SDK)、計装ライブラリの統一されたセットを提供します。
OTelが生成するデータ形式は業界標準と見なされているため、複数のテレメトリ集約・可視化ソリューションで利用できます。このチュートリアルで使用したJaegerのようなオンプレミスソリューションを選択することも、SumoLogicやSigNozのようなSoftware-as-a-Service(SaaS)ソリューションを選択することもできます。
3種類すべてのテレメトリを管理する場合、OTelに代わる唯一の方法は、複数のツールを組み合わせることです。その結果、マイクロサービスのアーキテクチャとインフラストラクチャの運用に本来伴う複雑さが、さらに増すことになります。
OTelにおけるAPIとは
APIは、ソフトウェアコンポーネント間の連携に使用されるメソッド、関数、プロトコルを定義します。 OTel API は、開発者がアプリケーションを計装してテレメトリデータを収集するために使用できる、標準的なメソッドとプロトコルのセットを定義します。
OTelにおけるSDKとは
SDKは、標準またはアプリケーションの作成者が提供するソフトウェア開発ツールです。開発者はSDKを使用することで、標準に準拠したアプリケーションや、対象のアプリケーションと連携するアプリケーションを容易に構築できます。SDKには通常、ライブラリ、コードサンプル、ドキュメントのほか、テスト、デバッグ、パフォーマンスチューニング用のツールが含まれます。OTelは、トレース、メトリクス、リソース管理向けのSDKを提供しています。
