日志分析
一、 应急背景
日志量过大,说明里面可能有扫描、**、爬虫等等操作,那么先提取出出现次数最多前几位IP,分析是否有以上行为。二、日志分割
一般的编辑器无法直接打开大文件文本,如超过4个G大的log文本 。那么该如何做?直接拖到linux主机下用cat vim等相关命令加载,但是加载速度太慢,在此不做推荐。下面介绍利用shell下的split命令切割log文件。
split [-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加载后进行后续操作简单些~比如剔除操作啥的。
二、日志剔除
我们可以看到日志的格式为酱紫的~ 也算符合常规的格式。那么想要统计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次,得重点关注下。
五、日志去重
如果想要将上述的日志排序后的结果进行去重,那么使用如下命令:
sort -u out2.log > out3.log
打开out3.log后:
已经去重完毕。