NGINX のモニター

Instana NGINX を経由するリクエストのメトリクスと分散トレースの両方を収集するのに役立ちます。

nginx 社のロゴ nginxplus のロゴ

Instana ホストエージェントをインストールすると、 NGINX センサーが自動的にインストールされます。 「設定 」セクションの手順に従って NGINX センサーを設定すると、 Instana のUIで NGINX に関連するメトリクスを確認できるようになります。

分散トレース機能を使用するには、「分散トレース」セクションに指定されている構成ステップを実行する必要があります。

サポート情報

NGINX センサーが現在の環境と互換性があるかどうかを確認するには、以下のサポート情報セクションをご確認ください:

サポート対象のオペレーティング・システム

NGINX センサーと NGINX トレースでは、必要なOSの要件が異なります。

NGINX センサーについて、対応OSは各ホストエージェントの要件に準じています。詳細は、各ホストエージェントの「対応OS」セクション(例: Linux の対応OS )でご確認いただけます。

NGINX のトレース機能については、以下のオペレーティングシステムがサポートされています:

オペレーティング・システム アーキテクチャー ビット
Alpine Linux :edge、 3.22、 3.21、 3.20、 3.19、 3.18、 3.17、 3.16、 3.15、 3.14、 3.13、 3.12、 3.11 x86_64 64百万
Amazon Linux 年2月、2023年、2022年 x86_64 64百万
CentOS: ストリーム10、9 x86_64 64百万
RHEL 8、9 x86_64 64百万
Debian :12、11 x86_64 64百万
Ubuntu :LTS 24.04, 22.04 x86_64 64百万

CPPセンサー( 1.12.0 以降)は、 Debian 10および Ubuntu 20.04 のサポートを終了します。

CPPセンサー( 1.11.0 以降)は、 CentOS 7、 CentOS 8、 CentOS Stream 8、 Alpine 3.10、および RHEL 7への対応を終了します。

対応バージョンとサポート方針

NGINX センサーと NGINX トレースには、それぞれ異なるバージョンおよびプラットフォームの要件があります。 詳細については、 「 NGINX の対応バージョンとプラットフォーム」 をご覧ください。

以下の表は、最新のサポート対象バージョンとサポート方針を示しています:

テクノロジー サポート・ポリシー 最新バージョン サポートされる最新バージョン
NGINX 45 日間 1.31.2 1.31.0
NGINX Plus 45 日間 1.29.3 (nginx-plus-r37.0.0) 1.29.8 (nginx-plus-r37.0.0)

サポートポリシーに関する詳細については、 「センサーのサポート戦略」 を参照してください。

非推奨ポリシー

NGINX のTracerは、 1.24.0 より以前のNGINXバージョンおよび R30 より以前の NGINX Plusバージョンについて、サポート終了を発表しました。 これらの非推奨バージョンは、2027年4月1日までサポートされます。 今後、 Instana は、公式のサポート終了日から2年を経過した NGINX の旧バージョンを非推奨とします。 2027年4月1日以降も、 NGINX Tracerの旧バージョンは引き続き利用可能ですが、メンテナンスアップデートは提供されなくなります。 最適なパフォーマンスとセキュリティを確保するため、サポート対象の NGINX バージョンにアップグレードしてください。

追加のサポート情報

NGINX のトレース機能では、以下の Docker コンテナイメージがサポートされています:

コンテナー・イメージ アーキテクチャー ビット
3scale openresty x86_64 64百万
ingress-nginx ( us.gcr.io/k8s-artifacts-prod/ingress-nginx/controller ): v0.34.0..v1.13.0 x86_64 64百万
nginx: alpine、stable-alpine x86_64 64百万
openresty/openresty Debian ベース x86_64 64百万

CPPセンサー( 1.12.0 以降)では、コンテナイメージのサポートが openresty/openresty CentOS based終了します。

の構成

メトリック収集の有効化

Instana に NGINX のプロセスを自動的に収集・監視させるには、次のようにメトリクスの収集を有効にする必要があります:

NGINX のメトリック

NGINX のメトリクス収集において、 Instana はリモートメトリクス収集のために ngx_http_stub_status_module を使用しています。 このコレクションを有効にするには、モジュールが有効になっているか、利用可能であることを確認し、 NGINX の設定ファイルの先頭に以下のスニペットを追加してください:

location /nginx_status {
  stub_status  on;
  access_log   off;
  allow 127.0.0.1; # Or the Remote IP of the Instana Host Agent
  deny  all;
}
 

デフォルトで、Instana エージェントは使用可能なプロセス引数で構成ファイルの場所を検索します。そうでない場合は、/etc/nginx/nginx.conf にフォールバックします。

注:Instana エージェントが Kubernetes クラスター内で実行される場合、設定 allow <host-ip-address> を使用して、エージェントが実行されているホストのIPアドレスを許可するようにしてください。

NGINX Plus のメトリック

