四、日志分析
【1】、what is 日志
- 日志log
- 分析,检查系统,服务是否正常运行,一般都要看日志。 后面学习的一些服务软件,遇到故障就要查看日志。
- Linux日志一般存放在/var/log/目录。
【2】、核心日志
ip,root,密码,22(端口)
Linux默认核心日志 | 说明 |
---|---|
/var/log/secure(麒麟,红帽系统) /var/log/auth.log (debian,ubt) | 用户登录情况,分析错误,分析正确 |
/var/log/messages(麒麟,红帽系统) /var/log/syslog(debian,ubt) | 通用日志(服务) 服务如果没有单独的日志,一般就会记录到这里面。 |
...... |
root@xu-ubuntu:~# ll /var/log/auth.log
-rw-r----- 1 syslog adm 6303 Nov 4 08:05 /var/log/auth.log
[root@kylin-xu ~]# ll /var/log/secure
-rw------- 1 root root 6269 nov 4 00:31 /var/log/secureroot@xu-ubuntu:~# ll /var/log/syslog
-rw-r----- 1 syslog adm 230481 Nov 4 07:29 /var/log/syslog
[root@kylin-xu ~]# ll /var/log/messages
-rw------- 1 root root 2199907 nov 4 05:06 /var/log/messages
分析secure (auth.log)日志:
- failure
- failed ( Failed password)
kylin错误登录分析
Ubuntu错误登录分析
【3】、故障案例:某开发人员vim编辑2g日志导致系统内存不足。
背景: 突然发现测试环境某个机器,提示内存不足。我们去查看。
步骤:定位出是vim命令占用的。发现vim编辑日志。
解决:结束进程
预防:
-
发现开发人员操作,查看日志,vim查看。
-
培训开发人员使用tail,head,less,more,grep查看不要用cat,vim.
【4】、查看内存指令
tail,head,less,more,grep
1、tail
- 文件结尾的数据。默认查看文件末尾10行。
查看文件最后的20行 -20 -n20
[root@kylin-xu ~]# tail -20 /var/log/secure
Nov 3 23:40:10 kylin-xu polkitd[768]: Loading rules from directory /etc/polkit-1/rules.d
Nov 3 23:40:10 kylin-xu polkitd[768]: Loading rules from directory /usr/share/polkit-1/rules.d
Nov 3 23:40:10 kylin-xu polkitd[768]: Finished loading, compiling and executing 5 rules
Nov 3 23:40:10 kylin-xu polkitd[768]: Acquired the name org.freedesktop.PolicyKit1 on the system bus
Nov 3 23:40:17 kylin-xu systemd[1105]: pam_unix(systemd-user:session): session opened for user root(uid=0) by (uid=0)
Nov 3 23:40:18 kylin-xu sshd[1029]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
Nov 3 23:41:17 kylin-xu polkitd[752]: Loading rules from directory /etc/polkit-1/rules.d
Nov 3 23:41:17 kylin-xu polkitd[752]: Loading rules from directory /usr/share/polkit-1/rules.d
Nov 3 23:41:17 kylin-xu polkitd[752]: Finished loading, compiling and executing 5 rules
Nov 3 23:41:17 kylin-xu polkitd[752]: Acquired the name org.freedesktop.PolicyKit1 on the system bus
Nov 3 23:42:59 kylin-xu systemd[1437]: pam_unix(systemd-user:session): session opened for user root(uid=0) by (uid=0)
Nov 3 23:42:59 kylin-xu sshd[1427]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
Nov 3 23:52:47 kylin-xu sshd[1427]: pam_unix(sshd:session): session closed for user root
Nov 3 23:52:48 kylin-xu sshd[3968]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
Nov 4 00:31:07 kylin-xu sshd[3968]: pam_unix(sshd:session): session closed for user root
Nov 4 00:31:08 kylin-xu sshd[66374]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
Nov 4 05:14:54 kylin-xu sshd[135641]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
Nov 4 05:15:02 kylin-xu sshd[135641]: pam_unix(sshd:session): session closed for user root
Nov 4 05:15:17 kylin-xu login[902]: pam_unix(login:auth): authentication failure; logname=LOGIN uid=0 euid=0 tty=tty1 ruser= rhost= user=root
Nov 4 05:15:20 kylin-xu login[902]: FAILED LOGIN SESSION FROM tty1 FOR root, Permission denied
[root@kylin-xu ~]# tail -20 /var/log/secure | wc -l
20
- 查看文件末尾的实时更新
[root@kylin-xu ~]# tail -f /var/log/secure
2、head
查看文件开头的内容,默认显示10行。
head /var/log/secure# 显示第一行
head -1 /var/log/secure
3、less、more
- less /etc/serivces
下一页: 空格或ctrl + f
上一页: ctrl + b
第1行: g
最后一行: G
某一行: 100回车
/搜索
q 退出
more 快捷键没有那么多,到文件末尾自动退出。
4、过滤 在文件中查找内容
四剑客 find,grep,sed,awk
- grep
grep选项 | |
---|---|
--color | 加颜色 |
-i | 不区分大小写 |
-n | 显示行号 |
-v | 取反,排除 |
- 在/etc/passwd文件中过滤出root的行
grep --color 'root' /etc/passwd
- 在/var/log/secure文件中过滤出failure行。
grep --color 'failure' /var/log/secure
- /var/log/auth.log中过滤出failed password
grep -i 'failed password' /var/log/auth.log
- 不区分大小写过滤出 /etc/ssh/sshd_config 文件中包含
port 22
的行并输出行号
grep --color -i -n 'port 22' /etc/ssh/sshd_config
- 排除(取反)/etc/ssh/sshd_config文件中的#(井号)
grep -v '#' /etc/ssh/sshd_config
5、wc
- 统计文件行数
xu@xu-ubuntu:~$ wc -l /etc/services
361 /etc/services
- wc一般搭配管道使用,其他命令使用。
- 初步统计功能。
【5】、日志统计
1、管道
管道: 符号 | ,前1个命令执行后输出,通过管道符号,传递给下一个命令使用。
- 过滤/etc/passwd中包含/bin/bash的行,行数。
[root@kylin-xu ~]# grep /bin/bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@kylin-xu ~]# grep /bin/bash /etc/passwd | wc -l
1
- ps -ef 显示linux进程的命令,linux进程数量
[root@kylin-xu ~]# ps -ef | wc -l
151
- ps -ef 显示linux进程的命令,统计/sbin/sshd进程数量(远程连接服务的进程)
[root@kylin-xu ~]# ps -ef | grep /sbin/sshd
root 872 1 0 nov03 ? 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root 143510 66389 0 05:46 pts/0 00:00:00 grep /sbin/sshd
[root@kylin-xu ~]# ps -ef | grep /sbin/sshd | wc -l
2
2、日志
- 上传文件到linux
安装lrzsz
yum install -y lrzsz #麒麟#ubt,debian 使用root用户
sudo su -
apt update
apt install -y lrzsz #命令说明
rz 上传 rz回车即可或拖拽
sz 下载 sz /etc/hostname 下载指定的文件。
- 解压缩
unzip secure-20161219.zip #解压到当前目录。
#如果提示命令找不到 command not found检查:
[root@oldboyedu ~]# ll -h secure-20161219
-rw-r--r-- 1 root root 49M 2月 15 2017 secure-20161219
#字节,
#KB
#MB
#GT
#GB
#TB
#PB
#EB
- 分析
3、复现故障案例
cat secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 secure-20161219 > secure-big[root@kylin-xu ~]# ll -h secure-big
-rw-r--r-- 1 root root 974M 11月 4 07:11 secure-big
-
检查内存: free -h
-
vim编辑文件
-
开个窗口 查看内存
4、日志分析搭档sort,uniq
- sort 排序
- uniq unique独一无二的,去重。
(1)、sort
sort选项 | |
---|---|
-r | 逆序排序 |
-n | 按照数字形式排序 |
-k | -k指定列, |
[root@kylin-xu ~]# sort num.txt
# 默认是按照数字的第一个数字排序
0
1
131
154
161
26
3
31
4164
46
74
749
99[root@kylin-xu ~]# sort num.txt -n
0
1
3
26
31
46
74
99
131
154
161
749
4164[root@kylin-xu ~]# sort num.txt -nr
4164
749
161
154
131
99
74
46
31
26
3
1
0[root@kylin-xu ~]# sort num.txt -nr -k 2
aasc 4164
xixi 749
haha 161
dtgfhdsgf 154
aaa 131
safdg 99
ewsrf 74
bb 46
qawq 31
sadg 26
bsadfg 3
ss 1
afa 0
ps aux 第4列是内存使用率,对这列排序,取出前5个
root@xu-ubuntu:~# ps aux | sort -nr -k 4 | head -5
root 4855 0.5 0.8 1393992 31980 ? Ssl 10:39 0:21 /usr/lib/snapd/snapd
root 548 0.0 0.6 354888 27232 ? SLsl 03:51 0:06 /sbin/multipathd -d -s
root 899 0.0 0.5 107120 21528 ? Ssl 03:51 0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
root 835 0.0 0.4 30104 18920 ? Ss 03:51 0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root 510 0.0 0.4 47884 16904 ? S<s 03:51 0:01 /lib/systemd/systemd-journald
(2)、uniq
- 去重,一般要与sort搭配。
[root@oldboyedu ~]# cat uniq.txt
lidao
oldboy
lidao
lidao
lidao
lidao
lidao
lidao
lidao
lidao
lidao
oldboy
oldboy
oldboy
oldboy
oldboy
[root@oldboyedu ~]# sort uniq.txt |uniq -c 10 lidao6 oldboy
(3)、awk
-
取列
-
awk 取列 NF表示最后一列
[root@kylin-xu ~]# cat num.txt
haha 161 192.168.121.11
xixi 749 192.168.121.111
aaa 131 192.168.121.116
aasc 4164 192.178.121.11
dtgfhdsgf 154 192.178.121.180
qawq 31 192.178.31.11[root@kylin-xu ~]# awk '{print $3}' num.txt
192.168.121.11
192.168.121.111
192.168.121.116
192.178.121.11
192.178.121.180
192.178.31.11
[root@kylin-xu ~]# awk '{print $NF}' num.txt
192.168.121.11
192.168.121.111
192.168.121.116
192.178.121.11
192.178.121.180
192.178.31.11
【6】、日志分析实战
1、secure日志分析
- 1️⃣过滤出failed password,失败登录。 取行
- 2️⃣ 提取出这行中的ip的列。 取列
- 3️⃣ 对ip进行排序。 相同的ip在一起。
- 4️⃣ 去掉重复,统计次数。 去重并统计次数。uniq -c
- 5️⃣ 对次数排序并取出前20个
NF-3:取出倒数第四列。
因为从正向数,是不规律的,因此只能倒序数
[root@kylin-xu ~]# grep -i "failed password" secure-20161219 | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -2068652 218.65.30.2534326 218.65.30.5321201 218.87.109.15418065 112.85.42.10317164 112.85.42.9917163 218.87.109.15117163 218.87.109.15017163 218.65.30.6117163 218.65.30.12617163 218.65.30.12417163 218.65.30.12317163 218.65.30.12217163 182.100.67.12017163 182.100.67.11917163 112.85.42.12417163 112.85.42.1073289 222.186.50.2063265 219.133.29.163206 111.73.46.1562479 117.21.226.189
2、access日志分析
- 2️⃣ 提取出这行中的ip的列。 取列
- 3️⃣ 对ip进行排序。 相同的ip在一起。
- 4️⃣ 去掉重复,统计次数。 去重并统计次数。uniq -c
- 5️⃣ 对次数排序并取出前20个
[root@kylin-xu ~]# awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -2012049 58.220.223.6210856 112.64.171.981982 114.83.184.1391662 117.136.66.101318 115.29.245.13961 223.104.5.197957 116.216.0.60939 180.111.48.14871 223.104.5.202869 223.104.4.139799 124.160.208.186792 121.235.250.231774 116.226.186.208753 114.111.166.22752 122.234.234.124751 61.148.243.193733 58.33.166.73733 222.67.7.159717 140.206.89.233706 101.226.125.113