Linux环境下分析和排查系统故障

只愿长相守 提交于 2021-01-04 13:01:38


1分析日志文件


日志文件是用于记录Linux系统中各种运行消息的文件,不同的日志文件记载了不同类型的信息,如Linux内核消息、用户登录时间、程序错误等;


日志文件对于诊断和解决系统中的问题有很大帮助,因为Linux系统中运行的程序通常会把系统消息和错误消息写入相应的日志文件。


在Linux系统中,日志数据主要包括三种类型:

  • 内核及系统日志:这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置。

  • 用户日志:用与记录Linux系统用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。

  • 程序日志:有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件消息。


Linux系统本身和大部分服务器程序的日志文件默认都放在目录/var/log/下,一部分程序公用一个日志文件,一部分程序使用单个日志文件,而有些大型服务器程序由于日志文件不止一个,所以会在/var/log/目录中建立相应的子目录存放日志文件。


常用的日志文件:

  • /var/log/messages:记录Linux内核消息及各种应用程序的公共日志信息、包括启动、1/0错误、网络错误、程序故障等。

  • /var/log/cron:记录crond计划任务产生的事件信息。

  • /var/log/dmesg:记录Linux系统在引导过程中的各种事件信息。

  • /var/log/maillog:记录进入或发出系统的电子邮件活动。

  • /var/log/lastlog:记录每个用户最近的登录事件。

  • /var/log/secure:记录用户认证相关的安全事件信息。

  • /var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件。

  • /var/log/btmp:记录失败的、错误的登录尝试及验证事件。


分析日志文件的目的在于通过浏览日志查找关键信息、对系统服务进行调试,已经判断发生故障的原因等。大多数文本格式的日志文件,使用tail、more、less、cat等文本处理工具就可以查看日志内容。


内核及系统日志功能主要由默认安装的rsyslog-5.8.10-8.el6.x86_64软件包提供。rsyslog服务所使用的配置文件为/etc/rsyslog.conf。

[root@localhost ~]# grep -v "^$" /etc/rsyslog.conf 
# rsyslog v5 configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
#$ModLoad immark  # provides --MARK-- message capability
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
#### GLOBAL DIRECTIVES ####
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure
# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog
# Log cron stuff
cron.*                                                  /var/log/cron
# Everybody gets emergency messages
*.emerg                                                 *
# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$WorkDirectory /var/lib/rsyslog # where to place spool files
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList   # run asynchronously
#$ActionResumeRetryCount -1    # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###
# A template to for higher precision timestamps + severity logging
$template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
:programname, startswith, "spice-vdagent"  /var/log/spice-vdagent.log;SpiceTmpl
[root@localhost ~]#


从配置文件/etc/rsyslog.conf中可以看到,受rsyslogd服务管理的日志文件都是Linux系统中最主要的日志文件,记录了Linux系统中内核、用户认证、邮件、计划任务等最基本的系统消息。


在Linux内核中,根据日志消息的重要程度不同,将其分为不同的优先级别(数字等级越小、优先级越高、消息越重要)

  • 0 EMERG(紧急):会导致主机系统不可用的情况。

  • 1 ALERT(警告):必须马上采取措施解决的问题。

  • 2 CRIT(严重):比较严重的错误。

  • 3 ERR(错误):运行出现错误。

  • 4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。

  • 5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。

  • 6 INFO(信息):一般信息。

  • 7 DEBUG(调试):程序或系统调试信息等。


内核及大多数系统消息都被记录到公共日志文件/var/log/messages中,而其他一些程序消息被记录到各自独立的日志文件中,此外日志消息还能够记录到特定的存储设备中,或者直接发送给指定用户。

对于rsyslog服务统一管理的大部分日志文件,使用的日志记录格式基本上都相同。以公共日志/var/log/messages文件的记录格式,其中每一行表示一条日志消息,每一条消息都均包括以下四个字段。

  • 时间标签:消息发出的日期和时间。

  • 主机名:生成消息的计算机的名称。

  • 子系统名称:发出消息的应用程序的名称。

  • 消息:消息的具体内容。


2用户日志


查看当前登录的用户情况——users、who、w命令


users命令:输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。

[root@localhost ~]# users
root root root


who命令用户报告当前登录到系统中的每个用户的信息,可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who的默认输出包括用户名、终端类型、登录日期及远程主机。

[root@localhost ~]# who
root     tty1         2016-06-17 17:14 (:0)
root     pts/0        2016-06-17 17:16 (:0.0)
root     pts/1        2016-06-17 17:18 (172.20.10.5)


w命令用户显示当前系统中的每个用户及其所运行的进程信息。

[root@localhost ~]# w
17:50:35 up 37 min,  3 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     :0               17:14   37:45   2.32s  2.32s /usr/bin/Xorg :0 -nr -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-0vXGA4/datab
root     pts/0    :0.0             17:16   34:07   0.00s  0.00s /bin/bash
root     pts/1    172.20.10.5      17:18    0.00s  0.13s  0.09s w
[root@localhost ~]#


查询用户登录的历史记录——last、lastb命令


last命令用户查询成功登录到系统的用户记录,最近登录情况将显示在最前面。通过last命令可以及时掌握Linux主机的登录情况,若发现未经授权的用户登录过,表示当前主机可能已被入侵。

[root@localhost ~]# last
root     pts/1        172.20.10.5      Fri Jun 17 17:18   still logged in  
root     pts/0        :0.0             Fri Jun 17 17:16   still logged in  
root     tty1         :0               Fri Jun 17 17:14   still logged in  
reboot   system boot  2.6.32-431.el6.x Fri Jun 17 17:12 - 17:51  (00:38)    
root     pts/2        172.20.10.5      Fri Jun 17 14:36 - down   (02:35)    
root     pts/1        172.20.10.5      Fri Jun 17 12:23 - 14:43  (02:20)    
root     pts/0        :0.0             Fri Jun 17 12:22 - down   (04:49)    
root     tty1         :0               Fri Jun 17 12:21 - down   (04:50)    
reboot   system boot  2.6.32-431.el6.x Fri Jun 17 12:19 - 17:12  (04:52)    
root     pts/1        192.168.0.133    Sat Jun  4 14:35 - crash (12+21:43)  
root     pts/0        :0.0             Sat Jun  4 14:35 - crash (12+21:44)  
root     tty1         :0               Sat Jun  4 14:35 - crash (12+21:44)  
reboot   system boot  2.6.32-431.el6.x Sat Jun  4 14:31 - 17:12 (13+02:40)  
root     pts/1        192.168.0.133    Sat Jun  4 12:41 - down   (01:49)    
root     pts/0        :0.0             Sat Jun  4 12:40 - down   (01:50)    
root     tty1         :0               Sat Jun  4 12:40 - down   (01:51)    
reboot   system boot  2.6.32-431.el6.x Sat Jun  4 12:35 - 14:31  (01:55)    
root     pts/1        192.168.0.133    Sat Jun  4 12:11 - down   (00:23)    
root     pts/2        172.20.10.5      Sat Jun  4 09:32 - 12:30  (02:57)    
root     pts/1        172.20.10.5      Sat Jun  4 07:48 - 09:57  (02:08)    
root     pts/0        :0.0             Sat Jun  4 07:48 - down   (04:46)    
root     tty1         :0               Sat Jun  4 06:45 - down   (05:49)    
reboot   system boot  2.6.32-431.el6.x Sat Jun  4 06:40 - 12:34  (05:54)    

wtmp begins Sat Jun  4 06:40:32 2016
[root@localhost ~]#


lastb命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。

[root@localhost ~]# lastb
root     tty1         :0               Fri Jun 17 12:21 - 12:21  (00:00)    
root     tty1         :0               Sat Jun  4 14:34 - 14:34  (00:00)    

btmp begins Sat Jun  4 14:34:54 2016
[root@localhost ~]#


3程序日志


在Linux系统中,一部分应用程序 并没有使用rsyslog服务来管理日志,而是由程序自己维护日志记录。


