GB | BIG5
|
| 首頁 > 應用技術 > Apache > 正文 |
 |
| Apche日志系列(5):高級技術 |
| http://cn.internet.com 仙人掌工作室 編譯 (2001-05-16 20:57:21) |
這是《Apache日志》系列文章的最一篇,除了補充說明前面幾篇文章之外,另外討論了三個問題:如何將日志記錄寫入指定的程序而不是日志文件,如何輪換日志防止磁盤空間不足,多虛擬主機環境下的日志文件管理。
一、把日志記錄寫入到指定程序
在這個《Apache日志》系列文章的前一篇中,我們討論了幾種日志文件分析工具。應當補充說明的是,它並沒有列出全部的分析工具。在Google上簡單地搜索一下“apache log reporting”或類似的關鍵詞,返回有關該主題的頁面多達數百個,有許多供應商在為這個相對簡單的問題推銷自己特有的方案。
日志記錄並非只能寫入到文件,它還可以寫入到指定的進程。當我們想要把日志信息寫入數據庫、或者是某些能夠實時顯示網站流量統計信息的程序時,這一點是非常有用的。
那,如何實現這一點呢?使用TransferLog或者CustomLog指令,我們能夠指定“|”,面再加上接收日志信息的程序名字。例如:
CustomLog |/usr/bin/apachelog.pl common
其中/usr/bin/apachelog.pl是一個程序,這個程序知道如何處理Apache日志文件的記錄。事實上,這個程序非常簡單,比如它可以是一個按照某種方式處理日志記錄的Perl程序,或者是一個將日志記錄寫入數據庫的程序。
在採用這種記錄日志數據的方法時,安全問題是最必須關注的問題。日志文件是以啟動服務器的用戶所具有的權限打開的,通常是root。對將日志記錄寫入數據庫的程序,這一點也同樣有效,所以應當確保用記錄日志數據的程序具有充分的安全保証。
如果日志數據通過一個不安全的程序記錄(這個程序可能被非root用戶侵入和修改),那系統就面臨著日志記錄程序被其他懷有惡意的程序替換的危險。例如,如果/usr/bin/apachelog.pl可被全世界的用戶修改,那任何用戶都將能夠編輯這個文件關閉Web服務器,把密碼文件發送到某個信箱,或者刪除某些重要的文件,因為root用戶具有進行所有這些操作的權限。
如果你要把日志記錄寫入到某個程序,建議先找找是否有現成的具備自己想要功能的模塊。請訪問http://modules.apache.org/,該網站收集了許多面向Apache完成各類實際任務的模塊。
二、輪換日志
日志文件會越來越大,如果不小心把日志文件放到了/var之類位置,日志文件可能寫滿分區,從而導致服務器被迫停止運行。這種事情確實曾經發生過。
防止出現這種問題的辦法是,在日志文件變得太大之前把它們移到其他具有足夠空間的位置。這可以通過幾種方法實現。某些Unix變種提供一個logrotate腳本,它能夠幫助我們完成這個任務。例如RedHat就已經預先配置,它會根據日志文件的大小或者日志文件的使用時間,每隔幾日輪換日志文件。
如果要自己實現這方面的功能,我們可以使用稱為Logfile::Rotate的Perl模塊(可從CPAN下載)。下面的代碼就具有這種功能,它由cron按照一定的間隔周期(比如一星期)運行,為了節省空間。每一個備份的日志文件都經過壓縮。
use Logfile::Rotate;
$logfile = new Logfile::Rotate(
File => &single;/usr/local/apache/logs/access_log&single;,
Count => 5,
Gzip => &single;/bin/gzip&single;,
Signal => sub {
`/usr/local/apache/bin/apachectl restart`;
}
);
代碼不多,Perl模塊Logfile::Rotate負責了所有具體操作任務。運行這個程序,我們將得到名為access_log.1.gz、 access_log.2.gz等的文件。它可以幫助我們避免磁盤空間的不足,使得我們能夠保存任意多的檔案文件。
三、多個虛擬主機的日志
曾經有好幾個人問起,當同一台機器上運行著多個虛擬主機時應該如何分析日志?我想,他們是先把所有虛擬主機的日志記錄都保存到了同一台機器,然又企圖把這個日志文件按照虛擬主機的不同分割成多個部分。
徹底解決這個問題的方法是一開始就不要把所有虛擬主機的日志記錄都寫入到同一個文件。雖然我知道確實存在這樣的工具,它們能夠把多個虛擬主機混合的日志記錄根據虛擬主機配置分開,指出哪些請求針對哪個虛擬主機發出,然分別生成報表。然而,這種方法看起來實在是太麻煩了。
為每一個虛擬主機分別指定日志文件時,我們只需在每個VirtualHost區域指定該主機的日志文件。此,當需要制作報表時,我們就可以分別地處理各個日志文件。
但這裡必須注意一下可用文件句柄的問題。也就是說,如果某台服務器上運行的虛擬主機多達數百個,每個虛擬主機都有單獨的日志文件,系統可能會出現可用文件句柄不足的問題,它可能導致系統不穩定甚至導致系統崩潰。然而,只有當服務器上運行的虛擬主機數量非常龐大時,我們才有關注這個問題的必要。
《Apache日志》系列文章到此已經全部結束。在這五篇文章中,我們討論了Apache日志功能的方方面面,從標準日志(訪問日志,錯誤日志)到定制日志、日志分析等等,希望這些內容能夠對你有所幫助。
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
Apche日志系列(5):高級技術 (2001-05-16 20:57:21) Apche日志系列(4):日志分析 (2001-05-16 20:57:02) Apche日志系列(3):定制日志 (2001-05-16 20:56:44) Apche日志系列(2):錯誤日志 (2001-05-16 20:56:18) Apche日志系列(1):訪問日志 (2001-05-16 20:55:54)
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |