应急响应基础(四)——Linux日志分析

Linux日志分析

Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。

大部分Linux发行版默认的日志守护进程为 rsyslog,位于 /etc/rsyslog 或 /etc/rsyslogd,默认配置文件为 /etc/rsyslog.conf,任何希望生成日志的程序都可以向 rsyslog 发送信息。

Linux系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写到日志文件中去。完成这个过程的程序就是rsyslog。

rsyslog可以根据日志的类别和优先级将日志保存到不同的文件中。例如,为了方便查阅,可以把内核信息与其他信息分开,单独保存到一个独立的日志文件中。默认配置下,日志文件通常都保存在“/var/log”目录下.

日志默认存放位置:/var/log/

查看日志配置情况:more /etc/rsyslog.conf

1、常见的日志文件及说明

日志文件 说明
/var/log/cron 记录了系统定时任务相关的日志
/var/log/dmesg 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/message 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件,但由于记录的信息太杂,一般不查看
/var/log/btmp 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看
/var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看
/var/log/utmp 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询
/var/log/secure 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中

2、日志分析技巧

(1)常用的shell命令

1.1> find命令:在目录中查找指定文件

选项:-name: 按照文件名搜索;通配符*表示匹配所有,?表示匹配单个字符;

           -iname: 按照文件名搜索,但不区分文件名的大小写;

1.2> grep命令:在文件中搜寻匹配的行并输出

选项: -i(忽略大、小写)    

            -v(反转查找)

            -r 是递归查找

           -n 是显示行号

           -R 查找所有文件包含子目录

           查找以某字符串为开头: "^某字符串"      例如:grep  "^#"  /etc/inittab

           查找以某字符串为结尾: "某字符串$"    例如:grep  ")$"  /etc/inittab

           查找空行:    "^$"       例如:grep  "^$"  /etc/inittab

1.3> awk命令:查找文本,输出匹配的内容

awk 由 2 部分组成,分别为匹配规则和执行命令,如:'匹配规则{执行命令}'

举个简单的例子:  awk '/^$/ {print "Blank line"}' test.txt

在此命令中,/^$/ 是一个正则表达式,功能是匹配文本中的空白行,同时可以看到,执行命令使用的是 print 命令,此命令经常会使用,它的作用很简单,就是将指定的文本进行输出。因此,整个命令的功能是,如果 test.txt 有 N 个空白行,那么执行此命令会输出 N 个 Blank line。

默认情况下,awk 会将如下变量分配给它在文本行中发现的数据字段,字段分隔符是任意的空白字符(例如空格或制表符):

  • $0 代表整个文本行;
  • $1 代表文本行中的第 1 个数据字段;
  • $2 代表文本行中的第 2 个数据字段;
  • $n 代表文本行中的第 n 个数据字段。

当然,如果你要读取采用了其他字段分隔符的文件,可以用 -F 选项手动指定。

1.4> sort命令:对文件进行排序

sort  – 参数 文件名 对文件进行排序

选项:-n 对文件按照数字排序

          -r 反向排序

          -u 去除重复行

          -c 显示数据重复的次数

1.5> wc命令:统计

wc -参数 文件名 统计文本大小,字符多少,行数

选项:-c 统计文本字节数

          -m 统计文本字符数

          -l 统计文本有多少行

分析日志时,一般是将grep、awk、find、wc等命令结合起来使用,筛选出所需的信息,进行分析。

(2)日志分析

这里找了一个web日志如下,方法和思路大致都差不多:cat  test

root@root:~# cat test
218.201.102.54,-,-,[29/Jun/2017:03:25:06,+0800],GET /download/nps/squid_bg.jpg 
131.253.27.125,-,-,[29/Jun/2017:03:29:53,+0800],GET /api.php?op=count&id=2205&modelid=1
121.43.187.150,-,-,[29/Jun/2017:03:31:47,+0800],GET /index.php?m=formguide&c=index&a=show&formid=62&action=js&siteid=1
121.43.187.150,-,-,[29/Jun/2017:03:31:47,+0800],GET /index.php?m=formguide&c=index&a=show&formid=59&action=js&siteid=1
121.43.187.150,-,-,[29/Jun/2017:03:31:47,+0800],GET /api.php?op=count&id=&modelid=1
121.43.187.150,-,-,[29/Jun/2017:03:31:49,+0800],GET /api.php?op=checkcode&code_len=4&font_size=14&width=84&height=24&font_color=&background=
131.253.27.93,-,-,[29/Jun/2017:03:32:37,+0800],GET /api.php?op=count&id=2135&modelid=1
121.43.173.126,-,-,[29/Jun/2017:03:34:12,+0800],GET /index.php?m=formguide&c=index&a=show&formid=62&action=js&siteid=1
121.43.173.126,-,-,[29/Jun/2017:03:34:12,+0800],GET /index.php?m=formguide&c=index&a=show&formid=59&action=js&siteid=1
121.43.173.126,-,-,[29/Jun/2017:03:34:13,+0800],GET /api.php?op=count&id=&modelid=1
121.43.173.126,-,-,[29/Jun/2017:03:34:13,+0800],GET /api.php?op=checkcode&code_len=4&font_size=14&width=84&height=24&font_color=&background=1
42.156.136.14,-,-,[29/Jun/2017:03:37:31,+0800],GET /index.php?m=formguide&c=index&a=show&formid=62&action=js&siteid=1
42.156.136.14,-,-,[29/Jun/2017:03:37:31,+0800],GET /index.php?m=formguide&c=index&a=show&formid=59&action=js&siteid=1
42.156.136.14,-,-,[29/Jun/2017:03:37:31,+0800],GET /api.php?op=count&id=&modelid=1
42.156.136.14,-,-,[29/Jun/2017:03:37:32,+0800],GET /index.php?m=formguide&c=index&a=show&formid=62&action=js&siteid=1
42.156.136.14,-,-,[29/Jun/2017:03:37:32,+0800],GET /index.php?m=formguide&c=index&a=show&formid=59&action=js&siteid=1
42.156.136.14,-,-,[29/Jun/2017:03:37:33,+0800],GET /api.php?op=count&id=&modelid=1

2.1> 查看当天有多少个IP访问

root@root:~# cat test | awk -F ',-,-,' '{print $1}'|sort |uniq|wc -l
6
root@root:~# cat test | awk -F ',-,-,' '{print $1}'|sort |uniq
121.43.173.126
121.43.187.150
131.253.27.125
131.253.27.93
218.201.102.54
42.156.136.14

2.2> 查看某一个页面被访问的次数

root@root:~# grep /api.php test |wc -l
8

2.3> 查看每一个IP访问了多少个页面

root@root:~# awk -F ',-,-,' '{++S[$1]} END {for (a in S) print a,S[a]}' test
42.156.136.14 6
131.253.27.125 1
121.43.173.126 4
131.253.27.93 1
121.43.187.150 4
218.201.102.54 1

2.4> 把每个IP访问的页面数进行排序

root@root:~# awk -F ',-,-,' '{++S[$1]} END {for (a in S) print a,S[a]}' test | sort -n
42.156.136.14 6
121.43.173.126 4
121.43.187.150 4
131.253.27.125 1
131.253.27.93 1
218.201.102.54 1

2.5> 获取访问量最多的3个IP

root@root:~# awk -F ',-,-,' '{++S[$1]} END {for (a in S) print a,S[a]}' test | sort -n|head -3
42.156.136.14 6
121.43.173.126 4
121.43.187.150 4

2.6> 查询某一个IP访问了哪些页面

root@root:~# grep ^42.156.136.14 test
42.156.136.14,-,-,[29/Jun/2017:03:37:31,+0800],GET /index.php?m=formguide&c=index&a=show&formid=62&action=js&siteid=1
42.156.136.14,-,-,[29/Jun/2017:03:37:31,+0800],GET /index.php?m=formguide&c=index&a=show&formid=59&action=js&siteid=1
42.156.136.14,-,-,[29/Jun/2017:03:37:31,+0800],GET /api.php?op=count&id=&modelid=1
42.156.136.14,-,-,[29/Jun/2017:03:37:32,+0800],GET /index.php?m=formguide&c=index&a=show&formid=62&action=js&siteid=1
42.156.136.14,-,-,[29/Jun/2017:03:37:32,+0800],GET /index.php?m=formguide&c=index&a=show&formid=59&action=js&siteid=1
42.156.136.14,-,-,[29/Jun/2017:03:37:33,+0800],GET /api.php?op=count&id=&modelid=1

2.7> 查看2017年7月9日3时这一个小时内有多少IP访问

root@root:~# grep 9/Jun/2017:03 test | awk -F ',-,-,' '{print $1}' | sort -u
121.43.173.126
121.43.187.150
131.253.27.125
131.253.27.93
218.201.102.54
42.156.136.14
root@root:~# grep 9/Jun/2017:03 test | awk -F ',-,-,' '{print $1}' | sort -u |wc -l
6

参考链接:https://github.com/Bypass007/Emergency-Response-Notes/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0%EF%BC%9A%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90/%E7%AC%AC2%E7%AF%87%EF%BC%9ALinux%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90.md

你可能感兴趣的:(应急响应基础,应急响应,Linux日志)