OpenTelemetry基本設定パターン - 環境別の推奨設定 ​

OpenTelemetryを実際に導入する際、環境に応じた適切な設定は非常に重要です。開発環境では詳細なトレースデータが必要ですが、本番環境ではコストとパフォーマンスのバランスを考慮した設定が求められます。本記事では、環境別の推奨設定パターン、効果的なサンプリング戦略、リソース属性の管理方法について解説します。

環境別設定パターン ​

OpenTelemetryの設定は、システムの環境によって大きく異なります。開発環境では詳細な情報収集を優先し、本番環境ではコスト効率とパフォーマンスを重視します。

開発環境での推奨設定 ​

開発環境では、すべてのテレメトリデータを収集して、アプリケーションの動作を完全に把握することが目標です。

開発環境での設定では、エクスポート先をローカルホストに設定し、収集周期を短めに設定します。これによって、開発中のデバッグが効率的になります。

bash
# OpenTelemetry Collector への接続設定
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
export OTEL_EXPORTER_OTLP_TIMEOUT=10s

# サンプリング:すべてのトレースを収集
export OTEL_TRACES_SAMPLER=always_on

# リソース属性の設定
export OTEL_SERVICE_NAME=my-service
export OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=development

開発環境では always_on というサンプラーを使用して、全トレースを処理します。この設定により、問題の特定やデバッグが容易になります。ただし、ローカル開発マシンのリソースに余裕がない場合は、サンプリングレートを調整することも検討してください。

開発環境での設定のポイントは、アプリケーションの動作確認を優先することです。タイムアウト値は短めに設定し、データが迅速に収集できるようにします。

本番環境での推奨設定 ​

本番環境では、セキュリティ、コスト効率、パフォーマンスのバランスを考慮した設定が必要です。

本番環境では、HTTPSプロトコルを使用してセキュアな通信を実現し、タイムアウト値を長めに設定してネットワーク遅延に対応します。

bash
# OpenTelemetry Collector への接続設定(HTTPS)
export OTEL_EXPORTER_OTLP_ENDPOINT=https://collector.production.example.com:4318
export OTEL_EXPORTER_OTLP_TIMEOUT=30s

# TLS証明書の設定
export OTEL_EXPORTER_OTLP_CERTIFICATE=/etc/ssl/certs/ca.crt

# サンプリング:10%のトレースを収集
export OTEL_TRACES_SAMPLER=parentbased_traceidratio
export OTEL_TRACES_SAMPLER_ARG=0.1

# リソース属性の設定
export OTEL_SERVICE_NAME=my-service
export OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=production,service.version=1.2.3

本番環境では、HTTPSを使用してセキュアな通信を確保します。また、TLS証明書パスを明示的に指定することで、認証が適切に行われるようにします。タイムアウト値を30秒に設定することで、ネットワークの遅延やコレクターの処理待ち時間に余裕を持たせます。

本番環境でのサンプリング設定では、システムのトラフィック量に応じて調整が必要です。毎秒1000トレースを超えるような高トラフィックシステムでは、より積極的なサンプリングを検討してください。

サンプリング戦略 ​

サンプリングは、テレメトリデータの量を削減し、収集・保存・分析のコストを低減させる重要な機能です。適切なサンプリング戦略を選択することで、コストと監視の精度のバランスを取ることができます。

サンプリング方式の比較 ​

ヘッドサンプリング は、トレース開始時点でサンプリング判定を行うため、実装が簡単で低オーバーヘッドです。開発環境から小規模なシステムまで、幅広く利用できます。

テールサンプリング は、トレース全体を評価してから判定するため、エラーを含むトレースを確実にキャッチできます。しかし、実装が複雑で、コレクターに高い負荷がかかるため、大規模システムでのみ検討する価値があります。

トラフィック量に応じたサンプリング設定 ​

