还在睡梦中~ZZZZZ。
老大:喂,客户那里有些疑问,平时一天的日志量只有100多M,今天的居然有1个多G,快去看看怎么回事。嘟,嘟,嘟。。。
作者:精神抖擞,赶紧爬起来要了份日志,着手准备分析。
作者:日志量过大,说明里面可能有扫描、爆破、爬虫等等操作,那么先提取出出现次数最多前几位IP,分析是否有以上行为。
ps:老大看到后别批我0-0 ,同时也谢谢7师傅的帮助@evil7
二、日志分割
一般的编辑器无法直接打开大文件文本,如超过4个G大的log文本 。那么该如何做?直接拖到linux主机下用cat vim等相关命令加载,但是加载速度太慢,在此不做推荐。下面介绍利用shell下的split命令切割log文件。
spl
it [-bl] file [prefix]
split命令参数说明:
-b, 按大小进行切分。可以指定单位BB,KB,MB。-l, 按行数进行切分。
-d, 使用数字后缀。
-a, 指定后缀的长度。
prefix:分割后产生的文件名前缀。
这里我要分割1.log(大小为1个G左右)文件,分成每份300MB,并且前缀为file+三位的数字后缀,那么对应的命令是:
split -b 300MB 1.log -d -a 3 file
这里只做演示,其实1个G的文件,直接cat加载后进行后续操作简单些~比如剔除操作啥的。
这里只做演示,其实1个G的文件,直接cat加载后进行后续操作简单些~比如剔除操作啥的。
二、日志剔除
我们可以看到日志的格式为酱紫的~ 也算符合常规的格式。那么想要统计IP出现次数,就需要将每行 – - 之后的所有内容替换为空,使用命令为:
那么想要统计IP出现次数,就需要将每行 – - 之后的所有内容替换为空,使用命令为:
cat 1.log | sed -e 's/ - -.*//g' > out1.log
sed命令参数说明:
-e 以选项中指定的script来处理输入的文本文件(常用于正则表达式)
s 替换指定字符
g 替换每一行内的所有匹配
.* 表示后面任意长度的任意字符
我们打开剔除后的文件out1.log
三、日志排序
三、日志排序
杂乱无章的日志IP,得将其排序后才能方便阅读。
使用sort命令如下:
sort out1.log > out2.log
打开out2.log,发现已经按照IP的ASCII排序
当然,也可以不用排序直接进行统计,只是为了演示~
四、日志统计
从这里开始,就可以对日志进行统计,附上python脚本:
本python脚本适用于常见格式的web日志。如格式不同,则需要自己修改使用。
提取出出现次数大于1000的IP。
发现有两个IP的次数大于5000次,得重点关注下。
发现有两个IP的次数大于5000次,得重点关注下。
五、日志去重
如果想要将上述的日志排序后的结果进行去重,那么使用如下命令:
sort -u out2.log > out3.log
打开out3.log后:
#p#分页标题#e#
已经去重完毕。
已经去重完毕。
六、应急总结
本次应急日志处理其实还没结束。由于篇幅原因,下次会继续写后续操作。