使用awk,sort和uniq从ATS访问日志中统计出异常链接域名的次数排名

使用awk,sort和uniq从ATS访问日志中统计出异常链接域名的次数排名

在运维过程中,发现portal中出现流量异常曲线,

就从排查ATS的访问日志中的异常域名开始,下面是我截获的对应时段的访问日志截图

发现里面有502,403等异常响应,我们将这段访问日志文件记为exception_peak.log。采用下面的命令来过滤出502的访问记录,并剥离出对应的访问链接的host,统计指定时段中的该host出现次数,最后逆序排名。

cat exception_peak.log | grep ‘ 502 ‘ | awk -F ‘”‘ ‘{print $2}’ | awk -F ‘/’ ‘{print $3}’ | sort | uniq -c | sort -nr > host_peak.log

这里说明如下:

grep ‘ 502 ‘ 只过滤出502的访问记录,

awk -F ‘”‘ ‘{print $2}’表示以双引号为分隔线,取第2段子域,也就是访问链接,

awk -F ‘/’ ‘{print $3}’表示从访问链接中提取出host

sort | uniq -c  表示现将可能重复的行放到一起,再去掉重复行,并标注每行重复的次数

sort -nr  表示按重复次数逆序排名

这样处理的结果将会被重定向到一个名为 host_peak.log的日志文件中,它的内容如下

这就是我们想要的效果。

注意:如果采用下面的命令

cat exception_peak.log | grep ‘ 502 ‘ | awk -F ‘”‘ ‘{print $2}’ | awk -F ‘/’ ‘{print $3}’ | awk ‘a[$1]+=1;END{for(i in a){print a[i]” “i;}}’ | sort -k1 -urn > host_peak.log

我们会发现有个小bug就是,数字ip的次数无法统计,参见下面的截图

另外,下面是可能需要用到的几个命令:

awk -F “/“ ‘{print $0}’
awk -F “/“ ‘{if ($1==502) print $2}’
awk -F “:“ ‘{print $1,$2}’
———————

awk删除文件的某一列

cat file |awk ‘ { $5=null;print $0 }’


实际的项目开发/测试中常用的统计命令;比如说项目开发完了,正在测试环中测试,这时候如果有一个脚本可以实时统计出php的errors.log日志中出现PHP Notice的错误,这是一件很棒的事情;(发现问题,及时反馈给项目的开发小伙伴)

cat /var/log/php/errors.log|grep ‘Undefined’|awk ‘{$2=null;print $0}’| sort | uniq -c|sort -nr

如图:

 

发表回复

京ICP备15027918号-1