1 什麼是syslogd syslogd可以簡單地被稱為記錄系統活動的一個daemons。比如可以記錄誰,在什麼時間,在哪裡,做了什麼事情(像是在寫記敘文啊);也可以記錄您的系統曾經發生過什麼事情,比如什麼時候重新引導過、軟硬件的錯誤信息等;當然也記錄著您系統上運行著的服務的信息。 很多時候,有朋友上來就問,“我的X不能啟動了是怎麼回事啊?!”問號和歎號這樣使用在語文規范上是不允許的,但是我們可以獲知,他的心情是急迫的。可是為什麼您不先考慮一下您做了什麼更改,為什麼不先看看是否有錯誤輸出,為什麼不看看日志文件?起碼,日志為解決問題提供了很好的參考啊。很多人講自己的某個設備不工作,dmesg的信息您是否認真參考了? syslogd做的是瑣碎的工作,但卻是相當重要的工作。很多朋友為了提高系統的性能,節省那一點點資源就決定把這個daemons停掉。我認為,這是不可取的。 syslogd記錄的日志一般在/var/log/下,當然也有存儲在另外的服務器上的。因為syslogd記錄的信息實在是太重要了,所以還要涉及日志安全的問題。 一般系統中日志信息: 代碼: /var/log/secure: 記錄系統的安全信息,比如ssh、FTP、pop3等; /var/log/wtmp: 記錄誰曾經登陸過系統,由於本日志被編碼過,所以只能用last命令查看; /var/log/boot.log: 顧名思義,記錄開啟或者關閉系統及武夫的信息; /var/log/message:系統發生的錯誤信息都會記錄在這個日志中,比如iptables中您使用log功能的日志; /var/log/mail: /var/log/httpd/ /var/log/mysqld.d 等,記錄的就是這些服務的日志。
2 配置syslogd的說明 2.1 啟動syslogd服務 首先,您要確定您的系統是否運行著這個服務。 代碼: service [color=red]syslog[/color] status 或者: 代碼: ps -auxgrep syslog 如果您的系統中並沒有運行這個服務,您可以打開它。方法很多啦。 代碼: service syslog start 如果您希望系統在下次啟動的時候就運行syslogd,您可以在setup中的服務中添加。如果確定您的默認引導級別,比如3,那麼您也可以在/etc/rc.d/rc3.d/下添加以 S 開頭的軟連接。或者,您使用chkconfig 2345 syslog on來添加。 2.2 syslogd服務的配置文件 syslogd的配置文件一般在/etc/syslog.conf中。這個文件依然遵循你所見過的其它配置文件的規則,比如 # 是注釋。您可以看看您的syslogd都在幫助您記錄著什麼。這是我的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. # 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.* /var/log/cron 2.3 syslog.conf的配置規則 代碼: 服務名稱.信息等級 存放或者顯示地點 這個語法很簡單呢。呵呵。逐個解釋一下。 服務名稱 mail http at cron kern 等等。 信息等級 代碼: info: 一些提示信息資料; notice: 需要您注意的信息; warn或者waring: 警告信息; [color=black]上面三個信息雖然是提醒您注意,但是卻還沒有到錯誤的情況。下面的信息就要注意了。[/color] error或者err: 錯誤信息。您需要仔細檢查發生錯誤的原因了; crit: 很嚴重的錯誤,到達臨界點了; alert: 警告! 是否想起了“Red Alert”?不過,在這裡這可是相當嚴重的錯誤啊; emerg或者panic:系統混亂,重做吧; 特別的: debug: 將顯示很多信息; none: 顧名思義,什麼信息也不記錄。 存放或者顯示地點 代碼: 日志的絕對路徑: 比如/var/log; 您的一個用戶 ; 網絡上的主機: @log.company.com 打印機: /dev/lp0 2.4 應用舉例 代碼: mail.info /var/log/maillog 大於等於info的信息都會寫到/var/log/maillog中。 代碼: mail.*;cron.* /var/log/mailcron mail.=warn;cron.=warn /var/log/mailcronwarn 等級為warn的信息,寫進/var/log/mailcronwarn,其它的信息寫進/var/log/mailcron。 代碼: *.*;mail,cron.none /var/log/message 代碼: *.*;mail.none;cron.none /var/log/message 記錄除去mail和cron之外的所有服務的所有信息。
3 syslogd和系統中服務配置中日志的關系 上面已經說了,syslogd是為系統提供日志服務的。那麼,我們在配置文件中定義的日志信息和syslog.conf有什麼關系呢? 或者您也注意到了這段: 代碼: # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none /var/log/messages 這段話是什麼意思呢?我認為是在/var/log/messages中記錄除去mail、authpriv和cron之外的所有系統信息。也就是說它會記錄您自己的http信息。是否這樣呢?我自己安裝了一個httpd,並且指定日志到另外一個文件,比如/usr/website/log/httplog。我雖然可以在/usr/website/log/httpdlog中看到我的httpd的日志信息,但是我執行 代碼: # cat /var/log/messagesgrep HTTP 卻得到空。 另外,就這個問題我曾經請教一個朋友。他說syslogd不會記錄你沒有要求它記錄的信息,雖然有上面的*.info但是這個*是不包括你自己的服務的。我問,那麼iptables也沒有在我的syslog.conf中要求,那為什麼它會記錄到/var/log/messages呢?或者是iptables自己定義了吧。 所以,關於這段的理解我只有這樣的認識。如果有錯誤,請您指出。
4 什麼是logrotate logrotate是對日志文件做輪換。就是把現在的log命名為log.1,然後繼續寫log。如果存在log.1就命名log.1為log.2然後命名log為log.1,依此類推,但並非沒有盡頭。這個盡頭就是您在logrotate的配置文件中的定義,我的系統默認的是到4。那麼對log.4做什麼操作呢?刪除。 syslogd是daemons方式運行的; logrotate是按計劃運行的。
5 配置logrotate的說明 5.1 配置文件的位置 /etc/logrotate.conf /etc/logrotate.d 其中,/etc/logrotate.conf是主要配置文件,/etc/logrotate.d中的文件會被/etc/logrotate.conf讀取。如果您在/etc/logrotate.d中的配置文件沒有規定具體的參數,則這些參數由/etc/logrotate來決定。 5.2 logrotate的配置規則 正如在上面5.1中所說的,logrotate的主要配置在/etc/logrotate.conf中設置,而/etc/logrotate.d中的文件是對/etc/logrotate.conf的補充。或者可以看作為了不使/etc/logrotate.conf過大而設置。logrotate的寫法: 代碼: 把logfile(s)寫在前面,包含文件的絕對路徑,可以使用空白字元分隔多個log,也可以使用統配符置換;用 { } 包含所有設定;一般包括: prerotate 在啟動 logrotate 之前執行的命令,比如 /usr/bin/charrt -a /var/log/logfile; postrotate 在執行了 logrotate 之後執行的命令,比如 /usr/bin/charrt +a /var/log/logfile; 您可以設定執行如上兩個動作,也可以不設定,這依賴於您的需要。 在prerotate與postrotate之間的動作有: weeky #每個星期執行一次 rotate 4 #保留四個日志 create #logratoe之後再建立日志 compress #rotate之後的日志是否壓縮 include /etc/logrotate.d #包含/etc/logrotate.d目錄下面的輪換設置 如果您自己在/etc/logrotate.d下寫了自己的輪換設置可以使用 代碼: logrotate -f yourfile 來測試。 5.3 鑒於這個文檔的設置比較明了所以不在此舉例。您可以參考您的 /etc/logrotate.conf 和 /etc/logrotate.d 下面的文檔看看。