AWS Distro for OpenTelemetry (ADOT) Collector の運用
ADOT collector は、CNCF による OpenTelemetry Collector のダウンストリームディストリビューションです。
お客様は ADOT Collector を使用して、オンプレミス、AWS、その他のクラウドプロバイダーなど、さまざまな環境からメトリクスやトレースなどのシグナルを収集できます。
実際の環境で ADOT Collector を大規模に運用するためには、オペレーターは Collector の健全性を監視し、必要に応じてスケールする必要があります。このガイドでは、本番環境で ADOT Collector を運用するために取るべきアクションについて学びます。
デプロイメントアーキテクチャ
要件に応じて、検討すべきデプロイメントオプション がいくつかあります。
- コレクターなし
- エージェント
- ゲートウェイ
これらの概念の詳細については、OpenTelemetry のドキュメントを参照してください。
コレクターなし
このオプションは、コレクターを完全に除外します。ご存知かもしれませんが、OTEL SDK から宛先サービスに直接 API 呼び出しを行い、シグナルを送信することが可能です。 例えば、ADOT Collector のようなプロセス外エージェントにスパンを送信する代わりに、アプリケーションプロセスから直接 AWS X-Ray の PutTraceSegments API を呼び出すことを考えてみてください。
このアプローチに関するガイダンスは AWS 固有の側面がないため、より詳細な情報については、アップストリームのドキュメントのセクションを参照することを強くお勧めします。
エージェント
このアプローチでは、コレクターを分散方式で実行し、シグナルを各送信先に収集します。No Collector
オプションとは異なり、ここでは関心を分離し、アプリケーションがリモート API コールにリソースを使用する必要性を切り離し、代わりにローカルでアクセス可能なエージェントと通信します。
基本的に、Amazon EKS 環境では、以下のように コレクターを Kubernetes のサイドカーとして実行します:
上記のアーキテクチャでは、コレクターがアプリケーションコンテナと同じ Pod で実行されているため、localhost
からターゲットをスクレイピングすることになり、サービスディスカバリーメカニズムを使用する必要はありません。
同じアーキテクチャはトレースの収集にも適用されます。ここに示すように、OTEL パイプラインを作成するだけです。
メリットとデメリット
-
この設計を支持する 1 つの論点は、ターゲットが localhost のソースに限定されているため、Collector が処理を行うために特別な量のリソース (CPU、メモリ) を割り当てる必要がないことです。
-
このアプローチを使用する際のデメリットは、Collector Pod の設定のバリエーション数が、クラスター上で実行しているアプリケーションの数に比例することです。 つまり、Pod の予想されるワークロードに応じて、CPU、メモリ、その他のリソース割り当てを Pod ごとに個別に管理する必要があります。 これを慎重に行わないと、Collector Pod に対するリソースの過剰割り当てや過少割り当てが発生し、パフォーマンスの低下や、他の Pod が使用できるはずの CPU サイクルとメモリの占有につながる可能性があります。
また、ニーズに応じて Deployments、Daemonset、Statefulset などの他のモデルで Collector をデプロイすることもできます。