コンテンツにスキップ

OpenResty

設定

DDTrace の設定

Tracing モジュールのダウンロード

https://github.com/DataDog/nginx-datadog/releases にアクセスし、Assets から現在の CPU アーキテクチャーとバージョンに一致するモジュール openresty-ngx_http_datadog_module-<処理器アーキテクチャ>-<バージョン>.so.tgz を探してダウンロードします。

Tracing のインストール

  • モジュール用のパスを作成します
cd /usr/local/openresty/nginx
mkdir modules && cd $_
  • 展開します
root@root:/usr/local/openresty/nginx/modules$  tar xzvf openresty-ngx_http_datadog_module-<処理器アーキテクチャ>-<バージョン>.so.tgz

Nginx の設定

/usr/local/openresty/nginx/samples/nginx.conf に以下の内容を追加します。

# モジュールを読み込む
load_module modules/ngx_http_datadog_module.so;

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    # Datakit URL を設定
    datadog_agent_url http://localhost:9529;
    # サービス名を設定
    datadog_service_name openresty-demo;
    # 環境名を設定
    datadog_environment test;
    # バージョン名を設定
    datadog_version 1.0.0;
    # サンプリング率を設定 0-1.0
    datadog_sample_rate 1.0;
    # タグを設定
    datadog_tag foo bar;

    include       mime.types;
    default_type  application/octet-stream;

    # $datadog_trace_id と $datadog_span_id により、ログへ trace_id と span_id を追加します。いずれも 16 進数です
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"'
                      '"$datadog_trace_id" "$datadog_span_id"';

    access_log  logs/access.log  main;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

OpenResty の再起動

省略

DataKit 収集の有効化

  • ddtrace を有効にします
cd /usr/local/datakit/conf.d/samples/
cp ddtrace.conf.sample ddtrace.conf
  • DataKit を再起動します
datakit service -R

OpenTelemetry の設定

ngx_otel_module モジュールのビルド

  • ビルドツールと依存関係をインストールします
sudo apt update

sudo apt install cmake build-essential libssl-dev zlib1g-dev libpcre3-dev

sudo apt install pkg-config libc-ares-dev libre2-dev # gRPC 用
  • OpenResty が使用している Nginx のバージョンとコンパイル設定を確認します
openresty -V

以下は出力例です。

openresty -V
#nginx version: openresty/1.25.3.2
#built with OpenSSL 1.1.1w  11 Sep 2023
#TLS SNI support enabled
#configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt='-O2 -DNGX_LUA_ABORT_AT_PANIC -I/usr/local/openresty/zlib/include -I/usr/local/openresty/pcre/include -I/usr/local/openresty/openssl111/include' --add-module=../ngx_devel_kit-0.3.3 ············
  • 対応バージョンの Nginx ソースコードをダウンロードします
git clone https://github.com/nginx/nginx.git
cd nginx
git checkout {OPENRESTY_NGINX_VERSION}  # 対応するバージョン Tag に切り替え

{OPENRESTY_NGINX_VERSION} を対応するバージョン Tag に置き換えます。たとえば 1.25.3.2 では、対応するバージョン Tag は release-1.25.3 です。

  • Nginx のビルド引数を設定します

nginx ソースコードのルートディレクトリで次のコマンドを実行します。

./auto/configure {NGINX_CONFIGURE_ARGUMENTS} --with-compat 

{NGINX_CONFIGURE_ARGUMENTS} は取得した configure arguments の内容で、--add-module に関連するパラメーター設定を削除したものです。

  • ngx_otel_module モジュールのソースコードをダウンロードします
cd ..
git clone https://github.com/nginxinc/nginx-otel.git
cd /nginx-otel
  • ngx_otel_module モジュールをビルドします

build ディレクトリを作成してそこに移動してビルドします。ビルド後、build ディレクトリに ngx_otel_module.so ファイルが生成されます。

mkdir build
cd build
cmake -DNGX_OTEL_NGINX_BUILD_DIR=/nginx/objs ..
make

ngx_otel_module モジュールを有効化する

  • ngx_otel_module.so モジュールファイルを nginx の modules ディレクトリへコピーします
mkdir -p /usr/local/openresty/nginx/modules/
cp ngx_otel_module.so /usr/local/openresty/nginx/modules/
  • nginx.conf を設定します

OpenResty でトレース連携を有効にするには、Nginx のメイン設定ファイル /usr/local/openresty/nginx/conf/nginx.conf で ngx_otel_module モジュールを読み込み、設定項目を追加する必要があります。なお、ngx_otel_module モジュールは現在 gRPC 方式による送信のみをサポートしており、HTTP 方式による送信はサポートしていません。ngx_otel_module モジュールの詳細なパラメーター設定については、ngx_otel_module ドキュメント を参照してください。

load_module modules/ngx_otel_module.so; # ngx_otel_module を読み込む
...
http {
    ...

    otel_exporter {
        endpoint "127.0.0.1:4317"; # gRPC エンドポイント
        #header Authentication "${GRPC_TOKEN}"; # 前提条件で取得した認証トークン
    }

    otel_trace on;                     # トレース連携を有効にする
    otel_service_name openresty-otel;  # アプリ名
    otel_trace_context propagate;      # 下流サービスへ Trace コンテキストを注入する
    ...
}
  • nginx.conf の設定が正しいか確認します
/usr/local/openresty/nginx/sbin/nginx -t
  • 設定を再読み込みします
# 方法1: openresty コマンドで設定を再読み込みする
openresty -s reload

# 方法2: nginx コマンドで設定を再読み込みする
/usr/local/openresty/nginx/sbin/nginx -s reload

DataKit 収集の有効化

  • OpenTelemetry コレクターを有効にします
# コレクター設定ファイルのディレクトリへ移動
cd /usr/local/datakit/conf.d/samples
# 設定ファイルを有効化
cp opentelemetry.conf.sample opentelemetry.conf
  • Datakit を再起動します
datakit service -R

フィードバック

このページは役に立ちましたか?