Prometheus への OTLP メトリクスエクスポート

はじめに

Prometheus はプルベースの監視向けに設計・最適化されており、ターゲットを検出し、メトリクスエンドポイントを定期的にスクレイプします。 このモデルはアーキテクチャの中核であり、サービスディスカバリや一貫したターゲットベースの収集などの機能をサポートしています。

OpenTelemetry の普及に伴い、新しいバージョンの Prometheus では OTLP によるプッシュベースのメトリクス受信がサポートされるようになりました。 このセットアップでは、OpenTelemetry SDK が OTLP over HTTP を使用してメトリクスをエクスポートし、Prometheus はメトリクスをスクレイプするかわりに OTLP レシーバーとして動作します。 このアプローチは、シンプルなセットアップ、実験、またはローカル開発環境で使用できます。 ただし、OpenTelemetry を使用した本番デプロイメントでは、仲介として OpenTelemetry Collector を使用することを強く推奨します。

このガイドでは、OpenTelemetry SDK から Prometheus の OTLP エンドポイントへの直接的な OTLP メトリクスエクスポートの設定方法を説明します。 必要な環境変数、エクスポーターの設定、およびサービスの識別、エクスポート間隔、運用上のトレードオフなどの重要な考慮事項について説明します。

前提条件

始める前に、以下の要件を満たしていることを確認してください。

Prometheus のセットアップが完了したら、アプリケーションが OTLP インジェスションエンドポイントに直接メトリクスを送信するよう設定できます。

環境変数を使用する

OpenTelemetry SDK と計装ライブラリは、標準の環境変数で設定できます。 アプリケーションを起動する前に環境変数を設定してください。 以下の OpenTelemetry 変数は、localhost 上の Prometheus サーバーに OpenTelemetry メトリクスを送信するために必要です。

export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://localhost:9090/api/v1/otlp

メトリクスのみが必要な場合は、Prometheus を使用する際にトレースとログをオフにします。

export OTEL_TRACES_EXPORTER=none
export OTEL_LOGS_EXPORTER=none

OpenTelemetry メトリクスのデフォルトのプッシュ間隔は60秒です。 これは監視要件に応じて調整できます。 たとえば、15秒の間隔は、ネットワークと処理のオーバーヘッドが増加するかわりに、より応答性の高いメトリクスとより迅速なアラートを提供します。

export OTEL_METRIC_EXPORT_INTERVAL=15000

計装ライブラリが service.nameservice.instance.id をすぐに提供しない場合は、これらを設定することを強く推奨します。 これらの属性がないと、サービスの確実な識別やインスタンスの区別が困難になり、デバッグや集約が大幅に難しくなります。 以下の例は、uuidgen コマンドがシステムで利用可能であることを前提としています。

export OTEL_SERVICE_NAME="my-example-service"
export OTEL_RESOURCE_ATTRIBUTES="service.instance.id=$(uuidgen)"

テレメトリーを設定する

言語 SDK のドキュメントの OTLP セットアップと同じ exporterreader を使用するように OpenTelemetry の設定を更新します。 環境変数が正しくセットアップされロードされていれば、OpenTelemetry SDK はそれらを自動的に読み取ります。