logrotate linux 系統日志管理


logrotate
logrotate簡介
logrorare一定程度上可以簡化對會生成大量日志文件的系統的管理。logrotate可以實現自動輪替、刪除、壓縮和mail日志的功能。
執行命令
logrotate [-dv] [-f|--force] [-s|--state statefile] config_file ..
選項
# logrotate --help
Usage: logrotate [OPTION...] <configfile>
  -d, --debug              Don't do anything, just test (implies -v) 不做實際處理,僅調試
  -f, --force              Force file rotation 強制執行,忽視參數要求
  -m, --mail=command        Command to send mail (instead of `/bin/mail') 發送mail
  -s, --state=statefile    Path of state file 查看狀態文件
  -v, --verbose            Display messages during rotation 輪替一次,並顯示輪替過程信息
  --version                Display version information 顯示logrotate版本
Help options:
  -?, --help                Show this help message
  --usage                  Display brief usage message
配置文件
/etc/logrotate.conf
/etc/logrotate.d
logrotate.conf是主要的參數文件,至於logrotate.d是一個目錄,該目錄里面的所有文件都會被logrotate.conf文件主動讀入,若logrotate.d/里的文件沒有指定詳細設置,則以/etc/logrotate.conf這個文件里配置的默認值為准。
/etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly 每周輪替一次
weekly
# keep 4 weeks worth of backlogs 保留4個輪替日志
rotate 4
# create new (empty) log files after rotating old ones 輪替后創建新的日志文件
create
# use date as a suffix of the rotated file 使用時間作為輪替文件的后綴
dateext
# uncomment this if you want your log files compressed 如果需要壓縮日志,去除注釋
#compress
# RPM packages drop log rotation information into this directory 讓/etc/logrotate.d目錄下面配置文件內容參與輪替
include /etc/logrotate.d
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {   #輪替對象為/var/log/中的wtmp文件
    monthly       #每個月輪替一次
    create 0664 root utmp #創建新的日志文件 權限 所屬用戶 所屬組
    minsize 1M    #日志大小大於1M后才能參與輪替
    rotate 1      #保留一個輪替日志文件
}
/var/log/btmp {
    missingok   #如果日志文件不存在,繼續進行下一個操作,不報錯
    monthly
    create 0600 root utmp
    rotate 1
}

/etc/logrotate.d
/etc/logrotate.d如上面說到的,在logrotate配置中扮演一個目錄的角色,通過logrotate.conf中的配置include /etc/logrotate.d將/etc/logrotate.d目錄包含進來,即將該目錄下的文件內容加入到輪替任務中。
這里先簡單介紹一下該目錄下的文件內容及其格式,后面再對具體案例進行分析。
格式
日志文件路徑 ...{ #多個文件絕對路徑路徑可以用空格、換行分隔,
  參數配置
}
/etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler      #作用域:/var/log/目錄下的cron、maillog、messages、secure和spooler文件
{
    missingok        
    sharedscripts     #作用域下文件存在至少有一個滿足輪替條件的時候,完成輪替后執行一次postrotate內的腳本。
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
常用參數
 
參數
描述
 

daily
每天輪替一次

weekly
每周輪替一次

monthly
每月輪替一次

yearly
每年輪替一次

rotate
保留幾個輪替日志文件

ifempty
不論日志是否空,都進行輪替

notifempty
若日志為空,則不進行輪替

create
舊日志文件輪替后創建新的日志文件

size
日志達到多少后進行rotate

minsize
文件容量一定要超過多少后才進行rotate

nocompress
輪替但不進行壓縮

compress
壓縮輪替文件

dateext
輪替舊日志文件時,文件名添加-%Y %m %d形式日期,可用dateformat選項擴展配置。

nodateext
舊日志文件不使用dateext擴展名,后面序數自增如"*.log.1"

dateformat
只允許%Y %m %d和%s指定符。注意:系統時鍾需要設置到2001-09-09之后,%s才可以正確工作

sharedscripts
作用域下文件存在至少有一個滿足輪替條件的時候,執行一次prerotate腳本和postrotate腳本。

prerotate/endscript
在輪替之前執行之間的命令,prerotate與endscript成對出現。

postrotate/endscript
在輪替之后執行之間的命令,postrotate與endscript成對出現。

olddir
將輪替的文件移至指定目錄下

missingok
如果日志文件不存在,繼續進行下一個操作,不報錯
 
舉個自定義的例子
#/etc/logrotate.d/test
/test/log/*.log{
    daily
    rotate 2
    size 1M
    create
    compress
    missingok
    dateext
    olddir /test/rotate
}
每天對/test/log/目錄下后綴為“.log”的且大小超過1MB的文件進行輪替,文件后綴為”-20171124“。壓縮輪替后的文件,並將該文件移到”/test/rotate“目錄下,一個原日志文件最多僅有2個對應輪替日志文件,若輪替日志大於設定的值則刪除之前較早的輪替日志文件。創建新的日志文件。若/test/log/目錄下文件名以”.log“結尾的文件不存在,不報錯。
回到之前的話題,磁盤被日志撐滿的話題,參考參數列表,我們會發現logrotate提供的輪替周期參數只能精確到天,以一天為輪替周期在一些情況下並不能滿足我們的要求,這個時候該怎么辦呢?
----這里可以搭配crontab(例行性工作),通過定時任務來執行logrotate命令,從而在不同情況實現對logrotate任務的自定義頻率調用。
例行性工作的簡單配置使用
cron執行時會讀取/etc/cron.d這個目錄的所有文件,按照文件中的設置來定時執行任務。該目錄下新增的文件后,無需再重啟crond服務。這里只簡單地介紹該種定時任務配置。
#格式
*(分鍾) *(小時) *(天) *(月) *(周幾) 用戶 命令
# 若分鍾位值為 *,表示0-59之間的任意有效值;
# 若分鍾位值為 1,表示每小時的第1分鍾;
# 若分鍾位值為 */5,表示每5分鍾
# 若分鍾位值為10,20 表示每小時的第10分鍾和第20分鍾
# 若分鍾位值為10-12 表示每小時的第10、11、12分鍾
#/etc/cron.d/cron_test
* */1 * * * root /usr/sbin/logrotate -v /etc/logrotate.d/test
每小時root用戶會調用logrotate讀取/etc/logrotate.d/test配置,執行一次。
 
 
 
 
# rotate log files monthly
monthly
# keep 4 weeks worth of backlogs
rotate 12
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp and btmp ... -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 12
}
/var/log/btmp {
    monthly
    create 0600 root utmp
    rotate 12
}
/var/log/messages {
    monthly
    create 0600 root utmp
    rotate 12
}
/var/log/secure {
    monthly
    create 0600 root utmp
    rotate 12
}
/var/log/maillog {
    monthly
    create 0600 root utmp
    rotate 12
}

# system-specific logs may be also be configured here.
 
 
下面自己定義文件 在 crontab 定時每周一強制轉存
#/etc/logrotate.d/log_cron   (文件名log_cron)
* * * * 1  /usr/sbin/logrotate -fv /etc/logrotate.d/log_cron
/var/log/wtmp {
    monthly
    dateext
    create 0664 root utmp
    rotate 12
}
/var/log/btmp {
    monthly
    dateext
    create 0600 root utmp
    rotate 12
}
/var/log/messages {
    monthly
    dateext
    create 0600 root utmp
    rotate 12
}
/var/log/secure {
    monthly
    dateext
    create 0600 root utmp
    rotate 12
}
/var/log/maillog {
    monthly
    dateext
    create 0600 root utmp
    rotate 12
}


免責聲明!

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



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