放假這幾天看書,了解了一下syslogd和logrotate,就想把自己看明白的總結一下:加深自己的理解;以資大家討論。
-------------
文檔目錄
-------------
1 什麼是syslogd
2 配置syslogd的說明
3 syslogd和系統中服務配置中日志的關系
4 什麼是logrotate
5 配置logrotate的說明
-------------
文檔正文
-------------
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 下面的文檔看看。
好了,這個文檔寫到這裡就算是結束了。正如我在文檔的開始所說,這是我假期看書的一點體會,寫出來是為了加深自己的理解;同時也是為了發現問題。如果您發現問題請指正。
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 下面的文檔看看。
好了,這個文檔寫到這裡就算是結束了。正如我在文檔的開始所說,這是我假期看書的一點體會,寫出來是為了加深自己的理解;同時也是為了發現問題。如果您發現問題請指正。