web-dev-qa-db-ja.com

nginxロギング:Unixエポック以降のリクエスト時間をミリ秒単位でログに記録する方法はありますか?

私は知っています $msec logging parameter これは、ミリ秒の粒度でUnixエポック以降の要求時間を秒単位で示します。ただし、この形式にはピリオド「。」が含まれます。例えば「1407233265.472」。これは、ログファイルの解析に使用しているインポート機能の問題です。

リクエスト時間を合計ミリ秒で記録できるようにする方法(ログパラメータまたはプラグイン)はありますか?例えば「1407233265472」。必要に応じてnginxをコンパイルできます。

2
jamesc

これを実現するには2つの方法があります。最初のものは汚れていて、私はそれをお勧めしません-しかしそれは最速の方法です:

if ($msec ~ "(.*)\.(.*)") {
    set $Epoch_millis = "$1$2"
}

これははるかにクリーンですが、luaが必要です:

set_by_lua_block $Epoch_millis { return string.gsub(ngx.var.msec, "%.", "") }

次に、$ Epoch_millisをログに記録します

2
Sirk Johannsen

Sirkの回答を拡張すると、マップを使用して、10.3ミリ秒形式から小数点のない13桁のミリ秒エポック形式に変換することもできます。

map $msec $msec_no_decimal { ~(.*)\.(.*) $1$2; }

具体的には、DataDogは10.3形式を自動的に解析しませんが、13桁の形式を解析するため、このマップをnginx.confのhttp { ... }ブロック内に配置する必要がありました。

(sanigoの懸念に対処するため。nginxは小数点以下にゼロを埋め込むため、これは常に13桁に変換されます。)

0
xref