NGINX 向けに、 OpenTelemetry と Instana を連携させる
OpenTelemetry を、 NGINX および IBM Instana Observabilityと組み合わせて使用することで、 NGINX Webサーバーに対して分散トレーシングとオブザーバビリティ機能を実現できます。
サポート対象のオペレーティング・システム
OpenTelemetry この統合機能は、 Linux オペレーティングシステムでのみサポートおよびテストされています。
前提条件
OpenTelemetry を Instana と連携させるには、以下のコンポーネントが必要です:
- NGINX Webサーバー( 1.25.3 以降のバージョンを推奨します。それ以前のバージョンでは、ソースから NGINX OpenTelemetry モジュールをビルドする必要があります)
- OpenTelemetry NGINX モジュールまたは計測
- 有効な IBM の Instana Observabilityアカウント
OpenTelemetry の NGINX モジュールのインストール
NGINX の公式モジュール「 OpenTelemetry 」ngx_otel_moduleは、動的モジュールとして利用可能です。 このモジュールに関する詳細については、 NGINX OpenTelemetry のモジュールドキュメントを参照してください。
「 NGINX 」モジュール( OpenTelemetry )をインストールします。
ほとんどの Linux ディストリビューションでは、 NGINX リポジトリからこのモジュールをインストールできます:
# For Ubuntu or Debian sudo apt-get install nginx-module-otel # For RHEL or CentOS sudo yum install nginx-module-otelあるいは、ソースコードから OpenTelemetry モジュールを使用して NGINX をビルドすることもできます。 ビルドの手順については、『 NGINX 』のドキュメントを参照してください。
NGINX を設定して、 OpenTelemetry モジュールを読み込むようにするには、ファイル nginx.conf の先頭に次の行を追加します:
load_module modules/ngx_otel_module.so;
NGINX と OpenTelemetry の設定
「 OpenTelemetry 」 NGINX モジュールをインストールした後、 NGINX サーバーを設定して、 OpenTelemetry データを送信するようにします。 基本構成には、以下のディレクティブが含まれます:
| 設定ディレクティブ | 説明 |
|---|---|
otel_exporter |
トレースが送信される OTLP エンドポイントを定義します |
otel_service_name |
インフラストラクチャの相関付け用の論理サービス名(詳細については、 「インフラストラクチャの相関付け」 を参照してください。) |
otel_trace |
OpenTelemetry のトレースを有効または無効にします |
otel_trace_context |
トレースコンテキストの伝播を設定します |
トレース・コンテキスト伝達
ネイティブの NGINX モジュール( OpenTelemetry )は、分散トレーシングに W3C トレースコンテキスト標準を採用しています。 このモジュールは、以下の標準的な HTTP ヘッダーを使用してトレースコンテキストを伝播します:
traceparent- トレースID、親スパンID、およびトレースフラグが含まれていますtracestate- ベンダー固有のトレース情報を保持する
このモジュールは、トレース伝播のための Instana 固有のヘッダーをサポートしていません :
X-Instana-T(トレースID)X-Instana-S(Span ID)X-Instana-L(サンプリングレベルまたは判定)
NGINX が「 W3C 」トレースコンテキストヘッダーを含むリクエストを受信すると、自動的にトレースを継続します。 NGINX がアップストリームへのリクエストを行う際、同じ W3C 標準ヘッダーを使用してトレースコンテキストを伝播します。
OpenTelemetry の連携設定
OpenTelemetry と Instana を連携させるには、以下のいずれかの方法をご利用いただけます:
- Instana OpenTelemetry コレクター( IDOT )の配布 : Instana が管理する OpenTelemetry コレクターを使用して、 OpenTelemetry のデータを受信および処理します。
- Instana OTLP エンドポイント : OpenTelemetry OTLP エクスポーターを設定し、 OpenTelemetry のデータを Instana エージェントまたは Instana バックエンドの OTLP エンドポイントに直接送信するようにします。
オプション 1: Instana を使用した OpenTelemetry コレクターの配布
「 Instana 」ディストリビューションの「 OpenTelemetry Collector」( IDOT )は、「 OpenTelemetry Collector」の完全管理型かつ事前設定済みのバージョンであり、「 Instana 」オブザーバビリティ・プラットフォームとシームレスに統合されます。
NGINX サーバーからテレメトリデータを収集するには、以下の手順に従って IDOT を設定および構成してください:
- コレクターを取り付けます。 インフラストラクチャの要件に応じて、 OpenTelemetry Collectorの Instana ディストリビューションを、サイドカー、デーモン、またはゲートウェイとしてデプロイします。 IDOT コレクターの設定に関する詳細な手順については、 『 OpenTelemetry コレクターの Instana ディストリビューション』のドキュメントを参照してください。
NGINX サーバーを設定し、 OpenTelemetry のデータを IDOT コレクターのエンドポイント(デフォルトポート24317)に送信するようにします:
http { otel_exporter { endpoint localhost:24317; } otel_service_name nginx_service; otel_trace on; server { listen 80; server_name example.com; location / { otel_trace_context propagate; # Backend refers to the upstream application server(s) that NGINX forwards requests to proxy_pass http://backend; } } }
オプション 2: Instana OTLP のエンドポイントを使用する
「 OpenTelemetry 」と「 NGINX 」を連携させるには、「 OpenTelemetry Protocol 」( OTLP )エクスポーターを設定し、「 OpenTelemetry 」のトレースを「 Instana 」エージェントまたは「 Instana 」バックエンドに直接送信するようにします。
OTLP エンドポイントにデータを送信する
Instana エージェントは、 NGINX サーバーから直接 OpenTelemetry データを受信できる OTLP エンドポイントを提供します。
Instana エージェントの OTLP エンドポイントにデータを送信するには、 NGINX サーバーを次のように設定してください:
http {
otel_exporter {
endpoint localhost:4317;
}
otel_service_name your_service_name;
otel_trace on;
server {
listen 80;
location / {
otel_trace_context propagate;
proxy_pass http://backend;
}
}
}
バックエンドの OTLP エンドポイントへのデータ送信
Instana エージェントと直接通信できない環境では、 NGINX サーバーを設定して、 OpenTelemetry のデータを Instana バックエンドに直接送信するようにすることができます。
詳細については、 「 OpenTelemetry のデータを Instana に送信する」 を参照してください。
Instana バックエンドの OTLP エンドポイントにデータを送信するには、 NGINX サーバーを次のように設定してください:
http {
otel_exporter {
endpoint https://{instana-backend-otlp-acceptor-endpoint}:4317;
headers x-instana-key={agent-key};
}
otel_service_name your_service_name;
otel_trace on;
server {
listen 80;
location / {
otel_trace_context propagate;
proxy_pass http://backend;
}
}
}
{instana-backend-otlp-acceptor-endpoint} を、ご自身の Instana バックエンドエンドポイントに、 {agent-key} を、ご自身の Instana エージェントキーに置き換えてください。
Kubernetes 上で、 OpenTelemetry を使用した NGINX Ingress Controller のデプロイ
Kubernetes 環境では、 Helm を使用して、 OpenTelemetry に対応した NGINX Ingress Controllerをデプロイできます。 このデプロイメントにより、すべてのインバウンドトラフィックに分散トレーシングを自動的に適用できるようになります。
--set autotrace.ingress_nginx.enabled=false エージェントのインストールまたは更新時に設定を行うことで、ingress-nginxの AutoTrace を無効にすることができます。Kubernetes の導入に必要な前提条件
以下の前提条件を満たしていることを確認してください。
- Kubernetes クラスター(例:Minikube、EKS、 GKE、または AKS )
- Helm 3.x インストール済み
- kubectl クラスターにアクセスするように設定されています
- Instana バックエンドの OTLP エンドポイントと API キー
OpenTelemetry を使用した ingress-nginx のインストール
ingress-nginxの Helm リポジトリを追加します:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo updateOpenTelemetry の設定を含む Helm 値ファイル(例: ingress-nginx-values.yaml)を作成します:
controller: config: http-snippet: | otel_exporter { endpoint https://{instana-backend-otlp-endpoint}:4317; header x-instana-key "{agent-key}"; } otel_service_name "{your-service-name}"; otel_resource_attr "service.namespace" "ingress-nginx"; otel_resource_attr "k8s.cluster.name" "{your-cluster-name}"; main-snippet: | load_module /etc/nginx/modules/ngx_otel_module.so; otel-span-attr: | http.request_id $request_id k8s.namespace $namespace k8s.ingress.name $ingress_name k8s.service.name $service_name otel-trace: "on" otel-trace-context: propagate image: digest: "" image: ingress-nginx-otel pullPolicy: Never registry: docker.io/library tag: "{version}"設定内の以下の値を置き換えてください:
- {instana-backend-otlp-endpoint} - Instana のバックエンドにある OTLP エンドポイント(例: otlp-red-saas.instana.io )
- {agent-key} - Instana のエージェントキー
- {your-cluster-name} - Kubernetes クラスタ名
- {your-service-name} - サービス名
- {version} - OpenTelemetry に対応した ingress-nginx イメージのバージョン
- イメージ設定 - レジストリおよびイメージの要件に合わせて設定してください
ingress-nginx コントローラーを、以下のカスタム設定値でインストールします:
helm install ingress-nginx ingress-nginx/ingress-nginx \ --namespace ingress-nginx \ --create-namespace \ --values ingress-nginx-values.yamlインストールの検証
kubectl get pods -n ingress-nginx kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
構成オプション
Helm の値ファイルには、いくつかの重要な設定セクションが含まれています:
- http-snippet : Instana エンドポイントや認証設定など、 OpenTelemetry の主要なエクスポーター設定が含まれています
- main-snippet : モジュール「 OpenTelemetry 」を読み込みます NGINX
- otel-span-attr : 各トレースに追加されるカスタム・スパン属性を定義します。これには、 Kubernetes 固有のメタデータも含まれます
- otel-trace : OpenTelemetry のトレースを有効にします
- otel-trace-context : 下流のサービスへのトレースコンテキストの伝播を設定します
カスタムspan属性
この設定には、 Instana で有用なコンテキストを提供する、 Kubernetes 固有の属性が含まれています:
| 属性 | 説明 |
|---|---|
http.request_id |
HTTP への各リクエストに対する一意の識別子 |
k8s.namespace |
Kubernetes サービスの名前空間 |
k8s.ingress.name |
イングリッス・リソース名 |
k8s.service.name |
Kubernetes サービスの名称 |
これらの属性により、 Instana のUI上でトレースを特定の Kubernetes リソースと関連付けることができます。
インフラストラクチャー相関
この otel_service_name ディレクティブは、インフラストラクチャの相関分析に使用されます。これにより、 NGINX のアプリケーショントレースを、 Instana によって監視されている基盤となるインフラストラクチャエンティティ(ホスト、コンテナ、 Kubernetes ポッド、およびプロセス)と関連付けることができます。
Instana では、このサービス名を設定すると otel_service_name、以下のタスクを実行します:
- NGINX のトレースとインフラストラクチャのメトリクス(CPU、メモリ、ネットワーク)を関連付ける
- マップサービスの依存関係と呼び出し関係
- アプリケーションビューとインフラストラクチャビュー間の双方向ナビゲーションを有効にする
- 根本原因分析のために、状況を完全に把握する
インフラストラクチャの相関分析および OpenTelemetry との統合に関する詳細については、以下のトピックを参照してください: