Text-Processing
分析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"
還有數千個,所以我需要一種方法:
- 查找一行是否包含 ‘host: “*"’,其中 * 是 url
- 獲取主機的值:“www.xxx.yyy”
- 去掉開頭的 www
- 計算每個 xxx.yyy 出現的次數
- 將每個唯一主機值的出現次數從高到低排序。
我一直在使用以下內容:
awk '($20 ~ /GET/)' /var/log/nginx/error_log | awk '{print $24}' | sort | uniq -c | sort -rn
但由於它沒有去掉“www”,所以有重複的條目。
只需
awk
為您處理一切awk '$20 ~ /GET/{gsub(/"/, "", $24); sub(/[^.]*\./, "", $24); a[$24]++}; END{for (k in a)print k, a[k]}' /var/log/nginx/error_log