实践nginx日志简单的统计

公司没有日志采集平台,又不太可能在业务系统里面搞事情。好在之前有玩过elk日志分析组合。直接从服务器上面撸出日志简单的用linux命令分析下吧。

Nginx日志统计(简单的)

(日志文件叫access.log 在当前目录下)

统计 PV,就是日志行数

cat access.log |wc -l

UV, 即是统计 IP 数

cat access.log |awk '{print $1}' |sort |uniq -c |wc -l

使用linux grep 进行统计

grep -E "POST|GET" access.log | awk -F '"' '{print $2,$3}' | awk '{print $2}'| sort | uniq -c | sort -k1nr | head -100

耗时的请求发生时间、所请求的 URI 和耗时

cat access.log | awk '{print $4,$7,$10,$NF}' | sort -k3 -nr | head -100

统计nginx访问频次最高的100Ip**

grep -E "POST|GET" access.log | awk -F '"' '{print $(NF-1)}' | sort | uniq -c | sort -k1nr | head -100

统计nginx访问不正常(状态码400+)的前100url和频次

grep -E "POST|GET" access.log | awk -F '"' '{print $2,$3}' | awk '{if ($4>="400") {print $4,$1,$2}}' | sort | uniq -c | sort -k1nr | head -100

统计nginx访问状态码非200的前100个url和频次**

grep -E "POST|GET" access.log | awk -F '"' '{print $2,$3}' | awk '{if ($4!=200) {print $4,$1,$2}}' | sort | uniq -c | sort -k1nr | head -100

不同 URI 的平均耗时

grep -E "POST|GET" access.log | awk '{s[$10] += $NF;c[$10]++}END{for(i in s){print i,s[i]/c[i]}}' |sort -k2 -nr | head

每秒请求量统计

统计每秒的请求数,top100的时间点(精确到秒)

grep -E "POST|GET" access.log | awk '{print $4}' access.log |cut -c 14-21|sort|uniq -c|sort -nr|head -n 100

每分钟请求量统计

统计每分钟的请求数,top100的时间点(精确到分钟)

grep -E "POST|GET" access.log | awk '{print $4}' access.log |cut -c 14-18|sort|uniq -c|sort -nr|head -n 100

每小时请求量统计

统计每小时的请求数,top100的时间点(精确到小时)

grep -E "POST|GET" access.log | awk '{print $4}' access.log |cut -c 14-15|sort|uniq -c|sort -nr|head -n 100

统计蜘蛛抓取次数

grep 'Baiduspider' access.log |wc -l