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中的壞道情況
在這裏插入圖片描述

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