Linux日志工具logrotate詳解


logrotate工具的介紹

 

logrotate是一個linux系統日志的管理工具。可以對單個日志文件或者某個目錄下的文件按時間/大小進行切割,壓縮操作;指定日志保存數量;還可以在切割之后運行自定義命令。

logrotate是基於crontab運行的,所以這個時間點是由crontab控制的,具體可以查詢crontab的配置文件/etc/anacrontab。系統會按照計划的頻率運行logrotate,通常是每天。在大多數的Linux發行版本上,計划每天運行的腳本位於 /etc/cron.daily/logrotate。

1、配置文件介紹

Linux系統默認安裝logrotate工具,它默認的配置文件在:

主配置文件: /etc/logrotate.conf
目錄:/etc/logrotate.d/
logrotate 歷史: /var/lib/logrotate.status

 logrotate.conf 是 logrotate 的主配置文件,logrotate.d 是一個目錄,該目錄里的所有文件都會被主動的讀入/etc/logrotate.conf中執行,另外,如果 /etc/logrotate.d/ 里面的文件中沒有設定一些細節,則會以/etc/logrotate.conf這個文件的設定來作為默認值。

 logrotate 定義日志信息配置選項:

compress             --> 壓縮日志文件的所有非當前版本
daily,weekly,monthly --> 按指定計划輪換日志文件
delaycompress        --> 壓縮所有版本,除了當前和下一個最近的
endscript            --> 標記 prerotate 或 postrotate 腳本的結束
errors "emailid"     --> 給指定郵箱發送錯誤通知
missingok            --> 如果日志文件丟失,不要顯示錯誤
notifempty           --> 如果日志文件為空,則不輪換日志文件
olddir "dir"         --> 指定日志文件的舊版本放在 “dir” 中
postrotate           --> 引入一個在日志被輪換后執行的腳本
prerotate            --> 引入一個在日志被輪換前執行的腳本
rotate 'n'           --> 在輪換方案中包含日志的 n 個版本
sharedscripts        --> 對於整個日志組只運行一次腳本
size='logsize'       --> 在日志大小大於 logsize(例如 100K,4M)時輪換

logrotate 命令格式:

logrotate [OPTION...] <configfile>
-d, --debug :debug模式,測試配置文件是否有錯誤。
-f, --force :強制轉儲文件。
-m, --mail=command :壓縮日志后,發送日志到指定郵箱。
-s, --state=statefile :使用指定的狀態文件。
-v, --verbose :顯示轉儲過程。

配置

讓我們為我們自己的示例日志文件 /tmp/sample.log 配置 logrotate.

第一步:在 /etc/logrotate.d/目錄中添加一下文件,其中test為文件名稱,可以根據服務自定義.

# vim /etc/logrotate.d/test 

# Logrotate file for test
/tmp/sample_output.log {
    missingok
    monthly
    create 0600 ofm ofm
    rotate 1
dateext

}

在上面的配置文件中:

size 1k    - logrotate 僅在文件大小等於(或大於)此大小時運行。

create     - 輪換原始文件並創建具有指定權限、用戶和組的新文件。

rotate     - 限制日志文件輪轉的數量。因此,這將只保留最近的 4 個輪轉的日志文件。

compress   - 這將壓縮文件。

dateext    - 這個參數很重要!就是切割后的日志文件以當前日期為格式結尾,如xxx.log-20131216這樣,如果注釋掉,切割出來是按數字遞增,即前面說的 xxx.log-1這種格式.  

第二步:通常,你需要等待一天才能等到 logrotate 由 /etc/cron.daily 執行。除此之外,你可以用下面的命令在命令行中運行:

# /usr/sbin/logrotate -f /etc/logrotate.d/test
# /usr/sbin/logrotate -d -f /etc/logrotate.d/test

想手動強制切割日志,需要加-f參數;不過正式執行前最好通過Debug選項來驗證一下(-d參數),這對調試也很重要。

在執行 logrotate 之后查看日志是否被切割.

# /usr/sbin/logrotate -f /etc/logrotate.d/test
# ll /tmp
-rw-------  1 ofm  ofm       0 Aug 12 15:53 sample.log
-rw-------  1 root root 216014 Aug 12 15:53 sample.log.1.gz

這樣就能確認 logrotate 成功實現了。

#cat /etc/logrotate.conf
weekly          //默認每一周執行一次rotate輪轉工作
rotate 4       //保留多少個日志文件(輪轉幾次).默認保留四個.就是指定日志文件刪除之前輪轉的次數,0 指沒有備份
create         //自動創建新的日志文件,新的日志文件具有和原來的文件相同的權限;因為日志被改名,因此要創建一個新的來繼續存儲之前的日志
dateext       //這個參數很重要!就是切割后的日志文件以當前日期為格式結尾,如xxx.log-20131216這樣,如果注釋掉,切割出來是按數字遞增,即前面說的 xxx.log-1這種格式
compress      //是否通過gzip壓縮轉儲以后的日志文件,如xxx.log-20131216.gz ;如果不需要壓縮,注釋掉就行

include /etc/logrotate.d
# 將 /etc/logrotate.d/ 目錄中的所有文件都加載進來

/var/log/wtmp {                //僅針對 /var/log/wtmp 所設定的參數
monthly                       //每月一次切割,取代默認的一周
minsize 1M                   //文件大小超過 1M 后才會切割
create 0664 root utmp           //指定新建的日志文件權限以及所屬用戶和組
rotate 1                       //只保留一個日志.
}
# 這個 wtmp 可記錄用戶登錄系統及系統重啟的時間
# 因為有 minsize 的參數,因此不見得每個月一定會執行一次喔.要看文件大小。

小示例:下面一個切割nginx日志的配置

# vim /etc/logrotate.d/nginx
/usr/local/nginx/logs/*.log {
daily
rotate 7
missingok
notifempty
dateext
sharedscripts
postrotate
    if [ -f /usr/local/nginx/logs/nginx.pid ]; then
        kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
    fi
endscript
}

 

參考文檔:https://www.cnblogs.com/txlsz/p/13126723.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM