有时候服务器没有实时状态监控,就只能从nginx的access.log中分析出一些有用信息。注意,以下的分析语句是根据nginx默认的access.log格式写的默认的格式例子如下:
1
2
3
?
59.62.00.00–[02/Oct/2014:21:30:07+0800]”GET /nz_102/index.html HTTP/1.1″2005760″http://tgp.qq.com/””Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 SE 2.X MetaSr 1.0″”-“
?1、获取访问的并发数量, 输出排名前十的数据
1
2
3
?
cat access.log|awk'{if($9~/200|30|404/)COUNT[$4]++}END{for( a in COUNT) print a,COUNT[a]}’|sort-k2-nr|head-n10
?
示例结果:前面一列是时间,后面一列是那一秒的请求数量
2、统计http status的数量
1
2
3
?
cat access.log|awk'{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}’|sort-k2-nr
?
示例结果:前面一列是状态,后面这个状态的数量。
3、指定文件类型的并发统计
下面这段是统计php的并发数量
1
2
3
?
cat2014-10-02_access.log??|awk'{if($7~/php/)COUNT[$4]++}END{for(a in COUNT)print a, COUNT[a]}’|sort-k2-nr|head-n10
?
如果需要统计其他文件类型或者文件名,自行替换语句中间的php。示例结果:
1
2
3
4
5
6
7
8
9
10
11
12
?
????[02/Oct/2014:21:02:521451
????[02/Oct/2014:21:04:221425
????[02/Oct/2014:21:29:531404
????[02/Oct/2014:21:29:541370
????[02/Oct/2014:21:30:101343
????[02/Oct/2014:21:32:101331
????[02/Oct/2014:21:34:251318
????[02/Oct/2014:21:34:551311
????[02/Oct/2014:21:31:401302
????[02/Oct/2014:21:04:521301
?4、每分钟的访问数量
1
2
3
?
grep’02/Oct/2014’access.log|awk??-F\:'{COUNT[$2″:”$3]++}END{for(a in COUNT)print a, COUNT[a]}’|sort-k2-nr|head-n10
?
示例是统计2014-10-02 每分钟的访问数量,并且显示前10名.示例结果:
1
2
3
4
5
6
7
8
9
10
11
12
?
????21:30250429
????21:31227880
????21:32220308
????21:33215413
????21:34213722
????21:29208310
????21:01205644
????21:35205287
????21:02202455
????21:36200107
?5、访问最多的页面排行
1
2
3
?
cat access.log??|??awk'{split($7,b,”?”);COUNT[b[1]]++;}END{for(a in COUNT) print??COUNT[a], a}’|sort-k1-nr|head-n10
?
此示例会忽略掉url中?
后面的部分。示例结果:
1
2
3
4
5
6
7
8
9
10
11
12
?
7328281/comm-htdocs/js/index/attent.js
7300401/comm-htdocs/js/index/download_1.js