NGINX Plusのメトリクス監視を有効にするには、 ngx_http_api_module (*) がインストールされているか、利用可能であることを確認し、以下のブロックを追加してモジュールを有効にしてください:

location /api {
    api write=off;
    allow 127.0.0.1; # Or the Remote IP of the Instana Host Agent
    deny all;
}
 

Kubernetes Ingress のメトリクス NGINX

Kubernetes より Ingress NGINX バージョン 0.23.0 以降、ポート 18080 でリスニングしていたサーバーは無効化されました。 Instana がこの NGINX インスタンスを監視できるようにするには、ConfigMapに以下のスニペットを追加してサーバーを復元してください:

http-snippet: |
  server {
    listen 18080;

    location /nginx_status {
      stub_status on;
      access_log  off;
      allow 127.0.0.1; # Or the Remote IP of the Instana Host Agent
      deny  all;
    }

    location / {
      return 404;
    }
  }
 

詳細については、 NGINX Ingress 0.23.0 の変更履歴をご覧ください。

NGINX のrootless Podman コンテナに関するメトリクス

NGINX のrootless Podman コンテナからメトリクスを収集するには、メトリクス監視モジュールを有効にし、 NGINX サーバーのリスンポートを、rootless Podman コンテナがホストされているホスト上の同じポートにマッピングする必要があります。 接続を確立し、必要なメトリクスを収集するには、ポートマッピングが必要です。

カスタムポーリングレート

エージェントは NGINX センサーをネイティブに監視するため、その設定は任意です。 NGINX センサーを使用して、カスタムポーリングを行うことができます。
com.instana.plugin.nginx:
  poll_rate: 1 # values are in seconds. Default value is 1 second.

NGINX のメトリクス収集を無効にする

Nginx のメトリクス収集を無効にするには、 NGINX の設定から以下のスニペットを削除してください:

location /nginx_status {
  stub_status  on;
  access_log   off;
  allow 127.0.0.1; # Or the Remote IP of the Instana Host Agent
  deny  all;
}

メトリックの表示

「」 設定 セクションの設定手順を完了すると、UI Instana 上で「 NGINX 」に関連するメトリクスを確認できるようになります。

メトリックを表示するには、以下のステップを実行します。

  1. Instana のUIのサイドバーで、 「インフラストラクチャ」 を選択します。
  2. 特定のモニター対象ホストをクリックします。

その後、収集されたすべてのメトリックとモニター対象プロセスを含むホスト・ダッシュボードを表示できます。

構成データ

  • PID
  • ワーカー・プロセス数
  • ワーカー接続数
  • 開始時刻
  • バージョン
  • ビルド (*)
  • アドレス (*)
  • 生成 (*)
  • PID (*)

パフォーマンス・メトリック

  • 要求
  • 接続数
  • プロセス (*)
  • SSL (*)
  • キャッシュ (*)
  • サーバー・ゾーン (*)
  • アップストリーム (*)

正常性シグニチャー

各センサーには、着信メトリックに対して継続的に評価され、ユーザーの影響に依存する問題またはインシデントを発生させるために使用される、キュレートされたヘルス・シグネチャーの知識ベースがあります。

組み込みイベントは、エンティティのヘルスシグネチャの異常に基づいて課題やインシデントをトリガーし、 カスタムイベントは、特定のエンティティの個々のメトリクスのしきい値に基づいて課題やインシデントをトリガーします。

NGINX センサーの組み込みイベントに関する詳細については、「 組み込みイベントのリファレンス 」を参照してください。

NGINX トレース( NGINX 向け分散トレース)

Instana エージェント用の NGINX Ingressの設定

NGINX のトレース機能を使用するには、以下の設定値を指定する必要があります:

  • NGINX Ingressの ConfigMap に、以下の項目を追加してください:

      data:
        enable-opentracing: "true"
        zipkin-collector-host: $HOST_IP
        zipkin-collector-port: "42699"
     
  • NGINX のPod Specに、次のように環境変数を追加してください(すでに POD_NAME と が含まれている POD_NAMESPACEはずです):

    env:
       - name: HOST_IP
         valueFrom:
         fieldRef:
             fieldPath: status.hostIP
     

注:

  • Ingressの NGINX は、環境変数`$ENV POD_NAMESPACE `と` POD_NAME $ENV`を自動的に設定します。 したがって、 NGINX のPod Specに および POD_NAMESPACE 環境 POD_NAME 変数を追加する必要はありません。

  • この構成では、 Kubernetes DownwardAPI を使用して、ホスト IP を環境変数 (HOST_IP) として使用可能にします。これにより、 ConfigMap がこれを取得します。

  • ポートは、 Instana エージェントのポートである42699に固定できます。

  • サービスは、デフォルトの nginx として指定するか、パラメーター zipkin-service-nameで上書きする必要があります。このパラメーターは、 ConfigMapで構成できます。

NGINX Ingress の詳細については、 Kubernetes Ingress NGINX のドキュメントを参照してください。

