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
실제로는 많은 웹 서버 로그 파일 분석기 중 하나를 사용해야 합니다(예: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 스크립트는 주어진 요청에 대한 응답 시간이 두 번째 필드( $(NF-1)
)에 있다는 가정을 기반으로 합니다. nginx 서버에 대해 구성한 로그 파일 형식이나 각 줄의 마지막 몇 필드가 무엇인지 알려주지 않았기 때문에 여기에서 추측해야 합니다.