7

nginx アクセス ログ形式を変更して、リクエスト期間を秒単位で含めようとしています。

使用できる可能性のある変数が 2 つあります。

1)$request_time

2)$upstream_response_time

ただし、これらの変数はどちらもマイクロ秒単位で表現されるため、この値を秒単位でレンダリングする必要があります。出力を式 (つまり$request_time * 1000) として指定する方法や、他の方法でこれを達成する方法はありますか?

ありがとう

4

2 に答える 2

11

ウェブサーバーは計算機や統計プログラムではありません。ロギング機能は、分析を行うための生データを提供することです。分析プログラムがマイクロ秒を秒に変換できない場合は、他のソフトウェアを探し回る必要があります。いずれにせよ、プログラムのロギング機能が単位変換を実行することを期待するのは現実的ではありません。ロギングの目的はフォーマットすることではなく、コア機能のパフォーマンスに影響を与えずに行ったことを記録することです。

于 2012-11-07T07:25:28.850 に答える
1

LogStash (ELK スタック) のようなレポーターを使用すると、ログを解析するときに計算を行うことができます。Nginx の Logstash フィルターで秒をミリ秒に変換する例を次に示します。

grok {
      match => {
        "message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"%{WORD:verb} %{URIPATHPARAM:logMessage} HTTP/%{NUMBER:httpversion}\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:\"(?:%{URI:referrer}|-)\"|%{QS:referrer}) %{QS:agent} rt=%{NUMBER:duration_sec} cid=%{GREEDYDATA:correlationId}"
      }
}
mutate { convert => [ "duration_sec", "float" ] }
ruby { code => "event['duration_ms'] = event['duration_sec'].to_f * 1000" }

お役に立てれば。

于 2016-02-10T09:02:49.040 に答える