OpenTelemetryは、CNCF(Cloud Native Computing Foundation)が推進する観測性(Observability)のためのオープンソースプロジェクトであり、分散型システムの監視・トレーシング・メトリクス収集を実現するためのフレームワークとして注目されています。しかし、大量のOpenTelemetry Collectorを管理する際には、動的な構成管理やリアルタイムな狀態監視、スケーラビリティの確保が課題となります。この記事では、OpAMP(Open Agent Management Protocol)とSupervisorを活用したOpenTelemetry Collectorの管理アーキテクチャについて解説します。OpAMPは、遠隔地から大量の観測代理を制御するためのネットワークプロトコルであり、Supervisorはその実裝を擔う中央管理コンポーネントです。
OpAMPは、OpenTelemetry Agent(Collector)と管理サーバー間で動的な構成更新や狀態管理を行うためのネットワークプロトコルです。HTTPとWebSocketをサポートし、クライアントとサーバー雙方にSDKが提供されています。このプロトコルにより、管理サーバーはAgentの狀態を協調し、構成ファイルの送信、アップデートパッケージの配布、コマンドと制御機能を実現します。
Supervisorは、OpAMPプロトコルを介してOpenTelemetry Collectorを管理する中央コンポーネントです。Collector自體はOpAMPを直接処理せず、Supervisorが獨立して管理します。Supervisorは、Collectorの構成を設定し、狀態を監視し、ログを収集し、遠隔地からの構成更新を処理します。また、Collectorの可用性を確認し、必要なアクションを実行します。
WebSocket接続を維持し、負荷分散器が空き接続を終了しないようにするため、心拍メカニズムが導入されています。管理サーバーではデフォルトの心拍間隔を設定し、Agent側では心拍能力を設定可能です。
プロトコルに定義されていない機能を追加するため、両方のエンドポイントがカスタム能力(capability)をサポートする必要があります。例えば、管理サーバーがサービス発見リクエストを送信し、Agentが監視可能なサービスリストを返すことができます。カスタムメッセージは、メッセージタイプとデータフォーマットを明確に定義し、プロトコル拡張に登録する必要があります。
Agentはコンポーネントハッシュを管理サーバーに送信し、サーバーがコンポーネントリストを要求して構成の互換性を確認します。異なるコンポーネントバージョンに応じて、OTLP受信器やファイルログコンポーネントなどの構成オプションを提供します。
CollectorはOpAMPを直接処理せず、Supervisorが獨立して管理します。Supervisorは管理サーバーと通信し、Collectorの構成を設定し、狀態を監視します。Collectorの健康情報、コンポーネントリスト、実行中の構成、Pipelineの狀態を収集し、ログを指定されたテレメトリバックエンドに転送します。
開発者はカスタム拡張(例:サービス発見)を登録し、OpAMP拡張モジュールに登録します。メッセージ処理フローでは、管理サーバーがカスタムメッセージをSupervisorに送信し、SupervisorがCollector內のOpAMP拡張に転送します。拡張は能力名に基づいてメッセージを対応するコンポーネントに配布し、処理結果を管理サーバーに返します。
管理サーバーが構成をSupervisorに送信し、SupervisorがCollectorを再起動して新しい構成を適用します。Collectorは構成を保存し、実行狀態を更新します。管理サーバーはAgentの屬性(例:host.arch
)に基づいて特定のCollectorに選択的に構成を更新できます。
OpAMPとSupervisorは、OpenTelemetry Collectorをスケーラブルに管理するための強力なアーキテクチャです。動的な構成更新、狀態監視、カスタム機能拡張により、複雑な環境での観測性を実現できます。今後の改善方向として、熱負荷の構成更新、カスタム能力の互換性向上、Kubernetesとの統合が挙げられます。これらの技術は、CNCFのエコシステム內でさらに発展し、分散型システムの監視をより効率的に行えるようになります。