NGINX、 NGINX Plus、および OpenResty 向けの分散トレーシング

セットアップに NGINX のトレース機能をインストールするには、以下の手順を実行してください:

  1. お使いの NGINX のバージョンに合ったバイナリファイルを入手してください
  2. バイナリファイルを、 NGINX サーバーからアクセス可能な場所にコピーしてください。
  3. NGINX の設定を編集します
  4. NGINX プロセスを再起動するか、コマンド reload を送信して設定の再読み込みを実行します

バイナリファイルをダウンロードする

NGINX HTTP のトレースモジュールは、最新の nginx-opentracing モジュールをベースにしており、機能を拡張し、使いやすさを向上させるためのカスタマイズが施されています。

NGINX の対応ディストリビューション向け Instana バイナリファイルのダウンロードリンクは、「 NGINX 分散トレーシングバイナリ 」ページから入手できます。

バイナリファイルをコピーする

前の手順でダウンロードして解凍したバイナリファイルを、 NGINXlibinstana_sensor.so プロセスがアクセスできるファイルシステムに移動してください。 NGINX プロセスには、. libinstana_sensor.soに対する読み取り権限が必要です。

NGINX が、コンテナーで実行するのではなく、オペレーティング・システム上で直接実行される場合は、通常、2 つの Instana バイナリーを他の NGINX モジュールを含むフォルダーにコピーすることをお勧めします。 NGINX がモジュールを配置する場所を確認するには、コマンド nginx -V を実行し、設定 --modules-path オプションを探してください。詳しくは、例えば StackOverflow のこの回答を参照してください。

コンテナ環境では、この手法は、それらをコンテナイメージに追加すること、あるいはファイルをボリュームとしてコンテナにマウントすることを意味する場合があります。例えば、 Docker のバインドマウントに関するドキュメントや、 Kubernetes のポッドへのボリュームのマウント方法をご覧ください。

NGINX 構成の編集

NGINX のすべての対応バージョンには、2つの別々のZIPアーカイブが含まれており、1つは用 GLIBC 、もう1つは用 MUSLです。 GLIBC これは、 Alpine を除くすべての Linux ディストリビューション向けです。には.が必要です MUSL

以下のように NGINX を設定する前に、ダウンロードしたモジュールの名前を に変更するか modules/ngx_http_opentracing_module.so 、または ファイル nginx.conf 内の load_module modules/ngx_http_opentracing_module.so; 設定行 を、ダウンロードしたモジュールの名前に合わせて変更する必要があります。 例えば、構成行 load_module modules/ngx_http_opentracing_module.so;load_module modules/musl-nginx-1.23.3-ngx_http_ot_module.so;に変更します。

# The following line adds the basic module Instana uses to get tracing data.
# It is required that you use the version of this module built by Instana,
# rather than the one shipped in many NGINX distros, as there are some
# modifications in the Instana version that are required for tracing to work
load_module modules/ngx_http_opentracing_module.so;

# Whitelists environment variables used for tracer configuration to avoid
# that NGINX wipes them. This is only needed if instana-config.json
# should contain an empty configuration with "{}" inside to do the
# configuration via these environment variables instead.
env INSTANA_SERVICE_NAME;
env INSTANA_AGENT_HOST;
env INSTANA_AGENT_PORT;
env INSTANA_MAX_BUFFERED_SPANS;
env INSTANA_DEV;

events {}

error_log /dev/stdout info;

http {
  error_log /dev/stdout info;

  # The following line loads the Instana libsinstana_sensor library, that
  # gets the tracing data from ngx_http_opentracing_module.so and converts
  # them to Instana AutoTrace tracing data.
  # The content of instana-config.json is discussed as follows.
  opentracing_load_tracer /usr/local/lib/libinstana_sensor.so /etc/instana-config.json;

  # Propagates the active span context for upstream requests.
  # Without this configuration, the Instana trace will end at
  # NGINX, and the systems downstream (those to which NGINX
  # routes the requests) monitored by Instana will generate
  # new, unrelated traces
  opentracing_propagate_context;

  # Optional: `opentracing_remove_duplication` command enables the
  # removal of the duplication of Server-Timing Header in the NGINX response.
  # This duplication might occur if more than one tracer is involved in the
  # the process chain of a request.
  # The command can be inserted in the following contexts: HTTP, server,
  # location, backend.
  # opentracing_remove_duplication on;

  # Optional: This logs subrequests like e.g. created by the `auth_request`
  # directive so that authorization requests can be traced.
  log_subrequest on;

  # If you use upstreams, Instana will automatically use them as endpoints,
  # and it is really cool :-)
  upstream backend {
    server server-app:8080;
  }

  server {
    error_log /dev/stdout info;
    listen 8080;
    server_name localhost;

    location /static {
      root /www/html;
    }

    location ^~ /api {
      proxy_pass http://backend;
    }

    location ^~ /other_api {
      proxy_set_header X-AWESOME-HEADER "truly_is_awesome";

      # Using the `proxy_set_header` directive voids for this
      # location the `opentracing_propagate_context` defined
      # at the `http` level, so here it needs to be set again.
      # It needs to be set for every block where `proxy_set_header`
      # is found. This can also be the case at `server` level.
      opentracing_propagate_context;

      proxy_pass http://backend;
    }
  }
}
 

