otlpxy — 軽量OTLPプロキシサービス

DevOps

概要

otlpxyは、OTLP(OpenTelemetry Protocol)を受け取ってOpenTelemetry Collectorへ転送するための非常にシンプルで運用向けのプロキシです。ブラウザや各種サービスからのログ/トレース送信を受け、指定のAPIキーを注入してCollectorに中継します。転送は非同期で行われ、有界ワーカープールによりキューが満杯のときはバックプレッシャーを掛けて過負荷を防ぎます。さらに /healthz, /readyz といったプローブ、/metrics によるPrometheus互換のメトリクス、CORS対応やリクエストサイズ制限など、本番環境で求められる機能をコンパクトにまとめています。

GitHub

リポジトリの統計情報

  • スター数: 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プロキシを素早く導入したい場合に有用です。