nginx 오류 로그 분석

nginx 오류 로그 분석

나는 다음을 달성하는 방법을 찾고 있습니다.

이것은 nginx 오류 로그의 한 줄입니다.

2014/12/29 21:17:57 [error] 30078#0: *311826 openat() "/var/www/html/images/images/Outlet-Celine-Boston-Square-Calfskin-Bags-Red_celine_2140_1.jpg" failed (2: No such file or directory), client: 207.46.13.42, server: server.domain.tld, request: "GET /images/images/Outlet-Celine-Boston-Square-Calfskin-Bags-Red_celine_2140_1.jpg HTTP/1.1", host: "www.buylvneverfullpm.net"

수천 개가 더 있으므로 방법이 필요합니다.

  1. 행에 'host: "*"'가 포함되어 있는지 확인합니다. 여기서 *는 URL입니다.
  2. 호스트 값 가져오기: "www.xxx.yyy"
  3. 처음에 www를 제거하세요.
  4. 각 xxx.yyy의 발생 횟수를 계산합니다.
  5. 각 고유 호스트 값의 발생을 가장 높은 값에서 가장 낮은 값으로 정렬합니다.

나는 다음을 사용하고 있습니다 :

awk '($20 ~ /GET/)' /var/log/nginx/error_log | awk '{print $24}' | sort | uniq -c | sort -rn

그러나 "www"는 제거되지 않으므로 중복된 항목이 있습니다.

답변1

그냥 awk당신을 위해 모든 것을 처리

awk '$20 ~ /GET/{gsub(/"/, "", $24); sub(/[^.]*\./, "", $24); a[$24]++};
END{for (k in a)print k, a[k]}' /var/log/nginx/error_log

관련 정보