特殊ケース opentracing_propagate_context:

メイン (http) レベルに加えて、proxy_set_header ディレクティブも設定されているブロック (server または location) ごとに、opentracing_propagate_context ディレクティブを追加する必要があります。 理由は、OpenTracing コンテキスト伝搬は内部的に proxy_set_header に基づいており、上記の追加をしなければ無効になるからです。 これは NGINX モジュール API の制限です。

instana-config.json の例は次のとおりです。

{
  "service": "nginxtracing_nginx", # Change this line to give your NGINX service a different name in Instana
  "agent_host": <host_agent_address>, # Change this line with the IP address or DNS name of the Instana agent on the same host as your NGINX process
  "agent_port": 42699, # This is the default, and you should never change it unless instructed by the Instana support
  "max_buffered_spans": 1000
}
 

前述のスニペット内の設定は、以下の意味を持ちます:

  • service: Instana バックエンドでこの NGINX プロセスに関連付けられる名前。 サービス名が指定されていない場合は、サービス名が自動的に生成されます。 詳細については、 「サービス」 をご覧ください。
  • agent_host: ローカル・ホスト・エージェントの IP アドレスまたは DNS 名。 NGINX プロセスと同じホスト上で Instana エージェントのネットワーク名と一致するように、この構成を変更する必要があります
  • agent_port: NGINX トレース拡張がホスト・エージェントへの接続を試行するポート。 このポートが 構成不能 エージェント側であることに注意してください。 NGINX トレース拡張を使用すると、ポート転送またはポート・マッピングを必要とする設定の場合にポートを構成できます。
  • max_buffered_spans: NGINX トレース拡張がエージェントにフラッシュする前にローカル側で保持するスパンの最大数 (要求ごとに 1 つ)。デフォルトは 1000 です。 NGINX トレース拡張は、常に、ローカルでバッファーに入れられたスパンを 1 秒ごとにフラッシュします。 この設定を使用すると、NGINX サーバーが 1 秒当たり 1000 個を超える要求に対処するときに、トレース・データのフラッシュを高速化して NGINX サーバーのメモリー容量を減らしたい場合に、ローカル・バッファー量を減らすことができます。

代わりに、環境変数を使用してトレーサーを構成することもできます。 環境変数が優先されますが、instana-config.json ファイルは引き続き必要です。 そのため、以下のようにします。

  • 空の構成 {}instana-config.json に入れます
  • NGINX の設定で環境変数のホワイトリスト登録を行う
  • NGINX を開始する前に環境変数を設定します

この方法は、Instana エージェント・ホストを Kubernetes クラスター内のホスト IP に設定する場合に特に便利です。

以下の Kubernetes デプロイメント YAML 部分の例は、この方法を示しています。

        env:
        - name: INSTANA_SERVICE_NAME
          value: "nginxtracing_nginx"
        - name: INSTANA_AGENT_HOST
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
 

詳細については、「 環境変数のリファレンス 」を参照してください。

他の NGINX OpenTracing モジュール・ビルドのサポート

サードパーティーからのNGINX OpenTracingモジュールのビルド(NGINX自体によってサポートされるものを含む)の使用はサポートされていません。 InstanaにNGINX OpenTracingモジュールの構成を必要とする理由はテクニカルです: 自己コンパイルがサポートされていない(つまり、自己のバージョンを構成する)からです。それをすると、Instanaがサポートをし、コンパイレーションプロセスが全く異なる予測不能な設定で失敗の原因を理解しようとするからです。同様に、F5の提供するモジュールがサポートされません。何故ならInstanaが必要な機能性を欠如しているからであり、これらはスタンダードC++ライブラリーにダイナミックなリンキングを使用しており多くの場合それはセグメンテーションにつながるからです。 実際、segfaultを避けるために、Instana NGINX OpenTracingモジュールは、テストを統一するため、および古いディストリビューションでも最新のC++コードの利点を得るために、静的にリンクされた標準C++ライブラリーを組み込んで構築されています。

NGINX のrootless Podman コンテナのトレース

rootless Podman コンテナ内で実行されている NGINX からトレースを収集するには、 Instana エージェントと rootless Podman ネットワーク間の通信が維持されていることを確認する必要があります。

NGINX での serverless-tracing の設定

