天天看點

運用logrotate維護你的日志檔案

     在linux下面做應用伺服器的兄弟可能都遇到過這些問題,就是有些日志檔案老是很大,可能吧你的整個磁盤都占滿了,怎麼樣才能良好的維護管理這些日志呢,讓日志檔案的大小一直控制在某個區域範圍,而你也能擷取最近的日志,linux自帶的logrotate可以良好的幫你完成這個任務。

對于Linux 的系統安全來說,日志檔案是極其重要的工具。系統管理者可以使用logrotate 程式用來管理系統中的最新的事件,對于Linux 的系統安全來說,日志檔案是極其重要的工具。系統管理者可以使用logrotate 程式用來管理系統中的最新的事件。logrotate 還可以用來備份日志檔案,本篇将通過以下幾部分來介紹

  日志檔案的管理:

  1、logrotate 配置<!-- IWMS_AD_BEGIN-->

<script src="http://www.linuxidc.com/system/system60.js" type="text/javascript"></script>

<!-- IWMS_AD_END-->

  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/endscript 在轉儲以前需要執行的指令可以放入這個對,這兩個關鍵字必須單獨成行

  postrotate/endscript 在轉儲以後需要執行的指令可以放入這個對,這兩個關鍵字必須單獨成行

  daily 指定轉儲周期為每天

  weekly 指定轉儲周期為每周

  monthly 指定轉儲周期為每月

  rotate count 指定日志檔案删除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份

  tabootext [+] list 讓logrotate 不轉儲指定擴充名的檔案,預設的擴充名是:.rpm-orig, .rpmsave, v, 和 ~

  size size 當日志檔案到達指定的大小時才轉儲,Size 可以指定 bytes (預設)以及KB (sizek)或者MB (sizem).

 另: Linux幫助手冊中描述:

  size size

  Log files are rotated when they grow bigger then size bytes. If size is followed by M, the size if assumed to be in megabytes.

  If the k is used, the size is in kilobytes. So size 100, size 100k, and size 100M are all valid.<!-- IWMS_AD_BEGIN-->

<script src="http://www.linuxidc.com/system/system60.js" type="text/javascript"></script>

<!-- IWMS_AD_END-->

  當日志檔案 >= size 的時候就轉儲。 以下為合法格式:(其他格式的機關大小寫沒有試過)

  size = 5 或 size 5 (>= 5 個位元組就轉儲)

  size = 100k 或 size 100k

  size = 100M 或 size 100M

  二、預設配置 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<!-- IWMS_AD_BEGIN-->

<script src="http://www.linuxidc.com/system/system60.js" type="text/javascript"></script>

<!-- IWMS_AD_END-->

  nocompress

  weekly

  prerotate

  /usr/bin/chattr -a /var/log/htmlaccess.log

  endscript

  postrotate

  /usr/bin/chattr +a /var/log/htmlaccess.log

  endscript

  }

  /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<!-- IWMS_AD_BEGIN-->

<script src="http://www.linuxidc.com/system/system60.js" type="text/javascript"></script>

<!-- IWMS_AD_END-->

  {

  prerotate

  /usr/bin/chattr -a /var/log/messages

  endscript

  postrotate

  /usr/bin/kill -HUP syslogd

  /usr/bin/chattr +a /var/log/messages

  endscript

  }

  第一行指定腳本對 花括号外的/var/log/messages 有效

  prerotate 指令指定轉儲以前的動作/usr/bin/chattr -a 去掉/var/log/messages檔案的“隻追加”屬性 endscript 結束 prerotate 部分的腳本postrotate 指定轉儲後的動作

  /usr/bin/killall -HUP syslogd

  用來重新初始化系統日志守護程式 syslogd

  /usr/bin/chattr +a /var/log/messages

  重新為 /var/log/messages 檔案指定“隻追加”屬性,這樣防治程式員或使用者覆寫此檔案。

  最後的 endscript 用于結束 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 端口關掉的話,這個檔案就不能産生了。