トラフィック量推奨サンプリング方式推奨サンプリングレート利用シーン
低い(秒単位10トレース未満)Probabilistic Sampling100% (always_on)開発環境、小規模サービス
中程度(秒単位100-1000トレース)TraceID Ratio10-50%成長期の中規模サービス
高い(秒単位1000+トレース)TraceID Ratio + Tail Sampling1-10%大規模・高トラフィック
可視性重視Parent-Based状況に応じて調整特定トレースの詳細追跡

トラフィック量が秒単位で10トレース未満であれば、すべてのデータを収集できます。毎秒100から1000トレースのシステムでは、10~50%のサンプリングレートが一般的です。さらに高トラフィックなシステムでは、1~10%に低下させることもあります。

Parent-Based サンプリングの活用 ​

Parent-Based方式は、親スパンのサンプリング決定を引き継ぐ方法です。これにより、分散トレースの整合性を保証できます。

bash
# Parent-Based Trace ID Ratio: 親がサンプルなら子もサンプル、
# 親がサンプルでなければ子もサンプルでない
export OTEL_TRACES_SAMPLER=parentbased_traceidratio
export OTEL_TRACES_SAMPLER_ARG=0.1

この設定により、親スパンがサンプル対象であれば、その子孫スパンもすべてサンプル対象になります。逆に親がサンプル対象でなければ、子孫もサンプル対象になりません。この方式により、トレース全体の一貫性が保たれます。

リソース属性の設定 ​

リソース属性は、テレメトリデータを生成するサービスのメタデータです。これらの属性により、トレース・メトリクスをどのサービスが生成したかを特定でき、デバッグや分析が効率的になります。

重要なリソース属性 ​

オペレーティングシステムやホスト情報は、OpenTelemetry SDKによって自動検出されます。しかし、サービス特有の情報は明示的に設定する必要があります。

service.name(必須)はサービスの識別名です。監視バックエンドでサービスを区別するために必要な属性で、デフォルトは unknown_service となります。必ず明示的に設定してください。

service.version はアプリケーションのバージョンです。これを設定することで、デプロイ後のテレメトリデータの変化を追跡できます。

deployment.environment.name は環境を示す属性です。development、staging、productionなどの値を指定します。これにより、環境ごとのデータを分別できます。

環境変数でリソース属性を設定する場合は、以下のようにします。

bash
export OTEL_SERVICE_NAME=order-service
export OTEL_RESOURCE_ATTRIBUTES=\
  service.version=1.2.3,\
  deployment.environment.name=production,\
  service.instance.id=order-svc-001

複数の属性をカンマ区切りで指定できます。この方法により、環境変数での設定が容易になります。

自動検出される属性 ​

OpenTelemetry SDKは以下の情報を自動的に検出します。

  • ホスト情報:ホスト名、オペレーティングシステム
  • プロセス情報:プロセスID、実行時間
  • コンテナ情報:コンテナID、イメージ名
  • Kubernetes情報:ポッド名、ネームスペース、デプロイメント名
  • クラウド情報:クラウドプロバイダー、リージョン、インスタンスID

これらの属性は自動的に収集されるため、追加の設定は不要です。Kubernetesでの実行時には、特にポッド名とネームスペースが有用なメタデータとなります。

開発環境から本番環境への段階的な設定変更 ​

実装を進める過程で、設定を段階的に調整することが一般的です。

初期開発では always_on サンプリングですべてのデータを収集し、アプリケーションの動作を完全に理解することから始めます。その後、パフォーマンステストで問題が明確になれば、本番に向けてサンプリングレートを調整します。

ステージング環境では、本番に近い設定を試験できます。ここで実際のトラフィック量下での動作確認、コストの見積もり、アラート設定の検証を行います。最後に、本番環境へ段階的にロールアウトすることで、予期しない問題を最小限に抑えることができます。

OpenTelemetryの設定は、システムの成長に応じて継続的に見直す必要があります。定期的にサンプリングレートやリソース属性を確認し、監視の有効性とコストのバランスを保つことが重要です。