2013-07-19 16 views
13

いくつかのアップストリームアプリケーションサーバの前でロードバランサとしてnginxを使用しています。アプリケーションサーバログとの関連付けに使用するトレースIDを設定したいとします。何がNginxでそれを行うための最善の方法は、これのための良いサードパーティのモジュールですか?nginxロードバランサでトレースIDを設定する

そうでなければ、非常に簡単な方法はタイムスタンプ(おそらくそれが十分正確ではない場合は乱数を足したもの)を基にして、要求の余分なヘッダーとして設定することですが、ドキュメントでは唯一のset_headerコマンドですレスポンスヘッダを設定するためのものです。

答えて

19

ほとんどの場合、カスタムモジュールは必要ありません。 ヘッダーは、http_core_module (おそらく)固有の埋め込み変数の組み合わせで簡単に設定できます。例:

location/{ 
     proxy_pass http://upstream; 
     proxy_set_header X-Request-Id $pid-$msec-$remote_addr-$request_length; 
    } 

これは「31725-1406109429.299-127.0.0.1-1227」 のようなリクエストIDをもたらすであろうし、トレースIDとして機能するように、「十分にユニーク」でなければなりません。あなたのような何かを行うことができますので、1.11.0は、一意の識別子で新しい変数$request_idを追加

+0

で非常に素晴らしいリファレンスを参照してください。要求内で再利用するために変数に設定できますか?ログにも使用できるようにしますか?それ以外の場合は$ msecを2回呼び出すと別の値が生成されますので、 'set $ request_id $ pid- $ msec- $ remote_addr- $ request_length; 'のようなものを考えていますが、これまでのところ動作しませんでした – isapir

+6

私はこの 'set $ tid $ pid- $ msec- $ remote_addr- $ request_length- $ connection;'と 'proxy_set_header X-Tracing-Id $ tid;'を使用しています。 – sbange

+0

はい、私はそれも同様に動作するようにしました。ありがとうございました。 – isapir

0

私たちの生産環境では、このようなカスタムモジュールがあります。それは一意のトレースIDを生成することができ、その後、上流のサーバーに送るhttpヘッダーにプッシュされます。アップストリームサーバーは、特定のフィールドが設定されているかどうかをチェックし、値を取得してaccess_logに書き込みます。したがって、要求をトレースできます。

私はサードパーティ製のモジュールが同じように見えるだけです:nginx-operationid、それが役に立ちそうです。

36

nginxの:

location/{ 
     proxy_pass http://upstream; 
     proxy_set_header X-Request-Id $request_id; 
    } 

http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_id

+2

参考:$ request_idのドキュメントはこちらhttp://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_id –

+0

@AndrewNewdigateよろしくお願いします。Andrew私は今Gitterにいます。乾杯。 –

+0

これはいいです、私はこれを使用します、ありがとう! – sbange