otlpxy — 軽量OTLPプロキシサービス
概要
otlpxyは、OTLP(OpenTelemetry Protocol)を受け取ってOpenTelemetry Collectorへ転送するための非常にシンプルで運用向けのプロキシです。ブラウザや各種サービスからのログ/トレース送信を受け、指定のAPIキーを注入してCollectorに中継します。転送は非同期で行われ、有界ワーカープールによりキューが満杯のときはバックプレッシャーを掛けて過負荷を防ぎます。さらに /healthz, /readyz といったプローブ、/metrics によるPrometheus互換のメトリクス、CORS対応やリクエストサイズ制限など、本番環境で求められる機能をコンパクトにまとめています。
リポジトリの統計情報
- スター数: 12
- フォーク数: 0
- ウォッチャー数: 12
- コミット数: 3
- ファイル数: 17
- メインの言語: Go
主な特徴
- 非同期転送(有界ワーカープール)によるバックプレッシャー制御
- ヘルス (/healthz) とレディネス (/readyz) プローブ実装
- Prometheus互換の /metrics(HTTPメトリクス・キュー深度など)
- CORS対応、リクエストサイズ制限、APIキー注入による安全性向上
技術的なポイント
otlpxyはGoで実装されており、HTTPサーバーとシンプルなワーカーキューで構成されています。受信したOTLPリクエストはまずエンドポイント(通常はOTLP HTTPのパス)で受け取られ、内部キューへ格納されます。キューは有界(バッファ付きチャネル等)になっており、満杯の場合は新たな受信を弾く、もしくは適切なHTTPステータスでバックプレッシャーを返す設計です。これにより下流のCollectorが遅延している状況でもメモリや接続数の爆発を防げます。
ワーカーは複数のゴルーチンで構成され、キューからジョブを取り出して非同期にCollectorへ転送します。転送時にはあらかじめ設定したAPIキーをHTTPヘッダへ注入することで認証情報を付与し、Collector側での一元的なレート管理や課金対応を簡素化します。HTTP周りはCORSミドルウェアやリクエストサイズ制限を備え、ブラウザからの直接送信や不正な大容量リクエストを防止します。
運用性のためのエンドポイントとして /healthz と /readyz を提供し、コンテナオーケストレーション(Kubernetes等)でのライフサイクル管理に適しています。/metrics はPrometheusフォーマットで公開され、HTTPリクエスト数・レイテンシやワークキューの深さ(queue depth gauge)などが取得可能で、可観測性を高めています。構成は環境変数や簡易的な設定ファイルで管理される想定で、Dockerfileも用意されているためコンテナ化して容易にデプロイできます。小規模で目的特化したプロキシを求めるケースに適した設計です。
プロジェクトの構成
主要なファイルとディレクトリ:
- .dockerignore: file
- .gitignore: file
- CODEOWNERS: file
- CONTRIBUTING.md: file
- Dockerfile: file
…他 12 ファイル
まとめ
小さく単機能に特化したOTLPプロキシを素早く導入したい場合に有用です。