NGINX でサーバーレストレースを設定するには、以下の手順を実行してください:

  1. お使いの NGINX のバージョンに合わせて、サーバーレストレースング用の Instana バイナリファイルをダウンロードしてください。 NGINX HTTP のトレースモジュールは、 モジュ nginx-opentracing ールを基盤としています。 Instana のこのバリエーションは、使いやすさの向上、独自のバグ修正、および機能の拡充を目的としてカスタマイズされています。 Instana のバイナリファイルについては、 NGINX Distributed Tracing Binaries を参照してください。

  2. serverless-tracing用のバイナリファイルをコピーする:

    1. ステップ1でダウンロード・展開したバイナリファイルから、バージョンに応じて「libinstana_sensor.soモジュールのOpenSSLバリアントを選択する。 コマンド 'openssl version を使ってOpenSSLのバージョンを取得する。 OpenSSL 3.0.22の出力例を以下に示す:

      # openssl version
      OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
       

      OpenSSL 3.x.xの場合は、「libinstana_sensor_ssl3x.soモジュールを選択する。

      • OpenSSL 1.1.1fの出力例を以下に示す:

        # openssl version
        OpenSSL 1.1.1f  31 Mar 2020
         

        OpenSSL 1.1.xの場合は、「libinstana_sensor_ssl1.1x.soモジュールを選択する。

    2. NGINX プロセスがアクセスできるファイルシステムに配置してください。 NGINX プロセスには、. libinstana_sensor.soに対する読み取り権限が必要です。

    3. NGINX がコンテナ内で実行されているのではなく、ホストOS上で直接実行されている場合は、2つの Instana バイナリを、他の NGINX モジュールが格納されているディレクトリにコピーしてください。

    4. NGINX がモジュールを検索する場所を確認するには、コマンド nginx -V を実行し、設定 --modules-path オプションを探してください。

    5. 以下のステップのいずれかを実行します。

  3. 環境変数を設定します。

    1. コマンド systemctl show -p FragmentPath nginx の出力に表示された NGINX サービスファイルを検索してください。 出力例を以下に示す:

      # systemctl show -p FragmentPath nginx
      FragmentPath=/lib/systemd/system/nginx.service
       
    2. NGINX のサービスファイルの セクション Service に、環境 INSTANA_AGENT_KEY 変数 INSTANA_ENDPOINT_URL と を追加します。 環境変数に関する詳細については、 「サーバーレス監視の環境変数」 を参照してください。

    3. 次の例のように、「INSTANA_ENDPOINT_URL」と「INSTANA_AGENT_KEY実際の値に置き換える:

      [Service]
      Environment="INSTANA_ENDPOINT_URL=https://XXX.instana.io/serverless/"
      Environment="INSTANA_AGENT_KEY=*****"
       
  4. サーバーレストレースング用に NGINX の設定を編集します:

    1. libinstana_sensor_ssl1.1x.soまたは'libinstana_sensor_ssl3x.so名前を'libinstana_sensor.soに変更するか、'nginx.confファイル内の'opentracing_load_tracer /usr/local/lib/libinstana_sensor.so /etc/instana-config.json;行を、必要な抽出モジュール名に基づいて更新する。

    2. これらの環境変数を許可するために、'nginx.confファイルに'env INSTANA_ENDPOINT_URL;と'env INSTANA_AGENT_KEY;行を追加する。

      # The following line adds the basic module Instana uses to get tracing data.
      # It is required that you use the version of this module built by Instana,
      # rather than the one shipped in many NGINX distros, as there are some
      # modifications in the Instana version that are required for tracing to work
      load_module modules/ngx_http_opentracing_module.so;
      
      # Whitelists environment variables used for tracer configuration to avoid
      # that NGINX wipes them. This is only needed if instana-config.json
      # should contain an empty configuration with "{}" inside to do the
      # configuration via these environment variables instead.
      env INSTANA_SERVICE_NAME;
      env INSTANA_AGENT_HOST;
      env INSTANA_AGENT_PORT;
      env INSTANA_MAX_BUFFERED_SPANS;
      env INSTANA_DEV;
      # Serverless tracing:
      env INSTANA_ENDPOINT_URL;
      env INSTANA_AGENT_KEY;
      
      events {}
      
      error_log /dev/stdout info;
      
      http {
      error_log /dev/stdout info;
      
      # The following line loads the Instana libsinstana_sensor library, that
      # gets the tracing data from ngx_http_opentracing_module.so and converts
      # them to Instana AutoTrace tracing data.
      # The content of instana-config.json is discussed as follows.
      opentracing_load_tracer /usr/local/lib/libinstana_sensor.so /etc/instana-config.json;
       
  5. NGINX プロセスを再起動するか、コマンドを実行して reload 設定の再読み込みを実行してください

Kubernetes および Red Hat OpenShift における NGINX の分散トレーシング

Instana ( AutoTrace )の Webhook を使用すると、 Kubernetes および Red Hat OpenShift 上の NGINX に対して分散トレーシングを自動的に設定できます。ただし、以下の制限事項があります:

  • Instana AutoTrace Webhookは、 NGINX 1.19 以降のみに対応しています。
  • Instana AutoTrace Webhookは、現時点では OpenResty に対応していません。
  • Instana AutoTrace Webhookは、スタンドアロンの NGINX での ConfigMap の使用をサポートしていません。

詳細については、 「 NGINX および ingress-nginx での Webhook 計測の有効化」 を参照してください。

Kubernetes Ingress 向けの分散トレーシング NGINX

Instana のWebhook ( AutoTrace )を使用すると、 Kubernetes および Red Hat OpenShift 上のIngress( NGINX および NGINX )に対して、分散トレーシングを自動的に設定できます。 NGINX の自動トレースが有効になっている場合、Webhookは、前述の設定スニペットとトレース用バイナリを、 NGINX およびIngress NGINX のコンテナの設定に自動的に組み込みます。

Kubernetes Ingress 向け分散トレーシング: Zipkin Tracer を使用した NGINX

Kubernetes のIngress( NGINX )は、 OpenTracing プロジェクトを通じて分散トレーシングを実現します。 Instana エージェントは、Jaeger および Zipkin トレースも取り込むことができるため、トレースが Instana に転送されるように NGINX Ingress を構成することができます。

注: このセットアップはサポートされていますが、Instana は OpenTracing トレースからトレース・コンテキストを引き継ぐことはできません。つまり、洞察は、分離して示される NGINX スパンのみに制限されます。 OpenTracing を介してすべてのサービスがトレースされる場合のみ、コンテキストが保存され、Instana は分散トレース全体を表示します。
注: nginx-ingress バージョン 0.23.0 以上が必要です。これより前のバージョンでは、変数拡張はサポートされません。
注: Jaeger または Zipkin に関するサポートの制限事項がすべて適用されます。

NGINX のトレース機能を無効にする

NGINX のトレース機能を無効にするには、 NGINX の設定ファイルから、, opentracing_load_tracer, および opentracing_propagate_context load_moduleディレクティブに加え、 Instana に関連する環境変数( INSTANA_AGENT_HOSTINSTANA_SERVICE_NAME や など)を削除してください。 さらに、対応するディレクトリからトレース用ライブラリと ファイルを instana-config.json 削除してください。

load_module modules/ngx_http_opentracing_module.so;

env INSTANA_SERVICE_NAME;
env INSTANA_AGENT_HOST;
env INSTANA_AGENT_PORT;
env INSTANA_MAX_BUFFERED_SPANS;
env INSTANA_DEV;

opentracing_load_tracer /usr/local/lib/libinstana_sensor.so /etc/instana-config.json;

opentracing_propagate_context;

Nginx トレースの例

Instana Nginx センサーのトレース機能をプレビューするための公開リポジトリを提供しています。 詳しくは、 nginx-tracingを参照してください。

トラブルシューティング

ログの検索

Instana のトレーサーは、 NGINX の標準エラー出力にログ行を出力します。 これらの行には、接頭部 [lis]が付きます。

autotrace-mutating-webhook を使用した自動トレースの場合、問題のトラブルシューティングには、 NGINX の自動トレースに関与するバイナリファイルのログを利用してください。 さらに詳細な情報や状況を伝えるために、これらのログを IBM サポートチームに共有することも可能です。 自動インスツルメンテーションには、ライブラ libinstana_init リと実行ファイルという2つのバイナリ watcher_nginxファイルが関係しています。

  • libinstana_sensor のログ・ファイルは /tmp/instana/lii_logs/$PID.logにあります。
  • watcher_nginx のログ・ファイルは /tmp/instana/iwn_logs/$PID.logにあります。

ここで、 $PID は、関連するプロセスのプロセス ID を表します。

デフォルトでは、ログ・レベルは error に設定されています。 NGINX を異なるログレベルでデプロイするには、環境変数を設定してログレベルを変更してください。

libinstana_init ライブラリーの場合は、以下の環境変数を設定します。

INSTANA_LII_LOG_LEVEL=debug
 

watcher_nginx 実行可能ファイルの場合は、以下の環境変数を設定します。

INSTANA_IWN_LOG_LEVEL=debug
 

NGINX センサーの警告およびエラーは、 Instana エージェントサービスのログで確認できます。 最新のログ項目を表示するには、次のコマンドを実行します。

systemctl status instana-agent
 

Instana エージェントサービスの完全なログを表示するには、次のコマンドを実行してください:

sudo journalctl -xeu instana-agent.service
 

NGINX AutoTrace による計測設定後、podが再起動する

観察結果:AutoTrace の計測機能を有効にした後、 Kubernetes のIngress「 NGINX 」に属するポッドで、1回の再起動が確認されました:

NAME READY STATUS RESTARTS AGE ingress-nginx-controller-xxxxx 1/1 Running 1 (2m ago) 5m  

原因: この再起動は想定された動作です。 既存のIngress( NGINX )デプロイメントに計測機能を追加する場合、Podと ConfigMap は個別に計測対象となります。 Podは、まず既存の ConfigMap, から開始され、その後、 ConfigMap が OpenTracing の設定で更新されます。 NGINX これらの変更はホットリロードできず、新しいトレース設定を適用するには再起動が必要です。

OpenTracing モジュール共有ライブラリが見つかりません

問題:NGINX または Kubernetes Ingress NGINX に Instana を設定した AutoTrace の Webhook のログに、以下のエラーメッセージが表示されています:

dlopen() "/opt/instana/instrumentation/nginx/tracing/ngx_http_opentracing_module.so" failed (Error loading shared library /opt/instana/instrumentation/nginx/tracing/ngx_http_opentracing_module.so: No such file or directory) in /tmp/nginx/nginx-cfg33744904:20 nginx: [emerg] dlopen() "/opt/instana/instrumentation/nginx/tracing/ngx_http_opentracing_module.so" failed (Error loading shared library /opt/instana/instrumentation/nginx/tracing/ngx_http_opentracing_module.so: No such file or directory) in /tmp/nginx/nginx-cfg33744904:20 nginx: configuration file /tmp/nginx/nginx-cfg33744904 test failed  

原因: これは、 ConfigMap がデプロイの準備が完全に整う前に更新された場合に発生する可能性のある、まれなレースコンディションです。 CrashLoopBackOffこの状態では、 NGINX がファイルシステム上にまだ存在しないトレースファイルを読み込もうとするため、コントローラーポッドがクラッシュするか、. 状態に入る原因となります。

解決策: ポッドを削除して、ポッドを再起動します。

kubectl delete pod <pod-name> -n <namespace>

デプロイメント・コントローラーがポッドを再作成すると、ポッドは正常に起動します。

Nginx API がアクセス不能

監視対象の種類: nginx_api_not_accessible

この問題を解決するには、「 メトリクスの収集を有効にする 」セクションに記載されている手順に従い、 Instana エージェントがすべての NGINX メトリクスを収集するように設定してください。

Nginx Status エンドポイントがアクセス不能

監視対象の種類: nginx_status_not_accessible

この問題を解決するには、「 メトリクスの収集を有効にする 」セクションに記載されている手順に従い、 Instana エージェントがすべての NGINX メトリクスを収集するように設定してください。

Nginx API が見つからない

監視対象の種類: nginx_api_not_found

この問題を解決するには、「 メトリクスの収集を有効にする 」セクションに記載されている手順に従い、 Instana エージェントがすべての NGINX メトリクスを収集するように設定してください。

Nginx Status が見つからない

監視対象の種類: nginx_status_not_found

この問題を解決するには、「 メトリクスの収集を有効にする 」セクションに記載されている手順に従い、 Instana エージェントがすべての NGINX メトリクスを収集するように設定してください。

Nginx Config のロケーションが検出されない

監視対象の種類: nginx_config_location_not_discovered

この問題を解決するには、「 メトリクスの収集を有効にする 」セクションに記載されている手順に従い、 Instana エージェントがすべての NGINX メトリクスを収集するように設定してください。

OpenResty のLuaコードにおいて、トレースの連続性が途切れています

問題: Luaコードから発行されるカスタム HTTP リクエストは、自動的にトレースすることができません。

$http_traceparent解決策: トレースの連続性を確保するには、送信側の W3Ctraceparent ヘッダーを、対応する NGINX 変数から引き継ぐ必要があります。 NGINX のTracerは、スパンIDを自動的に更新します。

lua-resty-http などの Lua 版 ` HTTP ` クライアントコードを修正し、ヘッダーがまだ設定されておらず、かつ ` NGINX ` 変数が利用可能な場合に、 ngx.var.http_traceparent `outbound traceparent ` ヘッダーを含めるようにしてください。 詳細については、 lua-resty-http の PR 340、 lua-resty-http の README、 ngx_core_module の README、および lua-nginx-module の README を参照してください。

以下の Lua コード例を参照してください。

local http = require "resty.http"
local http_c = http.new()
local response, error = http_c:request_uri(request_url, {
    method = "GET",
})

/usr/local/openresty/luajit/share/lua/5.1/resty/http.lua以下の lua-resty-http 関数 send_request() (例えば、にあるもの)を次のように修正すれば、このコードは変更せずにそのままにしておくことができます:

--- a/http.lua
+++ b/http.lua
@@ -738,6 +738,10 @@ function _M.send_request(self, params)
     if params.version == 1.0 and not headers["Connection"] then
         headers["Connection"] = "Keep-Alive"
     end
+    -- OpenTelemetry support with NGINX tracer in propagation mode
+    if not headers["traceparent"] and ngx.var.http_traceparent then
+        headers["traceparent"] = ngx.var.http_traceparent
+    end

     params.headers = headers
 
警告: まずそのコードのライセンスを確認してください。 lua-resty-http-fast などのプロプライエタリなコードにはパッチを適用しないでください。

お使いの Lua HTTP クライアントがプロプライエタリであり、この機能に対応していない場合は、以下の代替手段をご利用ください:

local http = require "resty.http"
local http_c = http.new()
local req_headers = {}
if ngx.var.http_traceparent then
    req_headers["traceparent"] = ngx.var.http_traceparent
end
local response, error = http_c:request_uri(request_url, {
    method = "GET",
    headers = req_headers,
})
注: Lua コード内でヘッダーを設定 X-INSTANA-T/-S/-L するために以前適用した回避策は削除してください。

Resty HTTP トレースなし

問題:NGINX センサーが、サポートされていない ngx.var.http_traceparent ファイルを http.lualua-resty-http 検出した。

解決策: 前のドキュメントセクションに記載されているパッチを lua-resty-http 適用し、Lua コード内でヘッダーを設定 X-INSTANA-T/-S/-L するために以前に適用した回避策を削除してください。

SELinuxは、 NGINX プロセスが OpenTracing モジュールをロードするのを阻止します

問題:NGINX への呼び出しがトレースされず、 NGINX のエラーファイルに以下のエラーが表示されています:

/etc/nginx/modules/ngx_http_opentracing_module.so: failed to map segment from shared object: Permission denied

解決策: SELinuxは、 NGINX プロセスが、共有オブジェクトである OpenTracing モジュールからメモリを読み込み、マッピングすることを阻止しています。 SELinux がエラーの原因であることを確認するには、以下のようにしてスモーク・テストを行うことができます。

  1. SELinux を一時的に無効にする
  2. NGINX を再起動する

SELinuxを無効にして NGINX を再起動すると、 NGINX のエラーログからエラーメッセージが消え、 Instana が呼び出しを追跡できるようになります。

SELinux を無効にすることは、長期的な解決策ではありません。 正しいかつ安全な方法は、 NGINX プロセスが OpenTracing モジュールからメモリを読み取り、マッピングできるようにするSELinuxポリシーを作成することです。 ` NGINX ` 設定ディレクトリを確認すると、 OpenTracing モジュールを見つけることができます。 NGINX の設定ディレクトリが の場合 /etc/nginx、モジュールは /etc/nginx/modules ディレクトリにあります。 DevOps またはIT部門がSELinuxを設定する必要があります。 詳細については、 Instana でサポートされている一部の Linux ディストリビューションのSELinux設定について解説した、以下のオンラインリソースを参照してください:

NGINX とSELinuxの統合に関する詳細については、 『 NGINX および NGINX PlusのSELinuxとの併用』 を参照してください。

OpenTracing FastCGI でのコンテキスト伝播が機能しない

問題 : NGINX で設定された FastCGI に対して、 OpenTracing のコンテキスト伝播が機能していません。

解決策: すべての FastCGI 構成ブロックで opentracing_propagate_context ディレクティブを opentracing_fastcgi_propagate_context ディレクティブに置き換えます。

NGINX OpenShift でオートトレーシングが機能しない restricted-v2

nginx:1.24.0問題 : docker.io などの一部の NGINX 画像は、 restricted-v2 セキュリティコンテキストを使用する OpenShift 環境では互換性がありません。

原因

OpenShift restricted-v2 これらの環境には、以下の制限があります:

  • グループへの書き込み権限がありません: NGINX は一般ユーザー(root以外)として実行されています(例:ユーザーID 1000650000 およびグループID 0)。 したがって、変更が必要なすべてのファイルおよびディレクトリには、 グループ書き込み権限が必要です。 watcher_nginx これには、autotracing コンポーネントによってパッチが適用されるファイル /etc/nginx/nginx.conf が含まれます。

  • 権限昇格はブロックされています : OpenShiftrestricted-v2 環境では、権限昇格は許可されていません。 NGINX ポッドはすでに一般ユーザーとして実行されているため、 NGINX の設定から、ユーザーID 101 を指定する NGINX ディレクティブ user nginx; を削除する必要があります。

  • CAP_NET_BIND_SERVICELinux のすべての機能が無効化されます。その結果、ポート80など1024未満のポートをリッスンしようとすると、が欠落しているため、 bind() error 13: permission denied が発生します。

解決策 : NGINX の自動トレースが正しく機能するようにするには:

  • nginx.conf実行時データおよび に対して chmod -R g+w 、グループへの書き込み権限を付与します。
  • userNGINX ディレクティブは使用しないでください。
  • 1024未満のポートは使用しないでください。

既知の制限

  • NGINX トレーサーから収集されるトレースデータには、Spanの詳細にスタックトレースは含まれません。 その理由は、 NGINX のトレーサーが C および C++ のセンサーであり、現時点では C および C++ のツール向けにスタックトレースを含める取り組みが行われていないためです。 有意義なデータを得るためには、 C / C++ アプリケーションで使用されているライブラリのデバッグ用パッケージをすべて含める必要があります。 ただし、これらのパッケージは通常、実稼働環境にはインストールされません。