Linux:日誌輪轉

日誌重要性

Linux系統日誌對管理員來說,是瞭解系統運行的主要途徑,因此需要對 Linux 日誌系統有個詳細的瞭解。 Linux 系統內核和許多程序會產生各種錯誤信息、告警信息和其他的提示信息,這些各種信息都應該記錄到日誌文件中,完成這個過程的程序就是 rsyslog,rsyslog 可以根據日誌的類別和優先級將日誌保存到不同的文件中。

二、日誌系統rsyslog

日誌管理基礎

<code> rsyslog 日誌管理 
 logrotate日誌輪轉/<code>

一、處理日誌的進程

<code> rsyslogd:絕大部分日誌記錄,和系統操作有關,安全,認證sshd,su,計劃任務at,cron... httpd/nginx/mysql: 可以自己的方式記錄日誌
 [root@linux-server ~]# ps aux |grep rsyslogd
 root        752  0.0  0.2 216440  5548 ?        Ssl  20:18   0:00 /usr/sbin/rsyslogd -n
 
 日誌配置主文件:
 /etc/rsyslog.conf /<code>

二、常見的日誌文件(系統、進程、應用程序)

<code> #tail -f /var/log/messages                  #動態查看日誌文件的尾部,系統主日誌文件
 ​
 #tail -f /var/log/secure                    #記錄認證、安全的日誌
 ​
 tail /var/log/maillog                       #跟郵件postfix相關
 ​
 tail /var/log/cron                          #crond、at進程產生的日誌
 ​
 tail /var/log/dmesg                         #和系統啟動相關
 ​
 tail /var/log/yum.log                       #yum的日誌
 ​
 tail -f /var/log/mysqld.log                 #MySQL日誌
 ​
 tail /var/log/xferlog                       #和訪問FTP服務器相關
 ​
 /var/log/boot.log                           #系統啟動過程日誌記錄存放
 ​
 [root@linux-server ~]#w                    #當前登錄的用戶 /var/log/wtmp
 ​
 [root@linux-server ~]#last                 #最近登錄的用戶 /var/log/btmp
 第一列,用戶名;
 第二列,終端位置,/pts/0 (偽終端)意味著從諸如ssh或者telnet的遠程鏈接的用戶,tty(teletypewriter)意味著直接連接到計算機或者本地鏈接的用戶;
 第三列,登錄的ip或者內核。
 第四列,開始時間;
 第五列,結束時間(still login in 還未退出 down 直到正常關機 crash 直到強制關機);
 ​
 [root@linux-server ~]#lastlog              #所有用戶的登錄情況 /var/log/lastlog/<code> 

日誌優先級

<code> 日誌級別分為:7種日誌級別代號0-7
 ​
 0 debug             #有調試信息的,日誌信息最多
 ​
 1 info              #一般信息的日誌,最常用
 ​
 2 notice            #最具有重要性的普通條件的信息
 ​
 3 warning           #警告級別
 ​
 4 err               #錯誤級別,阻止某個功能或者模塊不能正常工作的信息
 ​
 5 crit              #嚴重級別,阻止整個系統或者整個軟件不能工作的信息
 ​
 6 alert             #需要立刻修改的信息
 ​
 7 emerg             #內核崩潰等嚴重信息
 ​
 none                #什麼都不記錄/<code>

三、logrotate日誌輪轉

<code> 什麼是日誌輪轉? 自動切日誌
 注:可以針對任何日誌文件(rsyslog 日誌、Nginx訪問或錯誤日誌...)
 一、logrotate (輪轉,日誌切割) 
 1. 如果沒有日誌輪轉,日誌文件會越來越大
 2. 將丟棄系統中最舊的日誌文件,以節省空間 
 3. logrotate本身不是系統守護進程,它是通過計劃任務crond每天執行
 logrotate 配置文件:
 主配置文件:/etc/logrotate.conf (決定每個日誌文件如何輪轉)
 配置日誌輪轉
 [root@linux-server ~]# vim /etc/logrotate.conf  
 weekly              #輪轉的週期,一週輪轉,單位有年,月,日 
 rotate 4            #保留4份 
 create              #輪轉後創建新文件 
 dateext             #使用日期作為後綴 
 #compress           #日誌輪替時,舊的日誌進行壓縮 
 include /etc/logrotate.d             #包含該目錄下的配置文件,會引用該目錄下面配置的文件
 ​
 /var/log/wtmp {                     #對該日誌文件設置輪轉的方法    
  monthly                            #一月輪轉一次  
  minsize 1M                         #最小達到1M才輪轉,否則就算時間到了也不輪轉
  create 0664 root utmp              #輪轉後創建新文件,並設置權限   
  rotate 2                           #保留2份 
 }
 ​
 /var/log/btmp {    
  missingok                          #丟失不提示    
  monthly                            
  create 0600 root utmp              
  rotate 1                           
 } /<code> 

案例

<code> 例1:輪轉文件/var/log/yum.log
 ​
 [root@linux-server ~]# vim /etc/logrotate.d/yum    
 /var/log/yum.log {
  missingok                                #丟失不提醒
  #notifempty                              #空文件不輪轉 
  #size 30k                                  #只要到了30k就輪轉
  #yearly
  daily                                     #每天輪轉一次   
  rotate 3      
  create 0644 root root 
 }
 ​
 測試:
 [root@linux-server ~]# /usr/sbin/logrotate /etc/logrotate.conf    #手動輪轉
 [root@linux-server ~]# ls /var/log/yum*
 /var/log/yum.log  /var/log/yum.log-20191110
 ​
 [root@linux-server ~]# grep yum /var/lib/logrotate/logrotate.status #查看記錄所有日誌文件最近輪轉的時間
 "/var/log/yum.log" 2019-11-10-21:26:14
 ​
 2:日誌安全,操作日誌的隱藏權限
 [root@localhost log]# cd /etc/logrotate.d/
 [root@localhost logrotate.d]# vim syslog
 建議測試時先把/etc/logrotate.d/syslog中messages刪除,然後在下面添加如下:
 /var/log/messages{
     prerotate
        chattr -a /var/log/messages
     endscript
     #notifempty
     daily
         create 0600 root root
         missingok
         rotate 3
 ​
     postrotate
         chattr +a /var/log/messages
     endscript
 }
 [root@localhost logrotate.d]# /usr/sbin/logrotate /etc/logrotate.conf  #手動輪轉
 [root@localhost logrotate.d]# cd /var/log/
 [root@localhost log]# ls mess*
 messages  messages-20200805  messages-20200806
 ​
 參數解釋:
 prerotate/endscript - 在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
 postrotate/endscript - 在轉儲以後需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行/<code>


分享到:


相關文章: