Linux操作技术文档——分析和排查系统故障(日志)

分析和排查系统故障

一、日志系统

1、概念

日志文件:系统中各个运行消息的文件,不同的日志文件记录了不同类型的信息,如内核消息、错误消息等
syslog服务:syslogd: 系统,非内核产生的信息
klogd:内核,专门负责记录内核产生的日志信息

2、分类

1、内核及系统日志:数据由系统服务rsyslog统一管理,可以根据主配文件/etc/rsyslog.conf中的设置决定内核消息及其各种系统消息的记录位置
示例

[root@node2 ~]# tailf /var/log/messages
May 19 21:01:01 node2 systemd: Started Session 5 of user root.
消息 说明
May 19 21:01:01 时间:消息发出的时间和日期
node2 主机名:生成消息的计算机的名称
systemd 子系统的名称:发出消息的应用程序的名称
Started Session 5 of user root. 消息内容:消息的具体内容

2、用户日志:数据用于记录系统用户登录及其退出系统的相关信息,包括用户名、登录终端、登录时间、来源、使用的进程等等
查询当前登录的用户情况

[root@node1 ~]# users
root root
[root@node1 ~]# who
root     tty1         2020-05-19 19:42
root     pts/0        2020-05-19 19:51 (192.168.1.10)
[root@node1 ~]# w
 21:38:40 up  1:48,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      19:42    1:54m  0.05s  0.05s -bash
root     pts/0    192.168.1.10     19:51    0.00s  0.13s  0.00s w

查询用户登录的历史记录

[root@node1 ~]# last           //查询成功登录到系统的用户记录,最近的登录情况将显示在最前面
root     pts/0        192.168.1.10     Tue May 19 19:51   still logged in   
root     tty1                          Tue May 19 19:42   still logged in   
reboot   system boot  3.10.0-957.el7.x Tue May 19 19:42 - 21:39  (01:56)    
root     tty1                          Wed Apr 22 04:04 - 04:05  (00:00)    
reboot   system boot  3.10.0-957.el7.x Wed Apr 22 04:04 - 21:39 (27+17:34)  

wtmp begins Tue Apr 14 23:57:26 2020
[root@node1 ~]# lastb           //查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况
root     tty1                          Thu Apr 16 19:08 - 19:08  (00:00)   

查看安全日志文件

[root@node1 ~]# tailf /var/log/secure                //查看/var/log/secure安全日志文件
May 19 20:07:38 localhost polkitd[5973]: Registered Authentication Agent for unix-process:8012:105101 (system bus name :1.56 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
May 19 20:07:38 localhost polkitd[5973]: Unregistered Authentication Agent for unix-process:8012:105101 (system bus name :1.56, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)

3、 程序日志:应用程序自己独立管理的一个日志,记录程序本身运行过程中的各种事件信息
httpd 服务的日志文件access_log和error_log分别记录客户访问事件和错误信息

[root@base httpd]# pwd
/var/log/httpd
[root@base httpd]# ls
access_log error_log

二、分析日志文件

1、主要日志文件

常见的一些日志文件

目录 说明
/var/log/messages 记录Linux操作系统常见的系统和服务错误信息
/var/log/cron 记录crond计划任务产生的事件信息
/var/log/dmesg 记录Linux操作系统在引导过程中的各种事件信息
/var/log/maillog 记录进入或发出系统的电子邮件活动
/var/log/lastlog 记录每个用户最近的登录事件
/var/log/secure 记录用户认证相关的安全事件信息
/var/log/wtmp 记录每个用户登录、注销及系统启动和停机事件,使用last命令查看
/var/log/btmp 记录失败的、错误的登录尝试及验证事件,lastb命令查看
/var/log/boot.log 记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息
/var/log/syslog 只记录警告信息,常常是系统出问题的信息,使用lastlog查看
/var/run/utmp 该日志文件记录有关当前登录的每个用户的信息

2、日志文件分析

1、日志消息级别

数字 优先级别 说明
0 EMERG (紧急) 会导致主机系统不可用的情况
1 ALERT (警告) 必须马上采取措施解决的问题
2 CRIT (严重) 比较严重的情况
3 ERR (错误) 运行出现错误
4 WARNING (提醒) 可能影响系统功能,需要提醒用户的重要事件
5 NOTICE (注意) 不会影响正常功能,但是需要注意的事件
6 INFO (信息) 一般信息
7 DEBUG (调试) 程序或系统调试信息等

2、rsyslog.conf文件分析
加载模块、转发端口等基本配置

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514

查看系统默认的日志设置

[root@localhost ~]# grep -v "^$" /etc/rsyslog.conf | grep -v "^#"
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

服务名称

服务 说明 服务 说明
auth 认证相关的 authpriv 权限,授权相关的
cron 任务计划相关的 daemon 守护进程相关的
kern 内核相关的 lpr 打印相关的
mail 邮件相关的 mark 标记相关的
news 新闻相关的 security 安全相关的
syslog syslog本身的 user 用户相关的
uucp unix to unix cp 相关的 local0 到 local7 用户自定义使用
* 表示所有的facility

3、action(动作)日志记录的位置

更改系统安全日志secure的记录位置

[root@localhost ~]# vim /etc/rsyslog.conf                                     
authpriv.*                         /usr/local/secure             //原位置为/var/log/secure
[root@localhost ~]# setenforce 0             //临时禁用selinux
[root@localhost ~]# systemctl restart rsyslog.service              //重启服务
[root@localhost ~]# ls /usr/local/             //触发日志
bin  etc  games  include  lib  lib64  libexec  sbin  secure  share  src
[root@localhost ~]# chattr +a /usr/local/secure              //增加特殊权限,防止有其他人把记录给删除掉
[root@localhost ~]# lsattr /usr/local/secure   
-----a---------- /usr/local/secure
[root@localhost ~]# cat /usr/local/secure              //查看验证
May 19 23:33:20 localhost polkitd[5973]: Unregistered Authentication Agent for unix-process:17873:586822 (system bus name :1.55, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)

三、日志的采集

1、一般日志采集

发送方设置

[root@node1 ~]# vim /etc/rsyslog.conf
......
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
......
*.* @192.168.1.61              //所有级别的所有信息通过UDP端口发送到192.168.1.61(@:UDP端口;@@:TCP端口)
[root@node1 ~]# systemctl restart rsyslog.service
[root@node1 ~]# systemctl start firewalld.service 
[root@node1 ~]# systemctl enable firewalld.service 
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
[root@node1 ~]# firewall-cmd --add-port=514/tcp --add-port=514/udp --permanent
success
[root@node1 ~]# firewall-cmd --reload
success
[root@node1 ~]# firewall-cmd --list-ports
514/tcp 514/udp

接收方设置

[root@node2 ~]# vim /etc/rsyslog.conf
......
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
......
[root@node2 ~]# systemctl restart rsyslog.service
[root@node2 ~]# firewall-cmd --add-port=514/tcp --add-port=514/udp --permanent
success
[root@node2 ~]# firewall-cmd --reload
success
[root@node2 ~]# firewall-cmd --list-ports
514/tcp 514/udp

当node1产生变化时,node2自动采集

[root@node1 ~]# su - test1
[root@node1 ~]# yum -y install elinks
[root@node2 ~]# tailf /var/log/messages
May 19 23:52:02 node1 su: (to test1) root on pts/0
May 19 23:53:10 node1 yum[18401]: Installed: nss_compat_ossl-0.9.6-8.el7.x86_64
May 19 23:53:10 node1 yum[18401]: Installed: 1:js-1.8.5-20.el7.x86_64
May 19 23:53:10 node1 yum[18401]: Installed: elinks-0.12-0.37.pre6.el7.0.1.x86_64

2、Nginx日志采集

nginx主机设置

[root@node1 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@node1 ~]# yum makecache fast
[root@node1 ~]# yum -y install nginx
[root@node1 ~]# systemctl start nginx
[root@node1 ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@node1 ~]# systemctl status nginx
[root@node1 ~]# vim /etc/rsyslog.conf
......
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
......
*.* @192.168.1.61
$ModeLoad imfile
$InputFilePollInterval 1              //间隔多久采集1次。默认单位是秒
$InputFileName /var/log/nginx/access.log              //
$InputFileTag nginx-info-access;              //采集的日志的名称
$InputFilestateFile state-nginx-info-accesslog              //给对应的日志打一个标签
$InputRunFileMonitor
$InputFileName /var/log/nginx/error.log
$InputFileTag nginx-info-error;
$InputFilestateFile state-nginx-info-errorlog              //给这个日志命名
$InputRunFileMonitor              //启动监控
$InputFilePollInterval 10
if $programname == 'nginx-info-access' then @192.168.1.61:514
if $programname == 'nginx-info-access' then ~
if $programname == 'nginx-info-error' then @192.168.1.61:514
if $programname == 'nginx-info-error' then ~
[root@node1 ~]# systemctl restart rsyslog.service

接收方设置同上

[root@node2 ~]# tailf /var/log/messages
May 20 00:25:14 node1 rsyslogd: invalid or yet-unknown config file command 'InputFilePollInterval' - have you forgotten to load a module? [v8.24.0-34.el7 try http://www.rsyslog.com/e/3003 ]

3、日志切割

[root@node1 ~]# grep -v '^$' /etc/logrotate.conf | grep -v '^#'
weekly              //切割周期,默认每周
rotate 4              //保留多少个日志文件,那么一周一个,也就是能看到一个月的日志。如果是0就表示不作备份,仅做了一个切割,表示每周清空一下日志。
create              //旧日志切割后,源文件是否生成新的日志
dateext              //切割后,日志的文件类型是什么样(log日期的格式:xxx.log-20190705)
include /etc/logrotate.d              //还需要读取这个地方的内容 ,目录里都是其他地方的日志
/var/log/wtmp {              //特指某个文件的切割方式
    monthly              //每月切割
    create 0664 root utmp              //切割完成之后,这个文件的权限,以及属主和属组是谁
	minsize 1M              //文件超过1M之后才切割,这表示即便过了1个月,大小没到1M,也不切割
    rotate 1              //保留1个
}
/var/log/btmp {            
    missingok              //丢了也没关系,热日志会出现中断
    monthly           
    create 0600 root utmp           
    rotate 1      
}
参数 说明 参数 说明
compress 压缩,gzip delaycompress 延迟压缩
nocompress 不压缩 copytruncate 先拷贝,再清空
ifemty 即使日志文件为空,到日期也切割 notifempty 为空者不切割
mail Email 切割后的日志文件,不在本地保存,发送邮件到其他地方 nomail 生成的日志不发送,在本地使用
olddir Directory 另存为的地址,如果不写则默认是在同一个目录下边 noolddir 转存文件都保存在本地
sharedscripts 运行脚本 postrotate 切割之后,执行脚本
prefotate 切割之前,执行脚本 daily 每天
weekly 每周 mounthly 每月
yearly 每年 rotate count 保存几份
dateexxt 使用当前日期 size (minisize) 达到多少才切割,默认单位是M,sizeksizem默认单位是kb

切割安全日志

[root@node1 ~]# vim /etc/rsyslog.conf
authpriv.*                                              /var/log/secure
[root@node1 ~]# cd /etc/logrotate.d/
[root@node1 logrotate.d]# vim secure
/var/log/secure {
   missingok
   notifemty
   daily
   create
   rotate 4
   compress
}
[root@node1 ~]# vim /etc/rsyslog.conf 
[root@node1 ~]# cd /etc/logrotate.d/
[root@node1 logrotate.d]# vim secure
[root@node1 logrotate.d]# useradd zhangsan              //添加用户,切换用户触发日志
[root@node1 logrotate.d]# echo 123.com | passwd --stdin zhangsan
Changing password for user zhangsan.
passwd: all authentication tokens updated successfully.
[root@node1 logrotate.d]# su - zhangsan
[zhangsan@node1 ~]$ echo hello logrotate > testfile
[zhangsan@node1 ~]$ cat testfile
hello logrotate
[zhangsan@node1 ~]$ exit
logout
[root@node1 logrotate.d]# tail /var/log/secure
May 19 19:43:06 localhost polkitd[5973]: Registered Authentication Agent for unix-process:7289:3323 (system bus name :1.21 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
May 19 19:43:06 localhost polkitd[5973]: Unregistered Authentication Agent for unix-process:7289:3323 (system bus name :1.21, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
May 19 19:43:16 localhost polkitd[5973]: Registered Authentication Agent for unix-process:7337:4364 (system bus name :1.22 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
May 19 19:43:16 localhost polkitd[5973]: Unregistered Authentication Agent for unix-process:7337:4364 (system bus name :1.22, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
May 19 21:57:02 localhost sshd[7796]: Accepted password for root from 192.168.1.10 port 60637 ssh2
May 19 21:57:02 localhost sshd[7796]: pam_unix(sshd:session): session opened for user root by (uid=0)
May 19 22:16:02 localhost sshd[7796]: pam_unix(sshd:session): session closed for user root
May 19 23:13:20 localhost sshd[17818]: Accepted password for root from 192.168.1.10 port 61197 ssh2
May 19 23:13:20 localhost sshd[17818]: pam_unix(sshd:session): session opened for user root by (uid=0)
May 19 23:33:20 localhost polkitd[5973]: Registered Authentication Agent for unix-process:17873:586822 (system bus name :1.55 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
[root@node1 logrotate.d]# logrotate -vf /etc/logrotate.d/secure              //手动切割日志(-f :强制, -v: 显示过程)
[root@node1 logrotate.d]# tail /var/log/secure              //源文件已被切割,为空
tail: cannot open ‘/var/log/secure’ for reading: No such file or directory
[root@node1 logrotate.d]# ls /var/log/
anaconda  dmesg               maillog   tallylog              vmware-network.4.log    vmware-vmsvc.log
audit     dmesg.old           messages  tuned                 vmware-network.5.log    wtmp
boot.log  firewalld           nginx     vmware-network.1.log  vmware-network.6.log    yum.log
btmp      grubby_prune_debug  rhsm      vmware-network.2.log  vmware-network.log
cron      lastlog             spooler   vmware-network.3.log  vmware-vgauthsvc.log.0

如果有特殊权限,而每次切割完成之后,都需要重新启动一下我们rsyslog服务,所以这个时候就需要我们自己来写脚本支持

[root@node1 logrotate.d]# vim secure
/var/log/secure {
   sharedscripts
   prerotate
   /usr/bin/chattr -a /var/log/secure
   endscript
   missingok
   notifemty
   daily
   create
   rotate 4
   compress
   sharedscripts
   postrotate
   /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null
   /usr/bin/chattr +a /var/log/secure
   endscript
}

四、排除系统启动类故障

1、MBR扇区故障

1、备份MBR扇区数据
将第一块硬盘(sda) 的MBR扇区备份到第二块硬盘的sdb1分区中(挂载到/backup目录)
在这里插入图片描述
在这里插入图片描述
2、模拟MBR扇区故障
当出现“Operating system not found”的提示信息,表示无法找到可用的操作系统,因此无法启动主机
3、从备份文件中恢复MBR扇区数据
在这里插入图片描述
选择"Rescue a CentOS Linux system"选项
在这里插入图片描述

2、GRUB引导故障

在提示符后输入对应的引导命令,然后执行"boot”命令即可正常引导Linux操作系统
grub> insmod xfs
grub> linux16 /vmlinuz-3.10.0-514.el7.x86_64 root=/dev/mapper/cl-root ro crash kernel=autord.Ivm.lv=cl/root rd.lvm.1v=cl/swap rhgb quiet LANG=en_US.UTF-8
grub> initrd16 /initramfs-3.10.0-514.e17.x86_64.img
grub> boot

3、遗忘root用户的密码

进入急救模式重设root用户密码
sh-4.2# chroot /mnt/sysimage
bash-4.1# passwd root

三、排除文件系统类故障

1、修复文件系统

修复一般的文件系统错误
在这里插入图片描述

2、磁盘资源耗尽故障

修复i结点耗尽故障:将该分区中占用大量i结点的细小文件,进行转移或者删除即可

3、检测硬盘坏道

现象

读取磁盘中的数据时,磁盘设备发出异常声响。
访问磁盘中的某个文件时,反复读取且出错,提示文件损坏。
对于新建立的分区无法完成格式化。
系统使用该磁盘时频繁死机。

查看硬盘设备/dev/sdb中的坏道情况
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章