【負荷試験】WireMockとPHPでミリ秒の遅延設定をする
saratogax
サラトガ牧場
Apache のアクセスログを見ていたら、リクエストの処理に掛かった時間が最後から 2 番目に出力されるログ設定になっていました。
ちなみに、%T が秒で、%D がマイクロ秒となるので、用途に合わせて出力しておくと調査時に便利です。
さて、そんな処理時間を調査する作業があったのですが、残念なことに出力される場所が UserAgent よりも後なので、単純に半角スペースで区切ってしまうと何番目かがわかりにくくなります。
そこで、NF(Number of Filed)と言う組み込み変数を使います。
これは該当レコードのフィールド数を持ってくれているので、これによって最後の項目が何番目かが分かります。
下記は nginx のアクセスログの例ですが、nginx は log_format に $request_time を定義していると、そこに処理時間を出力してくれます。
今回の場合は最後の項目でしたので、以下で一気に抜き取ります。
$ awk '{print $NF}' /var/log/nginx/access.log
0.003
0.003
0.003
0.002
0.003
これを応用して、後ろから 2 番目や 3 番目を特定してみます。
まずは 2 番目。要は最後からマイナス 1 をするという方法になります。
$ awk '{print $(NF - 1)}' /var/log/nginx/access.log
3 番目はマイナス 2 をするだけです。
$ awk '{print $(NF - 2)}' /var/log/nginx/access.log
同時に出力する場合は、こんな感じですね。
$ awk '{print $(NF - 2)" "$(NF - 1)}' /var/log/nginx/access.log