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

  • トレース – 「どこに問題があるか?」
  • 指標 – 「問題があるか?」
  • ログ – 「何が問題か?」

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

最初にこちらのビデオをご覧ください。

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

トレース

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

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

  • リクエストの承認
  • データベースのクエリ
  • レスポンスの送信

トレースは、複数のサービスを含むことのあるデータ フローを時系列に並んだ一連のチャンクに分割して、以下の情報を簡単に把握できるようにします。

  • 各チャンク内で起こったすべてのステップ
  • チャンクの実行順序
  • 各ステップの持続時間
  • 各ステップに関するメタデータ

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

指標

OTelでは、指標はオペレーティング システムの特定の動作の側面の測定値であり、キーと値のペア(指標ラベル)として経時的に収集されます。キーと値のペアは、経時的な測定値に関するコンテキストを提供します。例えば、Webサービスのレスポンス時間の指標には、HTTPステータス コード、エンドポイント、およびHTTPメソッドのラベルが含まれる場合があります。また、時系列に並べることができるように、すべての指標にはタイムスタンプが付いています。

ログ

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

当社のソリューション アーキテクトが他の可観測性ツールとOTelの可観測性機能セットを比較した結果については、当社のブログ「Modern Apps Reference ArchitectureへのOpenTelemetryの統合 – 進捗レポート」を参照してください。

OTelのインストルメンテーション

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

テレメトリの目標

テレメトリのインストルメンテーションを設定するときは、「すべて送信してインサイトを期待する」よりも、一連のインストルメンテーションの目標をより明確に定義することから始めることをお勧めします。データを見るまでどの程度可能かがわからないのは確かですが、最低要件を設定しておくと、サービスのスムーズな運用とメンテナンスを徹底するのに役立ちます。

このような目標としては、次のような技術的な懸念が考えられます。

  • いつサービスが圧迫されて拡張が必要になるかを知りたい。
  • サービスが頻繁に再起動されているかどうかを知りたい。

ただし、次のような製品やユーザー エクスペリエンスに関連する懸念も考えられます。

  • システムでユーザーに5秒以内に新しいメッセージを表示したい。
  • メッセージが送信されてから1分以内に通知を送信したい。

当社のチュートリアル「OpenTelemetryのトレースを使用してマイクロサービスを理解する方法」からの例として、次のような主な目標を定義することができます。

  • 新しいメッセージ フローを完了するためにリクエストで行う必要のあるすべてのステップを理解する。
  • ユーザー フローが正常に完了したことを確認する。
  • ユーザー フローがエンドツーエンドで5秒以内に実行されていることを確認する(「標準的」な状況下)。
  • 通知サービスがイベント(メッセージ サービスによって送信された)をタイムリーに処理しているかどうかを知る。
OTelの実装

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

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

3種類のテレメトリをすべて管理するためのOTelに代わる方法は、複数のツールを組み合わせることしかありません。そうすると、マイクロサービス アーキテクチャおよびインフラストラクチャの実行に伴う複雑さがさらに増すことになります。

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

APIは、ソフトウェア コンポーネントが相互に対話するために使用されるメソッド、関数、プロトコルを定義します。OTel APIは、開発者がアプリケーションのインストルメンテーションを行い、テレメトリ データを収集できる標準的なメソッドとプロトコルのセットを定義します。

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

SDKは、標準またはアプリケーションの作成者によって提供されるソフトウェア開発ツールです。SDKを使用すると、開発者はその標準に従ったアプリケーションを簡単に作成したり、そのアプリケーションと簡単に対話したりできるようになります。一般に、SDKには、ライブラリ、コード サンプル、ドキュメント、およびテスト、デバッグ、パフォーマンス調整のためのツールが含まれています。OTelは、トレース指標、およびリソース管理用のSDKを提供しています。