Diary of a Perpetual Student

Perpetual Student: A person who remains at university far beyond the normal period

OpenTelemetryコレクターのOTLP Exporterをotlpではなくotlp_grpcとして呼ぶように変わる話(そしてそのうち他のコンポーネントでも……)

2026年1月20日のOpenTelemetryコレクター v1.50.0/v0.144.0のリリースノートにこのようなことが書かれていました。

exporter/otlp_grpc: Rename otlp exporter to otlp_grpc exporter and add deprecated alias otlp. (#14403)
exporter/otlp_http: Rename otlphttp exporter to otlp_http exporter and add deprecated alias otlphttp. (#14396)

OpenTelemetryコレクターからOTLP/gRPCでテレメトリーを送信するにはOTLP/gRPC Exporterを利用し、このとき、これまでは設定ファイルのexporter欄にotlpというキーで設定を記述していました。このとき、これからはotlpではなくotlp_grpcと書くのが正しく、古い名前が非推奨となる、と書かれています。OTLP/http Exporterの場合も同様にotlphttpからotlp_httpに名前が変わります。

exporters:
  # これまで
  otlp:
    endpoint: backend:4317
  # OTelCol v0.144.0以降は
  otlp_grpc:
    endpoint: backend:4317

なぜこのような変更がなされたのか、背景を追ってみましょう。

OpenTelemetryコレクターのコンポーネントに命名規約が定まる

以下のIssueにこの件に関する議論があります:

github.com

これまで、コンポーネントの命名は以下の2パターンに分かれていました:

  • アンダースコア区切り
    • memory_limiter
    • tail_sampling
  • すべて小文字でそのまま連結する
    • otlphttp
    • awsxray
    • resourcedetection

現時点では後者のパターンのほうが多いように感じます。Go言語の慣習でパッケージ名をアンダースコアで区切らないことに引きずられているのでしょう。

このような命名規則に一貫性がない状態では、エンドユーザーから見て分かりにくいという問題意識がありました。

議論を経て、エンドユーザー目線での設定の読みやすさの観点などから、アンダースコア区切りを慣習とする採択がされました。また、既存のコンポーネントに関してもこの規約に従うように改名するが、下位互換性のためaliasとして古い名前でも利用できるようにするべきとされました。OpenTelemetryコレクターのコーディングガイドラインにもこの内容が反映されています*1

その結果、まずはopen-telemetry/opentelemetry-collectorリポジトリに存在するコンポーネントについて、新しいコンポーネント命名ルールに従って改名がなされたというのが、冒頭に挙げたリリースノートの内容になります。

利用者はどうすればいいのか

公式で配布されているOpenTelemetryコレクターのイメージやバイナリを利用している場合は、使用しているバージョンを確認してください。v0.144.0より前の場合には特に何もすることはありません。

v0.144.0以上に上げた場合、OTLP Exporterの部分については基本的には同じ設定で動くと思われますが、起動時に以下のようなwarningログが表示されます:

2026-01-27T12:43:54.628Z        warn    builders/builders.go:40 "otlp" alias is deprecated; use "otlp_grpc" instead {"resource": {"service.instance.id": "4c83c942-49d5-4fad-a5f6-74a1b3c099ee", "service.name": "otelcol", "service.version": "0.144.0"}, "otelcol.component.id": "otlp", "otelcol.component.kind": "exporter", "otelcol.signal": "traces"}

メッセージ通りに設定ファイルで使っている命名を新しいものに変えて起動すると、warningが表示されないようになるはずです。

ocbで独自ビルドしていたり、サードパーティでビルドされているOpenTelemetryコレクターディストリビューションを利用していたりする場合には、依存しているotlpexporter、otlphttpexporterのバージョンを確認しましょう。v0.144.0以上ならば同様の対応が必要になります。ocbのmanifestファイルを見るのが一般的だと思います。

Mackerel OpenTelemetryコレクターで、すでに改名後のotlpexporter、otlphttpexporterをbundleしていることがわかる様子:

  - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.144.0
  - gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.144.0

🔗 https://github.com/mackerelio/opentelemetry-collector-mackerel/blob/d323a57502715132a73cc86f43785983877c73e2/distributions/otelcol-mackerel/manifest.yaml#L11-L12

コンポーネント開発者はどうすればいいのか

既存のコンポーネントについて新しい命名に移行する方法がコーディングガイドラインに記載されているので、これに従いましょう:

  • SHOULD add the lower_snake_case name as the primary identifier
  • MAY support the old name as a deprecated alias for backwards compatibility
  • MUST document the migration path in their README

https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/coding-guidelines.md#migration-for-existing-components

古い名前を非推奨なaliasとしてサポートするには、コンポーネントのFactoryを生成するところで以下のようにoptionを渡す必要があります:

 func NewFactory() exporter.Factory {
    return xexporter.NewFactory(
        metadata.Type,
        createDefaultConfig,
+       xexporter.WithDeprecatedTypeAlias(component.MustNewType("mackerelotlp")),
        xexporter.WithTraces(createTraces, metadata.TracesStability),
        xexporter.WithMetrics(createMetrics, metadata.MetricsStability),
    )
 }

🔗https://github.com/mackerelio/opentelemetry-collector-mackerel/blob/5dab1d0caf081ae4efe73f7590f051304bfcad42/exporter/mackerelotlpexporter/factory.go#L26

今後の動き

open-telemetry/opentelemetry-collectorリポジトリだけではなく、open-telemetry/opentelemetry-collector-contribに含まれるコンポーネントでも同様に改名していく動きが進んでいくものと思われます。

実際に、改名に対応するためのIssueがすでに作られています。ルールに従った新しい命名の案が表で出されているのが興味深い情報でした。

github.com