# 按分钟汇总统计访问量
cat server.log | grep "^2012-" | awk -F\: '{print $1" "$2":"$3}'|sort|uniq -c|more
# 按小时汇总统计访问量
cat server.log | grep "^2012-" | awk -F\: '{print $1" "$2"}'|sort|uniq -c|more
日志中的IP地址
WEB服务器日志(nginx,apache)中,通常第一列为客户端IP地址,取该段值进行排序、汇总,即可得到IP:访问次数的统计。
# 从日志中统计IP访问次数
cat server.log | awk '{print $1}'|sort|uniq -c|more
# 统计来访唯一IP数
cat server.log | awk '{print $1}'|sort|uniq|wc -l
网络连接状态
netstat命令可获取系统当前的侦听、连接状态,包括协议、源IP:端口、目标IP:端口、连接状态信息,取关注的列进行排序、汇总,即可获得连接数、状态等统计。
# TCP连接数
netstat -antp|grep ^tcp|awk '{print $5}'|awk -F\: '{print $1}'|sort|uniq -c|sort -nr
5 0.0.0.0
2 192.217.199.215
1 91.189.89.144
1 172.16.17.4
1 172.16.17.3
1 172.16.17.27
# TCP连接状态
netstat -antp|grep ^tcp|awk '{print $6}'|sort|uniq -c|sort -nr
17 ESTABLISHED
8 LISTEN
1 CLOSE_WAIT
# 根据Ficapy的反馈,使用awk的正则匹配进行过滤,减少前面的grep指令(谢谢Ficapy的提醒)
# 不过grep的过滤处理速度似乎比awk的正则匹配速度更快,因此对大日志分析时可能还是先用grep过滤效率更高
time cat netstat.txt |awk '/^tcp/ {print $6}'|sort|uniq -c|sort -nr
2713 TIME_WAIT
203 ESTABLISHED
29 FIN_WAIT1
18 LISTEN
17 FIN_WAIT2
real 0m0.017s
user 0m0.014s
sys 0m0.002s
time cat netstat.txt |grep ^tcp|awk '{print $6}'|sort|uniq -c|sort -nr
2713 TIME_WAIT
203 ESTABLISHED
29 FIN_WAIT1
18 LISTEN
17 FIN_WAIT2
real 0m0.008s
user 0m0.005s
sys 0m0.001s
# 其他awk匹配方式
cat netstat.txt |awk '{if($1=="tcp")print $6}'|sort|uniq -c|sort -nr
2713 TIME_WAIT
203 ESTABLISHED
29 FIN_WAIT1
18 LISTEN
17 FIN_WAIT2
cat netstat.txt |awk '$1=="tcp" {print $6}'|sort|uniq -c|sort -nr
2713 TIME_WAIT
203 ESTABLISHED
29 FIN_WAIT1
18 LISTEN
17 FIN_WAIT2
# 多条件匹配
cat netstat.txt |awk '/^tcp|^udp/ {print $1"-"$6}'|sort|uniq -c|sort -nr
2713 tcp-TIME_WAIT
203 tcp-ESTABLISHED
29 tcp-FIN_WAIT1
18 tcp-LISTEN
17 tcp-FIN_WAIT2
4 udp-32366/rpcbind
4 udp--
3 udp-32526/rpc.statd
2 udp-19339/rpc.mountd
1 udp-ESTABLISHED
1 udp-38143/gmond
1 udp-19335/rpc.rquotad
1 udp-1282/portreserve
cat netstat.txt |awk '{if($1~"^tcp" || $1~"^udp")print $1"-"$6}'|sort|uniq -c|sort -nr
2713 tcp-TIME_WAIT
203 tcp-ESTABLISHED
29 tcp-FIN_WAIT1
18 tcp-LISTEN
17 tcp-FIN_WAIT2
4 udp-32366/rpcbind
4 udp--
3 udp-32526/rpc.statd
2 udp-19339/rpc.mountd
1 udp-ESTABLISHED
1 udp-38143/gmond
1 udp-19335/rpc.rquotad
1 udp-1282/portreserve
cat netstat.txt |awk '{if($1=="tcp" && $6!~"ESTABLISHED")print $6}'|sort|uniq -c|sort -nr
2713 TIME_WAIT
29 FIN_WAIT1
18 LISTEN
17 FIN_WAIT2
URI、Agent统计
WEB服务器(apache,nginx,iis等)日志中,通常存有每个请求的URI、浏览器版本等信息,对其进行拆分、排序、汇总,即可获得各URI访问量统计。统计的命令与上面的类似。