我的服务器的CPU使用率异常高,我可以看到Apache占用了太多内存.
我用下面的一行找到了10个最"活跃"的IP:
cat access.log | awk '{print $1}' |sort |uniq -c |sort -n |tail
排名前五位的IP对服务器的请求是"普通"用户的200倍.然而,我无法确定这5个人是否只是非常频繁的访客,或者他们正在攻击服务器.
是否有办法将上述搜索指定为一个时间间隔,例如最近两个小时或今天10-12之间?
干杯
UPDATED 23 OCT 2011 - The commands I needed:
在过go X小时内获取条目[此处为两小时]
awk -vDate=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date) print Date FS $4}' access.log
在过go 的X小时内获得最活跃的IP[此处为两小时]
awk -vDate=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date) print $1}' access.log | sort |uniq -c |sort -n | tail
在相对时间跨度内获取条目
awk -vDate=`date -d'now-4 hours' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date && $4 < Date2) print Date FS Date2 FS $4}' access.log
在绝对时间范围内获取条目
awk -vDate=`date -d '13:20' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'13:30' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date && $4 < Date2) print $0}' access.log
在绝对时间范围内获得最活跃的IP
awk -vDate=`date -d '13:20' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'13:30' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date && $4 < Date2) print $1}' access.log | sort |uniq -c |sort -n | tail