NGINXは、HTTPサーバーおよびリバースプロキシとして機能する、無料のオープンソースの高性能サーバーです。アプリケーションの状態をより適切に監視するために、NGINXでトレース分析を実行できます。このトピックでは、NGINXでトレース分析を実行する方法について説明します。
前提条件
概要
NGINXをプロキシとして使用するマイクロサービスで応答が遅い場合、データが収集されないため、応答が遅いことの影響を推定できません。この場合、トレース分析を使用してマイクロサービスのNGINXリクエストをトレースし、応答の遅延の影響を受けるページビューの数を計算できます。
DockerコンテナでのNGINXのデプロイとトレース
Dockerfileをダウンロード、ビルド、デプロイします。
wget https://arms-apm.oss-cn-hangzhou.aliyuncs.com/demo/nginx-jaeger-docker.tgz tar -xzvf nginx-jaeger-docker.tgz cd nginx-jaeger # Dockerfileをビルドします。 docker build --rm --tag nginx-jaeger:0.1 .Dockerを実行します。
docker run --rm -p 80:80 -e "GRPC_HOST=${GRPC_HOST}" -e "GRPC_AUTH=${GRPC_AUTH}" -d jaeger-nginx:0.1${GRPC_HOST}変数と${GRPC_AUTH}変数を、「前提条件」で取得したエージェントのエンドポイント情報に設定します。例:
docker run --rm -p 80:80 -e "GRPC_HOST=tracing-analysis-dc-hz.aliyuncs.com:1883" -e "GRPC_AUTH=123abc@123abc_789abc@456abc}" -d jaeger-nginx:0.1
ECSインスタンスでのNGINXのデプロイとトレース
次のコマンドを実行してNGINXをインストールします。
NGINXのソースコードをダウンロードして解凍します。
wget http://nginx.org/download/nginx-1.14.2.tar.gz tar -xzvf nginx-1.14.2.tar.gzNGINXのソースコードをコンパイルします。
cd nginx-1.14.2 ./configure --with-compat make sudo make install
OpenTracingをインストールします。
OpenTracingパッケージをダウンロードして解凍します。
wget https://github.com/opentracing-contrib/nginx-opentracing/releases/download/v0.7.0/linux-amd64-nginx-1.14.0-ngx_http_module.so.tgz tar -xzvf linux-amd64-nginx-1.14.0-ngx_http_module.so.tgz.soファイルをNGINXのmodulesフォルダにコピーします。フォルダが存在しない場合は、フォルダを作成します。
sudo mkdir /usr/local/nginx/modules sudo cp ngx_http_opentracing_module.so /usr/local/nginx/modules/ngx_http_opentracing_module.so
Jaegerを使用してトレース分析を実行します。
Jaegerを作業ディレクトリにダウンロードします。
wget https://github.com/jaegertracing/jaeger-client-cpp/releases/download/v0.4.2/libjaegertracing_plugin.linux_amd64.so sudo cp /usr/local/lib/libjaegertracing_plugin.so /usr/local/lib/libjaegertracing.so/usr/local/nginx/conf/nginx.confファイルを構成します。
load_module modules/ngx_http_opentracing_module.so; events {} http { opentracing on; opentracing_load_tracer /usr/local/lib/libjaegertracing_plugin.so /etc/jaeger-config.json; server { error_log /var/log/nginx/debug.log debug; listen 80; location ~ { opentracing_operation_name $uri; opentracing_trace_locations off; // プロキシに移動するために使用するサービス。ビジネス要件に基づいて値を設定します。 proxy_pass http://127.0.0.1:8081; opentracing_propagate_context; } } }説明パラメータの詳細については、opentracing-contribを参照してください。
/etc/jaeger-config.jsonファイルでJaegerパラメータを設定します。
{ "service_name": "nginx", // サンプリングレートを指定します。 "sampler": { "type": "const", "param": 1 }, "reporter": { "localAgentHostPort": "localhost:6831" } }次のいずれかの方法を使用してJaegerエージェントを構成します。
セルフマネージドJaegerサービスを使用する場合は、ネイティブのJaegerエージェントをダウンロードし、collector.host-portパラメータを設定します。
nohup ./jaeger-agent --collector.host-port=10.100.**.**:142** 1>1.log 2>2.log &Alibaba Cloudによって管理されているJaegerサービスを使用する場合は、トレース分析エージェントをダウンロードします。次に、collector.host-portパラメータを設定してエージェントを起動します。これにより、トレース分析にデータを報告できます。
<endpoint>パラメータを、「前提条件」で取得したエンドポイントに設定します。「前提条件」で取得したエンドポイントの末尾にある「/api/traces」を削除します。たとえば、<endpoint>パラメータを
http://tracing-analysis-dc-sh.aliyuncs.com/adapt_abc123@abc123_efg123@efg123に設定できます。# collector.host-portはエンドポイントを指定します。エンドポイントはリージョンによって異なります。例: nohup ./tracing-analysis-agent-linux-amd64 --collector.host-port=<endpoint>
NGINXを実行し、NGINXサービスにアクセスします。
sudo /usr/local/nginx/sbin/nginx curl "http://localhost"
他の環境でのNGINXのデプロイとトレース
コンテナレジストリからイメージをプルします。
docker pull registry.cn-hangzhou.aliyuncs.com/public-community/jaeger-nginx:0.1DockerコンテナでNGINXを実行します。
docker run --rm -p 80:80 -e "GRPC_HOST=${GRPC_HOST}" -e "GRPC_AUTH=${GRPC_AUTH}" -d registry.cn-hangzhou.aliyuncs.com/public-community/jaeger-nginx:0.1${GRPC_HOST}変数と${GRPC_AUTH}変数を、「前提条件」で取得したエージェントのエンドポイント情報に設定します。例:
docker run --rm -p 80:80 -e "GRPC_HOST=tracing-analysis-dc-hz.aliyuncs.com:1883" -e "GRPC_AUTH=123abc@123abc_789abc@456abc}" -d jaeger-nginx:0.1ブラウザを使用してNGINXページに移動します。
ブラウザのアドレスバーに「localhost/nginx.conf」と入力するか、「curl "localhost/nginx.conf"」と入力してNGINXページに移動します。
結果の確認
ARMSコンソールにログインします。左側のナビゲーションペインで、を選択します。「アプリケーション」ページで、アプリケーションの名前をクリックします。表示されるページで、トレースデータを表示します。
アイコンが 言語 列に表示されている場合は、アプリケーションは Application Monitoring に接続されています。ハイフン (-) が表示されている場合は、アプリケーションは Managed Service for OpenTelemetry に接続されています。
