使用logrotate 管理Linux日誌檔(zt)

tonykorn97發表於2006-07-03
對於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 , 即日誌的輪換 。 Logrotate是Linux系統自身帶的一個日誌輪循程式,它的執行程式所在的目錄是/usr/sbin/logrotate ,是專門對各種系統日誌(syslogd,mail)進行輪循的程式。該程式是由執行程式的服務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/312079/viewspace-245335/,如需轉載,請註明出處,否則將追究法律責任。

相關文章