Collector でパイプラインを組む
🐱 この章の目次
Collector のアーキテクチャ
OTel Collector は、テレメトリーデータの受信・加工・転送を担うスタンドアロンのプロセスです。 アプリケーションとバックエンドの間に配置することで、エクスポート先の切り替えやデータ加工をアプリ側に影響なく行えます。
Collector の内部は 4 つのコンポーネントで構成されます。
| コンポーネント | 役割 |
|---|---|
| Receiver | データの受信(OTLP, Prometheus, Jaeger など) |
| Processor | バッチ化、フィルタリング、属性の追加・削除 |
| Exporter | バックエンドへのデータ送信 |
| Pipeline | Receiver → Processor → Exporter の接続定義 |
設定ファイル
Collector の設定は YAML で記述します。 以下はトレースを OTLP で受信し、Jaeger と Collector のログに出力する最小構成です。
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch:
timeout: 5s
send_batch_size: 512
memory_limiter:
check_interval: 1s
limit_mib: 512
exporters:
otlp/jaeger:
endpoint: jaeger:4317
tls:
insecure: true
prometheus:
endpoint: 0.0.0.0:8889
otlp/loki:
endpoint: loki:3100
tls:
insecure: true
service:
pipelines:
traces:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [otlp/jaeger]
metrics:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [prometheus]
logs:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [otlp/loki]
Processor の役割
batch プロセッサー は、個別のテレメトリーをまとめて送信することでネットワーク効率を高めます。
send_batch_size と timeout のいずれかの条件を満たすとバッチが送出されます。
memory_limiter プロセッサー は、Collector のメモリ使用量を制限し、OOM を防止します。 上限に達するとデータの受信を一時的に拒否し、バックプレッシャーをかけます。 本番環境では必ず先頭に配置してください。
Docker Compose での起動
ローカル開発では Docker Compose で Collector を起動するのが手軽です。
services:
otel-collector:
image: otel/opentelemetry-collector-contrib:0.104.0
command: ["--config", "/etc/otel/config.yaml"]
volumes:
- ./otel-collector-config.yaml:/etc/otel/config.yaml
ports:
- "4317:4317" # OTLP gRPC
- "4318:4318" # OTLP HTTP
- "8889:8889" # Prometheus metrics
contrib イメージには多数の Receiver/Exporter が同梱されているため、開発・検証用途に適しています。
本番では必要なコンポーネントだけを含むカスタムビルドを推奨します。