リファレンスアプリケーションの仕様
このドキュメントは、Getting Started ガイド全体で使用されるリファレンスアプリケーションの仕様を記載しています
リファレンスアプリケーションの目的は、OpenTelemetry SDK が存在するすべての言語で実装できる、標準化されたサンプルアプリケーションを持つことです。
一般的な要件
- リファレンスアプリの実装は、OpenTelemetry の API と SDK を実装する言語 SIG が所有します。 これにより、アプリケーションがその言語のエコシステムのベストプラクティスに従い、アプリケーションの計装方法のブループリントを提供できます。
- アプリケーションには、未計装バージョンと計装済みバージョンの両方が必要です。 これは、opentelemetry.io の「Getting Started」ガイドで、OpenTelemetry を使用していないアプリから完全に計装されたアプリへ移行する手順を示すために使用されます。
- アプリケーションの両バージョンがビルドおよび実行可能であることを検証する、言語固有の CI アクションが必要です。
- アプリケーションはコマンドラインインターフェイスから実行可能でなければなりません。
- コンテナ化された環境でアプリケーションを実行するための Dockerfile が必要です。
- アプリケーションは単独で実行できなければなりません。 つまり、それを格納するリポジトリの他のコンテンツにハード依存を持つことはできません。 これにより、ユーザーは依存関係の管理を解きほぐすことなく、コードを自分のプロジェクトにコピーできます。
サービス要件
- アプリケーションはデフォルトでポート 8080 で HTTP リクエストを待ち受けなければなりません。 ポートは環境変数 APPLICATION_PORT で設定可能にする必要があります。
- HTTP リクエストの処理には、計装ライブラリが利用可能なライブラリを使用する必要があります。
アプリケーションは
GET(およびオプションでPOST)で/rolldice?rolls=<n>エンドポイントを提供し、以下の HTTP ステータスコードと JSON の結果を返さなければなりません。rollsが設定されていないか、有効な入力(0超の正の整数)の場合:ステータスコード200で、rollsが設定されていないか 1 の場合は 1 から 6 までの単一の数値を、それ以外の場合はrollsの値nに対応する 1 から 6 までの数値の配列を返します。rollsが無効な入力(数値でない)に設定されている場合:ステータスコード400で{"status": "error", "message": "Parameter rolls must be a positive integer"}を返します。rollsが0または負の整数に設定されている場合:ステータスコード500で JSON 出力なし。 このエラー例は、OpenTelemetry を使用してエラーを特定する方法を示すために使用されます。
/rolldiceエンドポイントにオプションの属性player=nameを指定できます。- アプリケーションは以下のログ行を出力しなければなりません。
- ステータスコードが
<400の各 HTTP リクエストに対する INFO レベルのメッセージ - ステータスコードが
400から499の各 HTTP リクエストに対する WARN レベルのメッセージ(JSON の結果で送信されるメッセージを含む) - ステータスコードが
499を超える各 HTTP リクエストに対する ERROR レベルのメッセージ - オプションの
player属性が設定されている場合、playerの値とサイコロの出目を出力する DEBUG レベルのメッセージ - オプションの
player属性が設定されていない場合、静的な値anonymous playerとサイコロの出目を出力する DEBUG レベルのメッセージ。 このログ行は、計装中にログブリッジを追加し、OpenTelemetry が既存のロギングフレームワークに接続する方法を示すために使用されます。
- ステータスコードが
- アプリケーションのコードは2つのファイルに分割しなければなりません。
- HTTP リクエストの処理を含む
appファイル - サイコロを振る関数の実装を含む
libraryファイル。 これらのファイル名は、app.jsとroll-the-dice.jsのように、実装言語において慣用的なものにする必要があります。 重要な点は、2つのファイルを分離することで、libraryは API にのみ依存し、すべての SDK コードはappコードで初期化されることを示す点です。
- HTTP リクエストの処理を含む
rollsのエラーハンドリングは以下のように分割する必要があります。appはrollsが定義されているか確認し、定義されていない場合は1に設定します。appはrollsが数値かどうかだけを確認します。 数値であれば、libraryのサイコロを振る関数を呼び出します。 数値でなければ、400エラーでエラーハンドリングを行います。libraryはrollsが正の数かどうかを確認します。 正の数でなければ、例外をスローします。appはそのエラーをキャッチし、500エラーを返します。
libraryには、上記のエラーハンドリングを行う外側の関数が必要です。 外側の関数はrollsの値に応じて以下の処理を行います。rolls == 1:内側の関数を1回実行し、値を返します。rolls > 1:内側の関数をrolls回呼び出すループを実行し、結果を配列で返します。
libraryの内側の関数は 1 から 6 までのランダムな数値を生成し、その値を返します。
計装要件
- 可能であれば、OpenTelemetry SDK の初期化は別ファイルに含め、
appファイル内でインポートする必要があります。 それ以外の場合は、appファイルの一部とします。 process、container、osなど、一般的なリソース検出器を初期化時にロードする必要があります。- 「lib」ファイルは OpenTelemetry API にのみ依存しなければなりません。
service.*属性は環境変数(OTEL_SERVICE_NAME、OTEL_RESOURCE_ATTRIBUTES)で追加する必要があります。- その他の
resource detectorsは SDK の初期化に追加する必要があります。 - テレメトリーのエクスポートには、
stdout/consoleおよびotlpのエクスポーターを使用する必要があります。 - OpenTelemetry コンポーネントの診断ログを有効にするオプションが必要であり、理想的には
OTEL_LOG_LEVELなどを介して実装されるのが望ましいです。 - 使用する HTTP ライブラリに対する計装ライブラリを追加する方法が必要です。 この計装ライブラリは HTTP の安定したセマンティック規約を使用する必要があります。 ほとんどのシグナルをカバーするライブラリが望ましく、理想的にはトレースとメトリクスの両方に対応しているものを選びます。
- 計装ライブラリが利用できない場合にのみ、
appの/rolldiceエンドポイントを処理する関数に対して、ユーザーがスパンとメトリクスを追加して手動で計装します。 - 使用するロギング機構に対するログブリッジを用意し、すべてのログが自動的に収集およびエクスポートされるようにする必要があります。
libraryの外側の関数にスパンを作成する必要があります。 このスパンは関数の所要時間を追跡します。 例外がスローされた場合はそれを記録します。rollsの値やcode.*などの属性をスパンに追加します。libraryの内側の関数にスパンを作成する必要があります。 このスパンは関数の所要時間を追跡します。 生成したランダムな数値を属性としてスパンに追加します。libraryファイルでは以下のメトリクスを作成する必要があります。- 外側の関数の呼び出し回数のカウンター
- 結果(1-6)の分布のヒストグラム
rollsの最終値のゲージ
フィードバック
このページは役に立ちましたか?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!