出现以下一些注意现象

  • 用户在非常规的时间登录,或者用户登录系统的IP地址和以往的不一样。

  • 用户登录失败的日志记录,尤其是那些一再连续尝试进入失败的日志记录。

  • 非法使用或不正当使用超级用户权限。

  • 无故或者非法重新启动各项网络服务的记录。

  • 不正常的日志记录,日志残缺不全,或者是wtmp这样的日志文件也缺少了中间的记录文件。


4排除系统启动类故障——MBR扇区故障


1)备份MBR扇区数据


由于MBR扇区中包含了整个硬盘的分区表记录,因此该扇区的备份文件必须存放到其他的存储设备中,否则在恢复时将无法读取到备份文件。

[root@localhost ~]# mkdir /backup
[root@localhost ~]# mount /dev/sda3 /backup/
[root@localhost ~]# dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.00029813 秒,1.7 MB/秒
[root@localhost ~]#


2)模拟MBR扇区故障


使用dd命令,人为的将MBR扇区的记录覆盖,模拟出MBR扇区被损坏的故障情况(切记先做好备份,而且将备份文件存放到其他硬盘)。

[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.00141057 秒,363 kB/秒
[root@localhost ~]#


完成上述操作后重启系统,将会出现“Operating system not found”的提示信息,表示无法找到可用的操作系统,因此无法启动主机。


3)从备份文件中恢复MBR扇区数据

当出现安装向导界面,选择“Rescue installed system”,将以“急救模式”引导光盘中的Linux系统。

之后依次按Enter键接受默认的语言、键盘格式,提示是否配置网卡时一般选择“NO”,然后系统会自动查找硬盘中的Linux分区并尝试将其挂载到“/mnt/sysimage”目录(选择“Continue”确认并继续)。会出现rescue窗口,单击“OK”按钮。

单击“Skip”键后将进入到“bash-4.1#”提示符的Bash Shell环境,只要执行相应的命令挂载保存有备份文件的硬盘分区,并将数据恢复到硬盘“/dev/sda”中。

完成恢复后,执行“exit”命令退出临时shell环境,执行“reboot”命令,系统将会自动重启。


5遗忘root用户密码


当忘记root用户的密码时,将无法登录Linux系统执行管理、维护等任务,而只能通过其他用户登录使用一些受限制的功能。如果系统中还有别的具有root权限的用户,或者拥有修改root账号密码权限的用户,也可以使用这些用户登录系统,然后重新设置root用户密码。


1)通过单用户模式重设root用户的密码

具体步骤:

1.重启主机,在出现GRUB菜单时按↑、↓箭头键取消倒计时,并定位到要进入的操作系统选择项,按e键进入编辑模式。

2.定位到kernel开头的一行并按e键,在行尾添加“single”的启动参数,其中“single”也可以换成字母“s”或数字“1”,也可以进入单用户模式。

3.按Enter键确认后,按b键将系统引导进入单用户模式,直接进入shell环境(不需要任何密码验证)。

4.在单用户模式的shell环境中,可以执行“passwd root”命令重新设置root用户密码。


2)通过急救模式重设root账号密码


若使用RHEL6的安装光盘进入急救模式的shell环境,则只需切换到待修复Linux系统的根目录环境,执行“passwd root”命令重设root用户密码即可;或者修改/etc/shadow文件,将root用户的密码字段清空,重启后以空密码登录系统。



- End -

推荐阅读

Linux环境下进程和计划任务管理

Shell脚本编写及常见面试题

Linux与Unix到底有什么区别?

手把手教你如何快速搭建Zabbix监控系统

如何用几个简单的命令改善你的Linux安全

Linux环境下误删重要文件怎么办?

Linux磁盘和文件系统管理

Linux环境下账号和权限管理

Linux 系统结构详解

Linux环境下vi/vim编辑器常用命令

H3C交换机如何配置SNMP协议?

本文分享自微信公众号 - 杰哥的IT之旅(Jake_Internet)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!