nginx
各APIを時間別または分単位でログの最大応答時間と平均応答時間を計算したいと思います。
nginx.log
サンプル:
10.1.1.1 - - [25/Aug/2019:05:26:30 +0700] "POST /v2/api/find/outlet/ HTTP/1.1" 200 2667 "-" "okhttp/3.12.0" "118.215.153.47" 0.178 0.178 .
10.1.1.1 - - [25/Aug/2019:05:26:30 +0700] "POST /v2/api/find/outlet/ HTTP/1.1" 200 2847 "-" "okhttp/3.12.0" "189.246.151.188" 0.177 0.178 .
10.1.1.1 - - [25/Aug/2019:05:27:52 +0700] "GET /v2/api/menu/category HTTP/1.1" 401 40 "-" "okhttp/3.12.0" "139.194.84.246" 0.007 0.007 .
10.1.1.1 - - [25/Aug/2019:05:27:52 +0700] "GET /v2/api/user/point HTTP/1.1" 200 152 "-" "okhttp/3.12.0" "202.80.217.172" 0.028 0.028 .
10.1.1.1 - - [25/Aug/2019:05:27:52 +0700] "GET /v2/api/user/destination HTTP/1.1" 200 169 "-" "okhttp/3.12.0" "36.91.42.35" 0.019 0.019 .
10.1.1.1 - - [25/Aug/2019:05:28:52 +0700] "POST /v2/api/transaction/inquiry HTTP/1.1" 200 503 "-" "okhttp/3.12.0" "36.89.234.129" 0.374 0.374 .
10.1.1.1 - - [25/Aug/2019:05:28:52 +0700] "POST /v2/api/transaction/confirm HTTP/1.1" 200 874 "-" "okhttp/3.12.0" "36.89.234.129" 0.394 0.394 .
10.1.1.1 - - [25/Aug/2019:05:28:52 +0700] "GET /v2/api/user/point HTTP/1.1" 200 152 "-" "okhttp/3.12.0" "114.5.147.117" 0.024 0.024 .
10.1.1.1 - - [25/Aug/2019:05:28:52 +0700] "GET /v2/api/menu/category HTTP/1.1" 403 40 "-" "okhttp/3.12.0" "139.194.84.246" 0.003 0.003 .
予想されるサンプルは次のとおりです。
date | api | max| avg
25/Aug/2019:05:26 /v2/api/find/outlet 2847 2757
25/Aug/2019:05:27 /v2/api/menu/category HTTP/1.1 1847 1757
25/Aug/2019:05:28 /v2/api/menu/category HTTP/1.1 1147 1257
私はこれを試しましたが、awk
平均だけを得ました。
awk '/25\/Aug\/2019:18/ {c++} END{print c}' access.log
ありがとう
答え1
実際には、多くのWebサーバーログファイルアナライザの1つを使用する必要があります(例:https://goaccess.io/@Bartが提案したように。いくつかの選択肢を含む素晴らしい概要LinuxとUnixのための7つの素晴らしいオープンソース分析ソフトウェア、Google でより多くの情報を見つけることができますが、高速で汚れたハッキングには次の方法を使用できます。
awk -v OFS='\t' '
$0 ~ date { max[$7]+=$(NF-1); count[$7]++ };
END {
print "date","api","count","max","avg";
for (i in max) {
print date, i, count[i], max[i], max[i]/count[i] }
}' \
date="25/Aug/2019" nginx.log
あなたの例による出力は次のとおりです(フィールドはスペースではなくタブで区切られます)。
date api count max avg
25/Aug/2019 /v2/api/find/outlet/ 2 0.356 0.178
25/Aug/2019 /v2/api/user/destination 1 0.019 0.019
25/Aug/2019 /v2/api/transaction/inquiry 1 0.374 0.374
25/Aug/2019 /v2/api/user/point 2 0.052 0.026
25/Aug/2019 /v2/api/transaction/confirm 1 0.394 0.394
25/Aug/2019 /v2/api/menu/category 2 0.01 0.005
しかし、上記のawkスクリプトは、与えられた要求に対する応答時間が2番目のフィールド($(NF-1)
)にあるという仮定に基づいています。 nginxサーバー用に設定したログファイルの種類、または各行の最後のいくつかのフィールドが何であるかを教えていないため、ここで推測する必要があります。