使用logrotate來管理linux上的日志 |
發布時間: 2012/8/10 15:37:11 |
對于Linux 的系統安全來說,日志文件是極其重要的工具。
系統管理員可以使用logrotate 程序用來管理系統中的最新的事件。logrotate 還可以用來備份日志文件,本篇將通過以下幾部分來介紹 日志文件的管理: 1、logrotate 配置 2、缺省配置 logrotate 3、使用include 選項讀取其他配置文件 4、使用include 選項覆蓋缺省配置 5、為指定的文件配置轉儲參數 一、logrotate 配置 logrotate 程序是一個日志文件管理工具。用來把舊的日志文件刪除,并創建新的日志文件,我們把它叫做“轉儲”。我們可以根據日志文件的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程序來執行。 logrotate 程序還可以用于壓縮日志文件,以及發送日志到指定的E-mail 。 logrotate 的配置文件是 /etc/logrotate.conf。主要參數如下表: 參數 功能 compress 通過gzip 壓縮轉儲以后的日志 nocompress 不需要壓縮時,用這個參數 copytruncate 用于還在打開中的日志文件,把當前日志備份并截斷 nocopytruncate 備份日志文件但是不截斷 create mode owner group 轉儲文件,使用指定的文件模式創建新的日志文件 nocreate 不建立新的日志文件 delaycompress 和 compress 一起使用時,轉儲的日志文件到下一次轉儲時才壓縮 nodelaycompress 覆蓋 delaycompress 選項,轉儲同時壓縮。 errors address 專儲時的錯誤信息發送到指定的Email 地址 ifempty 即使是空文件也轉儲,這個是 logrotate 的缺省選項。 notifempty 如果是空文件的話,不轉儲 mail address 把轉儲的日志文件發送到指定的E-mail 地址 nomail 轉儲時不發送日志文件 olddir directory 轉儲后的日志文件放入指定的目錄,必須和當前日志文件在同一個文件系統 noolddir 轉儲后的日志文件和當前日志文件放在同一個目錄下 prerotate/end 在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行 postrotate/end 在轉儲以后需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行 daily 指定轉儲周期為每天 weekly 指定轉儲周期為每周 monthly 指定轉儲周期為每月 rotate count 指定日志文件刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份 tabootext [+] list 讓logrotate 不轉儲指定擴展名的文件,缺省的擴展名是:.rpm-orig, .rpmsave, v, 和 ~ size size 當日志文件到達指定的大小時才轉儲,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem). 二、缺省配置 logrotate logrotate 缺省的配置募 ?/etc/logrotate.conf。 Red Hat Linux 缺省安裝的文件內容是: # see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # send errors to root errors root # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed #compress 1 # RPM packages drop log rotation information into this directory include /etc/logrotate.d # no packages own lastlog or wtmp --we'll rotate them here /var/log/wtmp { monthly create 0664 root utmp rotate 1 } /var/log/lastlog { monthly rotate 1 } # system-specific logs may be configured here 缺省的配置一般放在logrotate.conf 文件的最開始處,影響整個系統。在本例中就是前面12行。 第三行weekly 指定所有的日志文件每周轉儲一次。 第五行 rotate 4 指定轉儲文件的保留 4份。 第七行 errors root 指定錯誤信息發送給root。 第九行create 指定 logrotate 自動建立新的日志文件,新的日志文件具有和 原來的文件一樣的權限。 第11行 #compress 指定不壓縮轉儲文件,如果需要壓縮,去掉注釋就可以了。 三、使用include 選項讀取其他配置文件 include 選項允許系統管理員把分散到幾個文件的轉儲信息,集中到一個 主要的配置文件。當 logrotate 從logrotate.conf 讀到include 選項時,會從指定文件讀入配置信息,就好像他們已經在/etc/logrotate.conf 中一樣。 第13行 include /etc/logrotate.d 告訴 logrotate 讀入存放在/etc/logrotate.d 目錄中的日志轉儲參數,當系統中安裝了RPM 軟件包時,使用include 選項十分有用。RPM 軟件包的日志轉儲參數一般存放在/etc/logrotate.d 目錄。 include 選項十分重要,一些應用把日志轉儲參數存放在 /etc/logrotate.d 。 典型的應用有:apache, linuxconf, samba, cron 以及syslog。 這樣,系統管理員只要管理一個 /etc/logrotate.conf 文件就可以了。 四、使用include 選項覆蓋缺省配置 當 /etc/logrotate.conf 讀入文件時,include 指定的文件中的轉儲參數將覆蓋缺省的參數,如下例: # linuxconf 的參數 /var/log/htmlaccess.log { errors jim notifempty nocompress weekly prerotate /usr/bin/chattr -a /var/log/htmlaccess.log end postrotate /usr/bin/chattr +a /var/log/htmlaccess.log end } /var/log/netconf.log { nocompress monthly } 在這個例子中,當 /etc/logrotate.d/linuxconf 文件被讀入時,下面的參數將覆蓋/etc/logrotate.conf中缺省的參數。 Notifempty errors jim 五、為指定的文件配置轉儲參數 經常需要為指定文件配置參數,一個常見的例子就是每月轉儲/var/log/wtmp。為特定文件而使用的參數格式是: # 注釋 /full/path/to/file { option(s) } 下面的例子就是每月轉儲 /var/log/wtmp 一次: #Use logrotate to rotate wtmp /var/log/wtmp { monthly rotate 1 } 六、其他需要注意的問題 1、盡管花括號的開頭可以和其他文本放在同一行上,但是結尾的花括號必須單獨成行。 2、使用 prerotate 和 postrotate 選項 下面的例子是典型的腳本 /etc/logrotate.d/syslog,這個腳本只是對 /var/log/messages 有效。 /var/log/messages { prerotate /usr/bin/chattr -a /var/log/messages end postrotate /usr/bin/kill -HUP syslogd /usr/bin/chattr +a /var/log/messages end } 第一行指定腳本對 /var/log messages 有效 花ê哦閱誆康慕瘧駒誦杏? /var/log/messages prerotate 命令指定轉儲以前的動作/usr/bin/chattr -a 去掉/var/log/messages文件的“只追加”屬性 end 結束 prerotate 部分的腳本postrotate 指定轉儲后的動作 /usr/bin/killall -HUP syslogd 用來重新初始化系統日志守護程序 syslogd /usr/bin/chattr +a /var/log/messages 重新為 /var/log/messages 文件指定“只追加”屬性,這樣防治程序員或用戶覆蓋此文件。 最后的 end 用于結束 postrotate 部分的腳本 3、logrotate 的運行分為三步: 判斷系統的日志文件,建立轉儲計劃以及參數,通過cron daemon 運行下面的代碼是 Red Hat Linux 缺省的crontab 來每天運行logrotate。 #/etc/cron.daily/logrotate #! /bin/sh /usr/sbin/logrotate /etc/logrotate.conf 4、/var/log/messages 不能產生的原因: 這種情況很少見,但是如果你把/etc/services 中的 514/UDP 端口關掉的話,這個文件就不能產生了 本文出自:億恩科技【www.sunshares.net】 |