> Source: https://www.ymotongpoo.com/works/oteps/otep-0007/


# OTEP-0007: APIから帯域外テレメトリーをレポートする機能を削除する

## TL;DR

この節では、このRFCで提案されているすべての変更点を要約します。

1. 帯域外テレメトリーを報告するためのAPI要件を削除します。
2. ResourceをSDKに移動します。APIは常に現在のアプリケーションのテレメトリーをレポートするので、計装でResourceを設定する必要はありません。
3. 新しい API はこの要件なしで設計されるべきです。

## 動機

現在、APIパッケージは帯域外テレメトリーのレポートをサポートすることを目標に設計されていますが、この要件は多くのトレードオフと不必要な複雑なAPIを強います（たとえば、テレメトリーをテレメトリーのソースと関連付けることを可能にするために、APIパッケージで `Resource` を公開しなければならない）。

帯域外テレメトリーの報告は、OpenTelemetryエコシステムには必須ですが、これはAPIパッケージを使用する必要のない、いくつかの他のオプションで行うことができます。

* OpenTelemetryサービスを使えば、OpenTelemetryデータを解析して生成するシンプルな[レシーバー][otelsvc-receiver]を書くことができます。
* SDK のエクスポーターフレームワークを使えば、ユーザーは OpenTelemetryデータを直接書くことができます。

## 内部の詳細

以下は、帯域外レポートのサポートに関する決定事項とトレードオフのリストです。

1. APIに `Resource` の概念を追加します。

   * メトリクスを作成する例で、ユーザーがリソースを指定できるようにする必要があります。[ここ][create-metric]を参照してください。
     計装を書く開発者は、監視対象のリソースがどこに配置されているか知らないので、適切なリソースを設定する方法がありません。

2. [RFC](./trace/0002-remove-spandata.md)は SpanData を報告するサポートを削除しました。

   * これは、トレースAPIがAPI経由で設定可能なすべてのフィールドをサポートしなければならないことを要求します。
     たとえば、ユーザーが事前に生成した `SpanId` を設定できるようにする必要がありますが、これは帯域外レポートをサポートしなければ避けられる要件です。

3. 帯域外スパンのサンプリングロジックは非常に複雑になります。
   これらのデータをサンプリングすることが正しくなくなるためです。
4. テレメトリーのソースとテレメトリーデータの関連付けは非常に簡単になります。
   API実装の1つのインスタンスによって生成されたすべてのデータは、ただ1つのアプリケーションに属します。

これは、「1つのAPI実装インスタンス」が、現在のアプリケーションのみに関するテレメトリーをレポートできると言い換えることができます。

### リソース（`Resource`）の変更

このRFCは `Resource` の概念を削除したり、このインターフェースのAPIを変更することを提案しているのではなく、この概念をSDKレベルに移動することを提案しているだけです。

API（OpenTelemetryの場合はSDK）の各インスタンスは、実行中のアプリケーションを記述する1つの `Resource` を持ちます。
同じバイナリ内で複数のアプリケーションが動作している場合（Java アプリケーションサーバーなど）、それぞれのアプリケーションは独自の `Resource` で構成された SDK インスタンスを持つことになります。

## 関連する問題

* [opentelemetry-specification/62](https://github.com/open-telemetry/opentelemetry-specification/issues/62)
* [opentelemetry-specification/61](https://github.com/open-telemetry/opentelemetry-specification/issues/61)

[otelsvc-receiver]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/receiver/README.md
[create-metric]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/api.md#get-a-meter
