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>