當服務器系統在持續運行時,服務器中部署的各類服務就會產生日誌,久而久之服務器中保存的日誌文件會愈來愈大,一個日誌文件可能佔用數百G的磁盤容量,難以保存,也難以經過查看日誌文件進行排錯。所以,咱們須要對日誌進行輪轉操做,只須要保留近期的日誌信息,對比較久遠的日誌信息進行壓縮並轉存到日誌服務器,這樣作可讓大大下降日誌佔用的磁盤空間,同時保證咱們能夠在服務出現問題的時候經過日誌信息進行排錯和解決
工具
logrotate日誌輪轉工具能夠很輕鬆的管理系統所產生的日誌,它提供自動壓縮、刪除、分割日誌文件的功能,logrotate日誌輪狀的優勢有:
1)能夠分隔,如按天,按月,按年分割日誌,減少日誌大小,下降分析難度
2)能夠及時清除在rotate輪轉期限外的多於日誌數據
3)結合計劃任務執行
經常使用參數node
compress:經過gzip對轉儲之後的日誌進行壓縮 nocompress:不對日誌進行gzip壓縮處理 copytruncate:用於處理還在打開中的日誌文件,以先拷貝再清空的方式對當前日誌進行備份並截斷操做;因爲拷貝和清空之間有一個時間差,可能會丟失部分日誌數據 nocopytruncate:備份日誌文件但不進行截斷操做 create mode owner group:輪轉時指定建立新文件,可指定權限、屬主和屬組 nocreate:日誌輪轉後不建立新的日誌文件 delaycompress:發生輪轉的日誌文件到下一次轉儲時才壓縮 nodelaycompress:日誌輪轉同時進行壓縮 missingok:若是日誌丟失,忽略此日誌不產生報錯 errors address:輪轉時產生的錯誤信息發送到指定的Email地址 ifempty:空日誌也進行日誌輪轉 notifempty:空日誌不進行輪轉 olddir directory:輪轉後的日誌文件放入指定的目錄,指定目錄和當前日誌文件須要在同一個文件系統 noolddir:輪轉後的日誌文件和當前日誌文件放在同一個目錄下 sharedscripts:全部日誌都輪轉後統一執行postrotate腳本 prerotate:在logrotate輪轉以前須要執行的指令,如修改文件的屬性 postrotate:在logrotate轉儲以後須要執行的指令,如重啓(kill -HUP)服務 daily:指定輪轉週期爲天天 weekly:指定輪轉週期爲每週 monthly:指定輪轉週期爲每個月 rotate count:指定日誌文件刪除以前輪轉的次數,0:沒有備份,5:保留5個備份 dateext:使用當期日期做爲輪轉日誌的後綴名 dateformat .%s:配合dateext使用,緊跟在下一行出現,定義文件切割後的文件名,只支持 %Y %m %d %s 這四個參數 size(或minsize) log-size:當日志文件到達指定的大小時才輪轉,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem). 當日志文件 >= log-size 的時候就輪轉 size = 5 或 size 5 (>= 5 個字節就輪轉) size = 100k 或 size 100k size = 100M 或 size 100M
手動日誌輪轉mysql
[root@localhost ~]# logrotate -f /etc/logrotate.conf
修改配置文件nginx
[root@localhost ~]# vi /etc/ssh/sshd_config #指定rsyslog管理日誌的設備載體爲local1 SyslogFacility local1
設定日誌管理sql
[root@localhost ~]# vi /etc/rsyslog.conf #設置SSH服務的全部級別日誌經過local1載體設備保存到本地文件夾中 local1.* /var/log/ssh.log
配置日誌輪轉shell
[root@localhost ~]# vi /etc/logrotate.d/ssh /var/log/ssh.log{ #設定文件不存在也不報錯 missingok #設置輪轉週期 weekly #日誌輪轉後新建日誌文件 create #設置輪轉保留的文件數 rotate 4 #設置輪轉文件的大小 size 5M #以日期爲日誌輪轉後綴 #若使用nodateext設置不以日期爲後綴,則以1,2,3爲文件後綴 dateext }
配置日誌輪轉apache
[root@localhost ~]# vi /etc/logrotate.d/mysqld /var/log/mysql/mysqld.log { missingok create 600 mysql mysql notifempty weekly rotate 4 dateext postrotate #當MySQL服務正在運行時 if test -x /usr/bin/mysqladmin && \ /usr/bin/mysqladmin ping &>/dev/null then #對日誌進行清洗,產生新的binlog日誌 /usr/bin/mysqladmin flush-logs fi endscript }
配置日誌輪轉服務器
[root@localhost ~]# vi /etc/logrotate.d/httpd /var/log/httpd/*log { missingok weekly #空文件不輪轉 notifempty #延遲壓縮 delaycompress create sharedscripts postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript }
配置日誌輪轉ssh
[root@localhost ~]# vi /etc/logrotate.d/nginx /usr/local/nginx/logs/access.log{ daily missingok rotate 4 #把舊的文件進行壓縮 compress #延遲壓縮 delaycompress #空文檔不輪轉 notifempty create 640 root root sharedscripts postrotate if [ -f /usr/local/nginx/logs/nginx.pid ]; then kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` fi endscript } /usr/local/nginx/logs/error.log{ daily missingok rotate 4 #把舊的文件進行壓縮 compress #延遲壓縮 delaycompress #空文檔不輪轉 notifempty create 640 root root sharedscripts postrotate if [ -f /usr/local/nginx/logs/nginx.pid ]; then kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` fi endscript }