使用logrotate 管理Linux日誌檔

tolywang發表於2005-08-17

使用logrotate 管理Linux日誌檔

編輯整理:王琦

2005/08/15

對於Linux 的系統安全來說,日誌檔案是極其重要的工具。系統管理員可以使用logrotate 程式用來管理系統中的最新的事件logrotate 還可以用來備份日誌檔案。 那麼日誌檔案是如何管理及如何實現輪換的呢


Linux 的系統日誌一般被記錄在/var/log/ 目錄下 。日誌紀錄配置文件為 /etc/syslog.conf .

/var/log/ 目錄:

./var/log 記錄了幾乎所有的log , 但是沒有記錄ftp log , 我們可以透過 /etc/ftpaccess 設定及修改來達到這個目的

boot.log 啟動資訊

cron 紀錄排程執行的log .

/var/log/messages messages 日誌是核心系統日誌檔案。它包含了系統啟動時的引導訊息,以及系統執行時的其他狀態訊息。IO 錯誤、網路錯誤和其他系統錯誤都會記錄到這個檔案中。其他資訊,比如某個人的身份切換為 root,也在這裡列出。如果服務正在執行,比如 DHCP 伺服器,您可以在 messages 檔案中觀察它的活動。通常,/var/log/messages 是您在做故障診斷時首先要檢視的檔案。

/var/log/XFree86.0.log 這個日誌記錄的是 Xfree86 Xwindows 伺服器最後一次執行的結果。如果您在啟動到圖形模式時遇到了問題,一般情況從這個檔案中會找到失敗的原因。

/var/log/secure 紀錄登陸的ip, 時間,登陸方式等

檢視日誌的工具

dmesg 使用 dmesg 命令可以快速檢視最後一次系統引導的引導日誌。通常它的內容會很多,所以您往往會希望將其透過管道傳輸到一個閱讀器。 dmesg | more 上面的命令將以分頁的方式顯示引導資訊。 tail 有時,當某些行為發生時,您會希望密切關注一個日誌檔案。Tail 命令設計用於顯示文字檔案的最後幾行。使用 -f 開關,當日志增加新的內容時,tail 將繼續顯示新的輸出。 tail -f /var/log/messages

/etc/syslog.conf 日誌配置檔案內容

其中記錄的內容,注意 # 後面的解釋

# Log all kernel messages to the console. (紀錄所有的核心資訊到字元裝置)

# Logging much else clutters up the screen.

#kern.* /dev/console

# Log anything (except mail) of level info or higher. (紀錄除了mail資訊之外的所有log)

# Don't log private authentication messages!

*.info;mail.none;authpriv.none;cron.none /var/log/messages

# The authpriv file has restricted access. (紀錄受到限制的訪問)

authpriv.* /var/log/secure

# Log all the mail messages in one place.

mail.* /var/log/maillog

# Log cron stuff (紀錄cron排程執行的log)

cron.* /var/log/cron

# Everybody gets emergency messages

*.emerg *

# Save news errors of level crit and higher in a special file. (在一個專門的檔案中儲存)

uucp,news.crit /var/log/spooler

# Save boot messages also to boot.log (記錄啟動資訊)

local7.* /var/log/boot.log

二. Linux 的系統日誌一般內容

日誌檔案記錄例子(messages為例)

以下log messages 是從目前執行的SFC系統中摘錄下來的 messages, messages.1, messages.2 , messages.3 , messages.4 ,紀錄所有Linux系統相關變化及狀態,使用者登入資訊等

[root@dmdii-node2 log]# pwd

/var/log

[root@dmdii-node2 log]#

[root@dmdii-node2 log]# vi messages.1

messages.1 檔案內容

Aug 7 04:03:02 dmdii-node1 syslogd 1.4.1: restart. (最開始的一句)

......

Aug 14 04:03:02 dmdii-node1 cups: cupsd startup succeeded (最後的一句)

messages.2 檔案內容

Jul 31 04:03:02 dmdii-node1 syslogd 1.4.1: restart. (最開始的一句)

.......

Aug 7 04:03:02 dmdii-node1 cups: cupsd startup succeeded (最後的一句)

messages.3 檔案內容

Jul 24 04:03:02 dmdii-node1 syslogd 1.4.1: restart. (最開始的一句)

.......

Jul 31 04:03:02 dmdii-node1 cups: cupsd startup succeeded (最後的一句)

messages.4檔案內容

Jul 17 04:03:02 dmdii-node1 syslogd 1.4.1: restart. (最開始的一句)

.......

Jul 24 04:03:02 dmdii-node1 cups: cupsd startup succeeded (最後的一句)

messages 檔案內容

Aug 14 04:03:02 dmdii-node1 syslogd 1.4.1: restart.

Aug 15 08:01:42 dmdii-node1 login(pam_unix)[7840]: session opened for user oracle by (uid=0)

Aug 15 08:01:42 dmdii-node1 -- oracle[7840]: LOGIN ON pts/0 BY oracle FROM 10.134.48.86

Aug 15 08:17:06 dmdii-node1 su(pam_unix)[8024]: session opened for user root by oracle(uid=500)

Aug 15 08:18:42 dmdii-node1 login(pam_unix)[8086]: session opened for user oracle by (uid=0)

大家透過觀察上面每個日誌最開始的一句和最後的一句的時間差, 注意到日誌紀錄是輪換的,而且是有規律的輪換 (這裡是weekly輪換,即達到一週時間的messages檔案中的log會轉儲到messges.1 或其他messages.2,…. 等檔案中) syslogd 1.4.1: restart 表示重新初始化系統日誌守護程式 syslogd

三. Logrotate 的配置

Logrotate顧名思義就是 log rotate , 即日誌的輪換 LogrotateLinux系統自身帶的一個日誌輪循程式,它的執行程式所在的目錄是/usr/sbin/logrotate ,是專門對各種系統日誌(syslogdmail)進行輪循的程式。該程式是由執行程式的服務crond來每天凌晨4:02執行的(可以回過頭看看上面二中的一些日誌的開始發生時間都是04:03, 抱歉,這裡我們在深圳的測試server比實際時間早了點,^_^) 可以在/etc/cron.daily目錄下可以看到logrotate檔案

Logrotate 用來將舊的日誌檔案刪除,並建立新的日誌檔案, 叫做轉儲

我們可以根據日誌檔案大小,也可以根據天數來轉儲(比如上面的例子是一週轉儲一次) 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).

四. 預設Logrotate 的配置
logrotate
預設的配置檔案 /etc/logrotate.conf
Red Hat Linux
預設安裝的檔案內容是

預設的配置一般放在logrotate.conf 檔案的最開始處,影響整個系統。在本例中就是前面12行。

weekly
指定所有的日誌檔案每週轉儲一次。 rotate 4 指定轉儲檔案的保留 4份。
errors root
指定錯誤資訊傳送給root
create
指定 logrotate 自動建立新的日誌檔案,新的日誌檔案具有和原來的檔案一樣的許可權。
#compress
指定不壓縮轉儲檔案,如果需要壓縮,去掉註釋就可以了。

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 檔案就可以了。

五. Logrotate 的執行

1 判斷系統的日誌檔案,建立轉儲計劃以及引數,透過cron daemon 執行下面的程式碼是 Red Hat Linux 預設的crontab 來每天執行logrotate

#/etc/cron.daily/logrotate (/etc/cron.daily/logrotate 每天執行內容如下)

#! /bin/sh

/usr/sbin/logrotate /etc/logrotate.conf

詳細內容可以參考:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84347/,如需轉載,請註明出處,否則將追究法律責任。

相關文章