OpenTelemetry Collector をカスタムビルドする
本番環境では OpenTelemetry Collector Contrib を使用せず、必要なコンポーネントのみを含むようにカスタムビルドすることが推奨されています。この記事では、OpenTelemetry Collector をカスタムビルドする方法について紹介します。
OpenTelemetry Collector は、アプリケーションから収集したトレースやメトリクスを、複数のバックエンドに送信するためのミドルウェアです。アプリケーションから直接バックエンドに送信するのではなく、OpenTelemetry Collector を経由して送信することで、アプリケーションはバックエンドのことを意識する必要がなくなります。また、バッチ処理や機密データのフィルタリングなどデータを処理するコンポーネントを提供しているため、より拡張性の高いデータ収集基盤を構築できます。
開発やテスト目的で OpenTelemetry Collector を使用する場合には、公式に提供されている OpenTelemetry Collector Contrib がよく使われています。OpenTelemetry Collector Contrib はほぼすべてのコンポーネントがあらかじめ含まれているため、簡単に試すことができます。
しかし、本番環境で使用する場合には、不要なコンポーネントが含まれていることによるオーバーヘッドやセキュリティ上のリスクが発生する可能性があります。そのため、本番環境で使用する場合には、必要なコンポーネントのみを含むようにカスタムビルドすることが推奨されています。
この記事では、OpenTelemetry Collector をカスタムビルドする方法について紹介します。
OpenTelemetry Collector Builder(ocb)をインストールする
OpenTelemetry Collector をカスタムビルドするには、OpenTelemetry Collector Builder と呼ばれるビルドツールを使用します。
go install go.opentelemetry.io/collector/cmd/builder@latest
インストールが完了したら、builder
コマンドが使用できるようになります。
builder version
ocb version v0.91.0
マニフェストファイルを作成する
マニフェストファイルを使用して、OpenTelemetry Collector にどのコンポーネントを含めるかを指定します。マニフェストファイルは YAML 形式で記述します。
dist:
name: otelcol-dev
description: Basic OTel Collector distribution for Developers
output_path: ./otelcol-dev
otelcol_version: 0.91.0
exporters:
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.91.0
- gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.91.0
processors:
- gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.91.0
receivers:
- gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.91.0
ここでは、以下の 4 つのコンポーネントを指定しています。
- otlpreceiver: OpenTelemetry プロトコルで受信したトレースやメトリクスを処理する
- batchprocessor: バッチ処理を行う
- prometheusexporter:Prometheus サーバーにメトリックを送信する
- debugexporter: デバッグ用のエクスポーター
OpenTelmetry Collector に含められるコンポーネントは、OpenTelemetry Collector または OpenTelemetry Collector Contrib のリポジトリから探すことができます。
OpenTelemetry Collector をビルドする
マニフェストファイルを作成したら、builder
コマンドを使用して OpenTelemetry Collector をビルドします。
builder --config=manifest.yaml
ビルドが成功した場合、otelcol-dev
というディレクトリが生成されます。
OpenTelemetry Collector を起動する
それでは、ビルドした OpenTelemetry Collector を起動してみましょう。OpenTelemetry Collector の設定ファイルを作成して、先ほどのマニフェストファイルで指定したコンポーネントを使用するように設定します。
receivers:
otlp:
protocols:
grpc:
processors:
batch:
exporters:
prometheus:
endpoint: "0.0.0.0:8889"
debug:
service:
pipelines:
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheus, debug]
設定ファイルを作成したら、以下のコマンドで OpenTelemetry Collector を起動します。
cd otelcol-dev
./otelcol-dev --config=config.yaml
起動が成功した場合、以下のようなログが出力されます。
2023-12-20T21:22:37.350+0900 info [email protected]/telemetry.go:86 Setting up own telemetry...
2023-12-20T21:22:37.351+0900 info [email protected]/telemetry.go:203 Serving Prometheus metrics {"address": ":8888", "level": "Basic"}
2023-12-20T21:22:37.352+0900 info [email protected]/exporter.go:275 Development component. May change in the future. {"kind": "exporter", "data_type": "metrics", "name": "debug"}
2023-12-20T21:22:37.352+0900 info [email protected]/service.go:145 Starting otelcol-dev... {"Version": "1.0.0", "NumCPU": 8}
まとめ
- OpenTelemetry Collector Contrib は、ほぼすべてのコンポーネントが含まれているため、開発やテスト目的で使用する場合には便利だが、本番環境で使用する場合には不要なコンポーネントが含まれていることによるオーバーヘッドやセキュリティ上のリスクが発生する可能性があるため推奨されていない
- 本番環境で使用する場合には、必要なコンポーネントのみを含むようにカスタムビルドすることが推奨されている
- OpenTelemetry Collector Builder を使用することで、必要なコンポーネントのみを含むようにカスタムビルドできる
- マニフェストファイルを使用して、OpenTelemetry Collector にどのコンポーネントを含めるかを指定する