NGINX のモニター

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

nginxロゴ nginxplusロゴ

Instana ホストエージェントをインストールすると、NGINX センサーが自動的にインストールされます。 構成のセクションで説明したように NGINX センサーを構成した後、Instana UI で NGINX に関連するメトリクスを表示できます。

Distributed Tracing 機能を使用するには、Distributed Tracing セクションで指定されている設定ステップを完了する必要があります。

サポート情報

NGINXセンサーが現在のセットアップと互換性があることを確認するには、以下のサポート情報セクションを確認してください:

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

NGINXセンサーとNGINXトレースでは、オペレーティングシステムの要件が異なります。

NGINXセンサーの場合、サポートされるオペレーティングシステムはホストエージェントの要件と一致しています。この要件は、各ホストエージェントのサポートされるオペレーティングシステムセクション( Supported operating systems for Linux など)で確認できます。

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 オンデマンド 1.27.4 1.27.4
NGINX Plus オンデマンド 1.27.4 (nginx-plus-r34) 1.27.4 (nginx-plus-r34)

サポート方針の詳細については、 センサーのサポート戦略を参照してください。

追加のサポート情報

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

コンテナー・イメージ アーキテクチャー ビット
3scale オープンレスト 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 ルートレス Podman コンテナのメトリクス

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

カスタム投票率

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

メトリックの表示

設定] セクションの設定手順を完了すると、Instana UI で NGINX に関連するメトリクスを表示できます。

メトリクスを表示するには、以下の手順を実行します:

  1. Instana UI のサイドバーで、 インフラストラクチャを選択します。
  2. 特定の監視ホストをクリックします。

その後、収集されたすべてのメトリクスと監視されたプロセスを含むホスト・ダッシュボードを見ることができます。

構成データ

  • PID
  • ワーカー・プロセス数
  • ワーカー接続数
  • 開始時刻
  • バージョン
  • ビルド (*)
  • 住所 (*)
  • 世代 (*)
  • PPID (*)

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

  • 要求
  • 接続数
  • プロセス (*)
  • 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_NAMEPOD_NAMESPACE ):

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

注:

  • Ingress NGINX は POD_NAMEPOD_NAMESPACE 環境変数を自動的に設定します。 そのため、 POD_NAMEPOD_NAMESPACE 環境変数を NGINX Pod Spec に追加する必要はありません。

  • このコンフィギュレーションでは、 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 Distributed Tracing Binaries ページで入手できます。

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

前のステップでダウンロードして抽出したバイナリファイルから、 libinstana_sensor.so 、NGINXプロセスがアクセスできるファイルシステムに移動します。 NGINX プロセスには、 libinstana_sensor.so に対する読み取りパーミッションが必要です。

NGINX が、コンテナーで実行するのではなく、オペレーティング・システム上で直接実行される場合は、通常、2 つの Instana バイナリーを他の NGINX モジュールを含むフォルダーにコピーすることをお勧めします。 nginx -V コマンドを実行し、 --modules-path コンフィギュレーションオプションを検索することで、NGINX がモジュールの配置を期待する場所を見つけることができます。 StackOverflow に関するこのレスポンスなどを参照してください。

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

NGINX 構成の編集

NGINXの各サポートバージョンには、 GLIBCMUSL の2つのZIPアーカイブがあります。 GLIBC は、 Alpine を除くすべての Linux Distros 用で、 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 ルートレス Podman コンテナのトレース

ルートレス Podman コンテナで実行されている NGINX からトレースを収集するには、Instana エージェントとルートレス 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.2 の出力例を以下に示す:

      # 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 がコンテナで実行されているのではなく、ホスト オペレーティング システムで直接実行されている場合は、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_ENDPOINT_URLINSTANA_AGENT_KEY を追加します。 環境変数の詳細については、 サーバーレス監視のための環境変数を参照。

    3. 以下の例のように、 INSTANA_ENDPOINT_URLINSTANA_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. reload コマンドを実行して、NGINX プロセスを再起動するか、 構成のリロードをトリガします。

Kubernetes、NGINX用の分散トレース。 Red Hat OpenShift

Instana AutoTrace webhook は、 Kubernetes および Red Hat OpenShift 上の NGINX に対して、以下の制限付きで分散トレースを自動的に設定できます:

  • Instana AutoTrace ウェブフックは、NGINX 1.19 以降のみをサポートしています。
  • Instana AutoTrace webhook はまだ OpenResty をサポートしていません。

詳細については、 NGINXおよびingress-nginxでWebhookインスツルメンテーションを有効にするを参照してください。

Kubernetes Ingress NGINXの分散トレース

Instana AutoTrace ウェブフックは、Ingress NGINX および Kubernetes および Red Hat OpenShift 上の NGINX に対して分散トレースを自動的に設定できます。 この Webhook は、 NGINX の自動トレースが有効になっている場合に、前述の設定スニペットとトレースバイナリを NGINX と Ingress NGINX コンテナの設定に自動的に注入します。

Zipkin Tracer による Kubernetes Ingress NGINX の分散トレース

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

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

Nginx トレース例

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

トラブルシューティング

ログの検索

Instana トレーサーは、ログ行を NGINX の標準エラーに書き込みます。 これらの行には [lis] という接頭辞がついている。

autotrace-mutating-webhookによる自動計測の場合、問題のトラブルシューティングにはNGINXの自動トレースに関与するバイナリファイルのログを使用します。 また、これらのログを共有することで、 IBM サポートに、より詳細な情報を提供し、より良いコンテキストを提供することができます。 自動計測には2つのバイナリファイル(ライブラリ libinstana_init と実行ファイル 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 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 リクエストを自動的にトレースできない。

解決方法送信される Instana ヘッダーは、それぞれの NGINX OpenTracing 変数から伝搬される必要があります。 そのため、 HTTP リクエストを送信する前に、NGINX 変数 opentracing_context_x_instana_topentracing_context_x_instana_sopentracing_context_x_instana_l のヘッダ X-INSTANA-TX-INSTANA-SX-INSTANA-L を送信リクエストのヘッダ Lua 変数に追加します( lua-resty-http 関数 request_uri() を使用するなど)。 詳細は lua-nginx-module readmeと lua-resty-http readmeを参照してください。

以下のLuaコード例を参照:

local http_c = http.new()
...
local req_headers = {}
req_headers["X-INSTANA-T"] = ngx.var.opentracing_context_x_instana_t
req_headers["X-INSTANA-S"] = ngx.var.opentracing_context_x_instana_s
req_headers["X-INSTANA-L"] = ngx.var.opentracing_context_x_instana_l

local response, error = http_c:request_uri(request_url, {
    method = "POST",
    headers = req_headers,
    body = req_body
  }
);
 

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

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

解決方法すべての FastCGI 設定ブロックの opentracing_propagate_context ディレクティブを opentracing_fastcgi_propagate_context ディレクティブに置き換える。

既知の制限

  • NGINX トレーサーから収集されるトレース データには、Span 詳細情報のスタック トレースは含まれません。 NGINXトレーサーはC/C++センサーであり、現在C/C++ツールのスタックトレースを含めるイニシアティブが存在しないからです。 意味のあるデータを得るためには、この種のトレースには、C/C++アプリケーションに関係するライブラリーのすべてのデバッグ・パッケージが必要である。 しかし、これらのパッケージは通常、本番環境にはインストールされない。