リクエストキューのサーバーの設定例

リクエストキューイングをレポートするために、New Relic エージェントは、(Apache や Nginx のような)フロントエンドの Web サーバーやロードバランサ(例えば HAProxy、F5 など)に設定されたHTTPヘッダーに依存します。ここでの例は、プラットフォーム間でより広範にサポートされているX-Request-Start ヘッダーを使います。

サーバー設定でこれが動作していない場合は、X-Queue-Start ヘッダーを使用してみてください。通常は、X-Request-Start を利用してください。

Apache

Apache の mod_headers モジュールは、正しくフォーマットされた変数 %t があります。Apacheの設定にこのコードを追加することで、リクエストキューのレポートを有効にします。

RequestHeader set X-Request-Start "%t"

Nginx

バージョン1.2.6以降の Nginx と Ruby、Python、PHP 用の最新バージョンのエージェントを使用しているならば、Nginx がキューの時間をレポートするための設定を簡単に行えます。(Nginxのバージョン1.2.6以前の場合は、Nginx をモジュールまたはパッチを使用して再コンパイルする必要があります。)

Nginx の1.2.6以降の設定では ${msec} 変数を使えます。これは、ミリ秒の精度の秒数を表します。詳細については、http://nginx.org/en/docs/http/ngx_http_core_module.html#variables をご覧ください。

Nginxの設定ファイルに適切な情報を追加します。

Nginxの設定
一般的には次の値を使用する proxy_set_header X-Request-Start "t=${msec}";
Passenger

バージョン 5 以上:

passenger_set_header X_REQUEST_START "t=${msec}";

古いバージョン:

passenger_set_cgi_param HTTP_X_REQUEST_START "t=${msec}";

fastcgi fastcgi_param HTTP_X_REQUEST_START "t=${msec}";
uWSGI uwsgi_param HTTP_X_REQUEST_START "t=${msec}";

Varnish

New Relicのユーザーは、Varnishにパッチ ヘッダーを追加します。ありがとう!ジェイコブ!

F5 ロードバランサ

F5 ロードバランサの場合は、以下の設定のスニペットを使用してください。

  when HTTP_REQUEST_SEND {
    # TCL 8.4 so we have to calculate the time in millisecond resolution
    # Calculation from: https://groups.google.com/forum/?  fromgroups=#!topic/comp.lang.tcl/tV9H6TDv0t8
    set secs [clock seconds]
    set ms [clock clicks -milliseconds]
    set base [expr { $secs * 1000 }]
    set fract [expr { $ms - $base }]
    if { $fract >= 1000 } {
      set diff [expr { $fract / 1000 }]
      incr secs $diff
      incr fract [expr { -1000 * $diff }]
    }
    set micros [format "%d%03d000" $secs $fract]

  # Want this header inserted as if coming from the client
    clientside {
      HTTP::header insert X-Request-Start "t=${micros}"
    }
  }
  

ネットワークタイミング

設定済みのリクエストキューイングでさえも、フロントエンド用サーバーのセットアップは、ページ読み込みタイミング(リアルユーザー監視、RUMとも呼ばれる)においてネットワーク時間に影響を与える可能性がまだあります。なぜなら、フロントエンド用サーバーが実際にリクエストを受け入れ、処理するまで、そのサーバーは、キューイング時間をヘッダーに追加しないからです。

キューイング時間のヘッダーは、このリスナーソケット内でバックログを占めることはできません。リクエストがバックログを起動し、フロントエンドサーバーが接続を受け付けるために使用するリスナーソケットでキューに入れるなど、いくつかの方法がフロントエンドサーバーに設定されている場合、ページ読み込みタイミングのネットワーク時間が増加していることがわかるでしょう。

関連情報

関連情報は次のとおりです。