Logrotate日誌管理工具

導讀logrotate是一個日誌管理程序,用來把舊的日誌文件刪除(備份),並創建新的日誌文件,這個過程稱爲“轉儲”。我們可以根據日誌的大小,或者根據其使用的天數來轉儲。

logrotate

logrotate 的執行由crond服務實現。在/etc/cron.daily目錄中,有個文件logrotate,它實際上是個shell script,用來啓動logrotate。logrotate程序每天由cron在指定的時間(/etc/crontab)啓動。因此,使用ps是無法查看到logrotate的。如果它沒有起來,就要查看一下crond服務有沒有在運行。在執行logrotate時,需要指定其配置文件/etc/logrotate.conf。這 個配置文件的註釋寫得很清楚,沒有必要再羅嗦了。只想強調下面這行,它的作用包含存放在/etc/logrotate.d目錄下面的配置文件,不可或缺。 如果你安裝了一個新的服務,它的日誌轉儲的規則可以建立一個專門的配置文件,放在/etc/logrotate.d下面。它其實也因爲下面的這句話,在 logrotate服務啓動時被讀取。

每個存放在/etc/logrotate.d目錄裏的文件,都有上面格式的配置信息。在{}中定義的規則,如果與logrotate.conf中的衝突,以/etc/logrotatate.d/中的文件定義的爲準。

Logrotate的運行分爲三步,判斷系統的日誌文件,建立轉儲計劃以及參數,通過cron daemon 運行下面的代碼是 Red Hat Linux 缺省的crontab 來每天運行logrotate。logrotate啓動腳本放在/etc/cron.daily/logrotate中.

#!/bin/sh
test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

可人工執行命令進行測試:

/usr/sbin/logrotate -f /etc/logrotate.conf

看一下主配置文件/etc/logrotate.conf的參數解釋:

# see "man logrotate" for details
# rotate log files weekly
weekly                      #每週輪轉一次
# keep 4 weeks worth of backlogs
rotate 4                    #保留四個日誌文件
# create new (empty) log files after rotating old ones
create                      #rotate後,創建一個新的空文件
# uncomment this if you want your log files compressed
#compress                   #默認是不壓縮的
# RPM packages drop log rotation information into this directory
 
include /etc/logrotate.d    #這個目錄下面配置文件生效
# no packages own wtmp — we’ll rotate them here
/var/log/wtmp {             #定義/var/log/wtmp這個日誌文件;
    monthly                 #每月輪轉一次,取代了上面的全局設定的每週輪轉一次;
    minsize 1M              #定義日誌必須要大於1M大小纔會去輪轉;
    create 0664 root utmp   #新的日誌文件的權限,屬主,屬主;
    rotate 1                #保留一個,取代了上面的全局設定的保留四個;
}
/var/log/btmp {             #定義/var/log/btmp這個日誌文件;
    missingok               #如果日誌丟失, 不報錯;
    monthly
    create 0600 root utmp
    rotate 1
}

如果在對應的文件下沒有設定對應的參數,那麼此日誌會繼承全局配置參數,如:/var/log/btmp文件沒有指定monthly,那麼機會繼承全局參數weekly進行日誌輪換了。

logrotate常用參數介紹

daily                     #指定轉儲週期爲每天
weekly                    #指定轉儲週期爲每週;
monthly                   #指定轉儲週期爲每月;
rotate count              #指定日誌文件刪除之前轉儲的次數,0指沒有備份,5指保留5個備份;
compress                  #通過gzip壓縮轉儲以後的日誌;
nocompress                #不需要壓縮時,用這個參數;
delaycompress             #延遲壓縮,和compress一起使用時,轉儲的日誌文件到下一次轉儲時才壓縮;
nodelaycompress           #覆蓋delaycompress選項,轉儲同時壓縮;
copytruncate              #用於還在打開中的日誌文件,把當前日誌備份並截斷;
nocopytruncate            #備份日誌文件但是不截斷;
create mode owner group   #轉儲文件,使用指定的文件模式創建新的日誌文件;
nocreate                  #不建立新的日誌文件;
errors address            #專儲時的錯誤信息發送到指定的Email地址;
ifempty                   #即使是空文件也轉儲,這個是logrotate的缺省選項;
notifempty                #如果是空文件的話,不轉儲;
mail address              #把轉儲的日誌文件發送到指定的E-mail地;
nomail                    #轉儲時不發送日誌文件;
olddir directory          #轉儲後的日誌文件放入指定的目錄,必須和當前日誌文件在同一個文件系統;
noolddir                  #轉儲後的日誌文件和當前日誌文件放在同一個目錄下;
prerotate/endscript       #在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行;
postrotate/endscript      #在轉儲以後需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行;
tabootext [+] list        #讓logrotate不轉儲指定擴展名的文件,缺省的擴展名是:.rpm-orig, .rpmsave,v,和~ ;
size size                 #當日志文件到達指定的大小時才轉儲,Size可以指定bytes(缺省)以及KB(sizek)或者MB(sizem);
postrotate                #日誌輪換過後指定指定的腳本,endscript參數表示結束腳本;
sharedscripts             #共享腳本,下面的postrotate中的腳本只執行一次即可;

以上參數都可以已定義在全局配置,或者指定爲某個日誌文件對的配置,但注意使用時參數之間不要衝突。

一個新系統準備上線前,應該做好以下日誌的配置,配置到/etc/logrotate.d/目錄下即可。Linux就該這麼學

/var/log/syslog
{
    rotate 7        #保留7份日誌文件;
    daily           #每天輪換一次;
    missingok       #如果日誌丟失,不報錯;
    minsize 10M     #定義日誌必須大於10M纔會去輪換;
    notifempty      #如果是空文件就不進行轉存;
    compress        #壓縮日誌; 
    delaycompress   #延遲壓縮,和compress一起使用時,轉儲的日誌文件到下一次轉儲時才壓縮;
    postrotate      #輪換過後重啓rsyslog服務;
        invoke-rc.d rsyslog rotate > /dev/null
    endscript       #結束腳本;
}
 
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
 
{
    rotate 4 
    weekly    
    missingok
    notifempty
    compress  
    delaycompress
    sharedscripts    #共享腳本,下面的postrotate腳本只執行一次即可;
    postrotate
        invoke-rc.d rsyslog rotate > /dev/null
    endscript
}

在定義日誌文件時也可以使用通配符,但最好少用通配符,因會它會包括已經切換過的日誌,要用的話最好在*號後加上擴展名, 如*.log。

一般除了這些系統日誌需要配置一下,還有一些應用日誌以及組件日誌可能也需要配置,如Nginx、php、tomcat、zabbix-agent等。

NGINX日誌

/var/log/nginx/*log {
    daily
    rotate 10
    missingok
    notifempty
    compress
    sharedscripts
    su root
    postrotate
        /bin/kill -USR1 $(cat /var/run/nginx.pid 2>/dev/null) 2>/dev/null || :
    endscript
}

PHP日誌

/var/log/php-fpm/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    create 0664 www www
    postrotate
        /bin/kill -SIGUSR1 `cat /var/run/php-fpm/php-fpm.pid 2>/dev/null` 2>/dev/null || true
    endscript
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章