当前位置: 代码迷 >> 综合 >> 使用Linux命令分析Nginx日志文件
  详细解决方案

使用Linux命令分析Nginx日志文件

热度:90   发布时间:2024-01-30 22:09:11.0

常见日志格式:

$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"'

 

统计 IP 访问次数:

# awk '{a[$1]++}END{for(v in a)print v,a[v]}' access.log

 

统计访问量大于 100 次的 IP:

# awk '{a[$1]++}END{for(v in a){if(a[v]>100)print v,a[v]}}' access.log

 

统计访问 IP 次数并排序取前 top10:

# awk '{a[$1]++}END{for(v in a)print v,a[v] |"sort -k2 -nr |head -10"}' access.log

 

统计某时间段访问最多的 IP:

# awk '$4>="[02/Jan/2017:00:02:00" && $4<="[02/Jan/2017:00:03:00"{a[$1]++}END{for(v in a)print v,a[v]}' access.log

 

统计上一分钟访问量:

# date=$(date -d '-1 minute' +%d/%d/%Y:%H:%M)# awk -vdate=$date '$4~date{c++}END{print c}' access.log

统计访问最多的 10 个页面:

# awk '!/.js|.css|.png|.gif|.svg|ImageEngine|.jpg|.jpeg|.mp4/{a[$7]++}END{for(v in a) print v,a[v] | "sort -k2 -nr|head -10"}' access.log# awk '{a[$7]++}END{for(v in a)print v,a[v] |"sort -k2 -nr|head -n 10"}’ access.log

 

统计每个 URL 数量和返回内容总大小:

# awk '{a[$7]++;size[$7]+=$10}END{for(v in a)print a[v],v,size[v]}' access.log

 

统计每个 IP 访问状态码数量:

# awk '{a[$1" "$9]++}END{for(v in a)print v,a[v]}' access.log

 

统计访问 IP 是 404 状态次数:

# awk '{if($9~/404/)a[$1" "$9]++}END{for(i in a)print v,a[v]}' access.log

 

统计访问URL统计PV:

# awk '{print $7}' /usr/local/nginx/logs/access.log|wc -l# awk '{print $1}' access.log|sort|uniq -c

根据访问IP统计UV:

# awk '{print $1}' /usr/local/nginx/logs/access.log|sort | uniq -c |wc -l

查询访问最频繁的IP

# awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|head -n 50

查询访问最频繁的URL

# awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|head -n 50

nginx当前并发数

netstat -ant | grep :80 | awk '{print $5}' | awk -F":" '{print $1}'| sort | uniq -c | sort -r -n | awk 'BEGIN{total=0}{total+=$1}END{print total}'

 

6、查询时间段内的访问日志(404),统计出访问IP及其访问次数

tac access.log | grep "HTTP/1.1\" 404" | awk -v st="15/Oct/2018:14:58:47" -v et="15/Oct/2018:14:59:47" '{t=substr($4,RSTART+2,21);if(t>st && t<=et) {print $0}}' | awk '{print $1}' | sort | uniq -c | sort -nr

 

其他命令

 ls -l|awk 'BEGIN{sum=0} !/^d/{sum+=$5} END{print "total size is",sum}'                    //计算文件大小

 

命令使用实例

tac dossier_access_2020-05-14.log | grep "/rest/" | awk -v st="12/May/2020:00:00:01" -v et="13/May/2020:00:00:01" '{t=substr($4,RSTART+2,21);if(t>st && t<=et) {print $0}}' | awk '{print $1}' | sort | uniq -c | sort -nrtac dossier_access_2020-05-14.log | grep "/rest/" | awk -v st="13/May/2020:00:00:01" -v et="14/May/2020:00:00:01" '{t=substr($4,RSTART+2,21);if(t>st && t<=et) {print $0}}' | awk '{print $1}' | sort | uniq -c | sort -nrtac dossier_access_2020-05-14.log | grep "HTTP/1.1\" " | awk -v st="14/May/2020:00:00:01" -v et="15/May/2020:00:00:01" '{t=substr($4,RSTART+2,21);if(t>st && t<=et) {print $0}}' | awk '{print $1}' | sort | uniq -c | sort -nr