今後のイベントやトレーニングにぜひ参加してください。Sources」の抄訳記事です。第1回では、OpenTelemetryの概要と、なぜOpenTelemetryが計測器の未来を担うのかを説明しました。第2回では、OpenTelemetryオープンソースプロジェクトのコアコンポーネントのいくつかをご紹介しました。今回の第3回では、OpenTelemetryの主要なデータソースに焦点を当てています。OpenTelemetryプロジェクトには、トレース、メトリクス、ログという3つの主要なデータソースがあります。それぞれのデータソースと、関連するアプリケーションプログラミングインターフェース(API)およびソフトウェア開発キット(SDK)を見てみましょう。おけるトレースは、システムを介した単一のリクエストの詳細をキャプチャし、スパンと呼ばれる作業の単位から構成されます。スパンはトレース内の単一のオペレーション、またはリクエストがシステムを流れる際に、リクエストに関わる個々のサービスやコンポーネントによって行われる作業を表します。呼び出しやデータベース呼び出しなどです。トレースはスパンのツリー状になっています。各トレースにはルートスパンが含まれており、通常はリクエスト全体のエンドツーエンドのレイテンシーを記述します。以上のサブスパンを含むことができます。key:valueペア形式の属性のセットなどのメタデータが含まれています。どのように使用するか、簡単な例を示しています。SDKをどのように使用するかについても紹介しています。クイックスタートガイドを確認する。依存関係として追加する必要があります。よってインスタンス化される、スパンを作成するためのトレーサーを提供します。トレーサーによって生成された各スパンには、そのスパンを生成したライブラリのバージョン名が関連付けられます。コンテキストAPIスパンには、サービスの境界を越えてトレース情報をやりとりするのに必要なデータを表す、グローバルに一意な識別子(spanIDとtraceID)のセットであるスパンコンテキストが含まれます。コンテキストAPIを使用して、下流のサービスにコンテキストを伝搬し、分散トレースを作成します。ビデオで説明されているように、OpenTelemetryはW3Cトレースコンテキスト、B3、Jaegerなど、トレースコンテキストを伝播するためのさまざまな標準をサポートしています。Relicのようなオブザーバビリティプラットフォームとで監視しているサービスが同じ分散トレースに現れます。このコンテキストを使って、メトリクスやログをトレースに関連付けることができます。baggage標準をサポートしているので、開発者は任意のkey:valueペアをキャプチャして、トレース、メトリクス、ログデータをリッチにすることができます。トレースSDKアプリケーション開発者は、OpenTelemetryトーレスSDKを依存関係に追加する必要があります。アプリケーション開発者は、アプリケーションのニーズに合ったtracerProviderを設定することができます。これには、リソースの関連付け、サンプリングの設定、スパンプロセッサとエクスポーターのパイプラインのトレーサープロバイダへの登録が含まれます。リソースとは、アプリケーションが実行されている環境を記述する属性の集合体であり、例えば、サービス名、サービスが実行されているホスト、Kubernetes環境であれば、ノード名やポッド名などが挙げられます。サンプリングを行うことで、収集してバックエンドに送信するトレースの数を減らします。その結果、インスツルメンテーションによって生じるノイズやオーバーヘッドを抑制することができます。SDKには、すぐに使えるサンプラーがいくつか用意されており、開発者は特定のアプリケーションのニーズに基づいてサンプラーを構成することができます。トレースSDKに限らず、OpenTelemetryコレクターで追加のサンプリング(テールベースのサンプリングなど)を設定することもできます。トレーサープロバイダーにスパンプロセッサーのパイプラインとエクスポーターを登録することができます。スパンプロセッサーは、登録された順に起動され、属性でスパンをフィルタリングしたり充実させたりすることができます。バッチングプロセッサーを使用してスパンのコレクションをバッチ処理してから、エクスポーターを使用してバックエンドのオブザーバビリティプラットフォームに送信します。トレースデータにはアプリケーションに対する個々のリクエストについての詳細な情報が含まれていることがわかります。トレースデータがどのようにサンプリングされるかについても説明しました。OpenTelemetryにおけるメトリクスOpenTelemetryにおけるメトリクスデータは、特定の時点でのサービスに関する測定値から取得された、測定値を集約した時系列データを表します。トレースデータと比較すると、メトリクスデータは粒度の低い情報を提供します。サービスの可用性やパフォーマンスを示すのに役立ちます。メトリクスの例としては、CPUやメモリの使用率、リクエストの継続時間、スループット、エラーレートなどがあります。次のビデオでは、開発者がメトリクスAPIを使ってコードを計装する例を紹介しています。SDKでメータープロバイダーを実装することで、アプリケーションの計装方法とは別に、メトリクス測定を設定することができます。メトリクスAPIOpenTelemetryでは、メトリクスを生成する計装処理を作成するために、メータープロバイダーを初期化する必要があります。OpenTelemetryメトリクスAPIを使うと、属性の形式でメトリックにメタデータを追加することができ、それを使ってデータをファセットすることができます。メトリクスAPIにはmeterProviderがあり、これを使ってメトリクスSDKを使ってメトリクスコレクションを構成することができます。メトリクスAPIは、特定の測定値を取得するために使用されるさまざまなタイプの計測器へのアクセスを提供します。カウンターは時間の経過とともに加算される値です。メトリクスの仕様では、計測器の数が決められていますが、仕様はまだ進化中のため、近いうちに変更される可能性があります。JavaとGoは最も成熟したメトリクスPIを持っています。メトリクスSDKトレースSDKと同様に、メトリクスSDKはアプリケーション開発者が特定のアプリケーションのためにメータープロバイダーを構成することを可能にします。リソースを関連付けたり、メトリクスプロセッサーやエクスポーターのパイプラインを登録することができます。メトリクスプロセッサーは、メトリクス属性のフィルタリングやエンリッチメントに使用します。メトリクスパイプラインには、メトリクスの集約方法を示すアグリゲーターと、バックエンドのオブザーバビリティプラットフォームにデータを送信するエクスポーターも含まれます。OpenTelemetryにおけるログOpenTelemetryプロジェクトの最後のデータタイプは、テレメトリーデータの中でおそらく最もシンプルな形態の一つであるログデータです。これは構造化されたフォーマットのタイムスタンプ付きテキストレコードで、戦略的な属性によってフィルタリングすることができます。OpenTelemetryによるログデータのサポートはまだ非常に初期の段階です。OpenTelemetryでログデータを使用するために2つの戦略が用意されています。言語ごとに存在している、既存のロギングライブラリ向けにエクスポーターを実装し、現在のトレースと関連づけるために拡張機能を利用して、ログデータに追加のコンテキストを提供する方法。ログフォワーダーからOpenTelemetryコレクターへ送信し、バックエンドのオブザーバビリティプラットフォームにエクスポートする方法。次のビデオでは、これら2つのアプローチのアーキテクチャ図を示しています。つの主要なデータソース(トレース、メトリクス、ログ)がどのように機能するか、基本的な理解ができたと思います。データを扱ってみましょう。Engineerソフトウェアエンジニア、インフラエンジニアなど自社開発や自社運用の現場で経験を積んだのち外資系ソフトウェアベンダーでのテクニカルサポートを経て現職。Relicユーザーだった経験あり。Technologies。得意分野はC#をはじめとするソフトウェア開発、Kubernetes関連技術およびパブリッククラウド。株式会社の公式見解であるわけではありません。本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。いかなる保証も提供することはありません。