1.背景
最近网站数据库性能很不稳定,查询性能在某段时间很慢,服务器CPU也很高,平常时间很低,感觉被爬虫恶意搞了,因此我分析了一下最近的nginx访问日志
2.方法
找出访问量最大20个ip
[root@100 nginx]# cat liuhaihua.access.log | awk -F " " '{print $1}' |sort |uniq -c |sort -rn|head -n 20
217636 47.76.99.127
217605 47.76.209.138
39006 66.249.74.72
38747 66.249.71.40
33965 216.244.66.244
29643 66.249.74.73
29207 14.153.238.144
28882 129.211.163.247
28485 14.155.183.120
23862 66.249.79.167
21645 14.153.233.199
19477 66.249.74.74
18979 14.155.230.15
17436 66.249.71.41
14782 66.249.69.35
13284 47.94.150.2
12954 66.249.70.71
12742 14.155.204.218
12728 14.153.241.201
解释:uniq的一个特性,检查重复行的时候,只会检查相邻的行。重复数据,肯定有很多不是相邻在一起的;所以需要先进行排序,然后进行统计,再进行逆向排序。
参数解读:
sort:
-r:逆序输出排序结果
-n:根据字符串数值比较
uniq:从输入文件或者标准输入中筛选相邻的匹配行并写入到输出文件或标准输出。
-c:在每行前加上表示相应行目出现次数的前缀编号
查询某个IP的详细访问情况,按访问频率排序
[root@100 nginx]# grep '47.76.99.127' liuhaihua.access.log |awk '{print $7}'|sort |uniq -c |sort -rn |head -n 100
1641 /archives/497017.html
1038 /archives/503168.html
238 /
156 /js/libs/jquery-confirm.min.js
147 /js/libs/jquery.lazyload.min.js
142 /js/libs/nprogress.min.js
142 /js/libs/jquery.fancybox.min.js
141 /js/zhyd.js
.....................
查看这个ip今天出现的次数
grep "47.76.99.127" /var/log/nginx/liuhaihua.access.log | grep "$(date +%d/%b/%Y)" | awk -F'"' '{print $2}' | awk '{print $2}'
这个命令的作用是:
grep "47.76.99.127"
:过滤出包含该IP地址的日志行。grep "$(date +%d/%b/%Y)"
:进一步过滤出包含今天日期的日志行。wc -l
:统计这些行的数量。
查看这个IP今天访问的路径
grep "47.76.99.127" /var/log/nginx/liuhaihua.access.log | grep "$(date +%d/%b/%Y)" | awk -F'"' '{print $2}' | awk '{print $2}'
这个命令的作用是:
grep "47.76.99.127"
:过滤出包含该IP地址的日志行。grep "$(date +%d/%b/%Y)"
:进一步过滤出包含今天日期的日志行。awk -F'"' '{print $2}'
:提取出请求行(通常是第二个字段)。awk '{print $2}'
:从请求行中提取出请求的URL路径(通常是第二个字段)。
图形化nginx访问日志神器
安装
yum install goaccess
命令查看
goaccess liuhaihua.access.log
生成静态文件
goaccess liuhaihua.access.log -o report.html --log-format=COMBINED