aws-otel-collectorのバージョンアップでotelへのメトリクス送信ができなくなった
EKSのバージョンを1.29から1.32にアップデートする際、otel collectorとして使用していたaws-otel-collectorのバージョンをv0.35.0からv0.41.2にアップデートしたところ、otelへのメトリクス送信が正常に行われなくなりました。
調査
otel-collector podにdebug podをアタッチし、netstatコマンドでポートの状態を確認しました。
v0.35.0 (EKS 1.29): :::4318 (全アドレスにバインド)
v0.41.2 (EKS 1.32): 127.0.0.1:4318 (ローカルホストにのみバインド)
この結果から、aws-otel-collectorのバージョンアップによってotel-collectorのバインドアドレスが変わったことが分かりました。
原因
otel v0.104.0でデフォルトのbind addressがlocalhostに変更されていました(参考)。
aws-otel-collectorの各バージョンにバンドルされているotelcolのバージョンは以下の通りです。
EKS 1.29環境で導入していたaws-otel-collector:v0.35.0では、otelcolのバージョンが0.88.0であり、デフォルトのバインドアドレスは全アドレスでした。
一方、EKS 1.32環境で導入したaws-otel-collector:v0.41.2では、otelcolのバージョンが0.109.0であり、デフォルトのバインドアドレスがlocalhostに変更されています。
aws-otel-collectorの設定ファイルでは、endpointを指定していませんでした。
# otel-collector config
receivers:
otlp:
protocols:
http:
そのため、aws-otel-collectorのバージョンアップによってotel-collectorのバインドアドレスが変更され、メトリクス送信が失敗するようになりました。
解決策
aws-otel-collectorの設定ファイルで、endpointを明示的に指定します。
receivers:
otlp:
protocols:
http:
endpoint: "[::]:4318"
これにより、otel-collectorは全アドレスにバインドされるようになり、メトリクスの送信が正常に行われるようになりました。
まとめ
aws-otel-collectorのバージョンアップを行う際は、otel-collectorのバインドアドレスの変更に注意する必要があります。特に、otel v0.104.0以降ではデフォルトのバインドアドレスがlocalhostに変更されているため、endpointを明示的に指定することを推奨します。