Apche日誌系列(5):高階技術(轉)

post0發表於2007-08-09
Apche日誌系列(5):高階技術(轉)[@more@]

這是《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使用者具有進行所有這些操作的許可權。

   如果你要把日誌記錄寫入到某個程式,建議先找找是否有現成的具備自己想要功能的模組。請訪問,該網站收集了許多面向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日誌功能的方方面面,從標準日誌(訪問日誌,錯誤日誌)到定製日誌、日誌分析等等,希望這些內容能夠對你有所幫助。

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

相關文章