そもそもテレメトリーとは?
テレメトリーとは、製品のパフォーマンス データを収集し、監視と分析のために遠隔地に送信するプロセスです。この手法は、さまざまな製品のパフォーマンスを簡単に追跡するためによく使用されます。
引用:https://www.ruijie.co.jp/faq/what-is-telemetry_439760686136164352.html
こちらから分かる通り、テレメトリーはメトリクスやトレースデータを遠隔地に送信するプロセスのようです。
ちなみに遠隔地はバックエンドと呼ばれます。
バックエンドの詳細については後述します。
代表的なテレメトリーデータ
実際にバックエンドに送信される(テレメトリー)データの種類は下記になります。
トレース
痕跡、足跡などの意味を持つ英単語。
ここでいうトレースとはある一つのリクエスト、処理に対しての痕跡を指します。
WEBアプリケーションを例にすると、HTTPSのGETリクエストを受け取り、メインルーチンの処理に掛かった時間、メインルーチン内のDBクエリに掛かった時間およびクエリ内容、外部ストレージへのアップロードに掛かった時間などがトレースデータになります。
メトリック(メトリクス)
メートル法、計測、単位などの意味を持つ英単語。
ここでいうメトリックとはCPU使用率やメモリ使用率、DBのコネクション数などの測定を指します。
メトリックのかたまりがメトリクスです。
トレースと違うのは状態を計測している点ですね。
イベント
収集を行うエージェントの起動や計測対象のホストの起動、停止、異常停止などのデータです。
カスタムイベントを作成出来るので、特定のプロセスが落ちた場合にイベントを送るみたいな使い方も出来ます。
ちなみにDatadogではエージェントの起動とコンテナの起動と停止などのイベントが自動で送られます。
ログ
こちらは分かりやすいですね。
アプリケーションログやクエリーログなどのログデータです。
オープンテレメトリーとは?
テレメトリーと、収集、送信するデータについて確認できたのでようやく本題です。
まずは下記公式ドキュメントの引用(自動翻訳)を確認します。
OpenTelemetry は、 トレース、 メトリック、 ログなど のテレメトリ データを作成および管理するために設計された Observabilityフレームワークおよびツールキットです。重要なのは、OpenTelemetry がベンダーやツールに依存しないことです。つまり、 Jaegerや Prometheusなどのオープンソース ツールや商用製品を含む、さまざまな Observability バックエンドで使用できます 。
「重要なのは、OpenTelemetry がベンダーやツールに依存しないこと」
ここを強調する理由として、DatadogやNew Relic、AWS X-Ray等のモニタリングサービスでは、通常それらのサービスに準拠したフレームワークになります。
例として、AWS X-Rayではアプリケーション計測を行うためのX-Ray SDKが用意されていますが、対応言語が限られているので、既存プロジェクトの言語では扱えない等の問題に直面します。
そういった問題を解消するのがこのオープンテレメトリーです。
X-Ray SDKではPHPを扱えませんが、オープンテレメトリーを介してトレースデータを送信できるようになります。
ちなみにオープンテレメトリーは、Cloud Native Computing Foundation(CNCF)という非営利団体により提供されています。
※CNCFはクラウド ネイティブ コンピューティングプロジェクトの支援を行っている団体です。
https://www.cncf.io/
バックエンドとは?
冒頭でメトリクスやトレースデータを送信する先の遠隔地をバックエンドとお話しました。
バックエンドとは、データが集まる場所を指します。
※データを収集する場所でないことに注意(収集はcollectorが行います)
モニタリングサービスにDatadogを使っているのであればバックエンドはDatadog、New Relicを使っているのであればバックエンドはNew Relicになります。
ホスト内のオープンテレメトリーcollectorでデータを収集し、バックエンドとしてDatadogやNew Relicを指定してデータを送信するイメージです。
最後に
オブザーバビリティまわりの学習ついでにオープンテレメトリーの概要や用語についてまとめてみました。
まだ触ったばかりなので、間違っている箇所があるかもしれません。
間違っている箇所や補足で入れておいた方が良いことなど、ご指摘頂けると有り難いです。
最後まで読んで頂きありがとうございましたm(_ _)m