這篇討論三個問題:1.如何將日誌記錄寫入指定的程式而不是日誌檔案,2.如何輪換日誌防止磁碟空間不足,3.多虛擬主機環境下的日誌檔案管理。
一、把日誌記錄寫入到指定程式
日誌記錄並非只能寫入到檔案,它還可以寫入到指定的程序。當我們想要把日誌資訊寫入資料庫、或者是某些能夠實時顯示**流量統計資訊的程式時,這一點是非常有用的。 那麼,如何實現這一點呢?使用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就已經預先配置,它會根據日誌檔案的大小或者日誌檔案的使用時間,每隔幾日輪換日 志檔案。
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
); **不多,perl模組logfile::rotate負責了所有具體操作任務。執行這個程式,我們將得到名為access_log.1.gz、 access_log.2.gz等的檔案。它可以幫助我們避免磁碟空間的不足,使得我們能夠儲存任意多的檔案檔案。
三、多個虛擬主機的日誌
曾經有好幾個人問起,當同一臺機器上執行著多個虛擬主機時應該如何分析日誌?我想,他們是先把所有虛擬主機的日誌記錄都儲存到了同一臺機器,然後又企圖把這個日誌檔案按照虛擬主機的不同分割成多個部分。
徹底解決這個問題的方法是一開始就不要把所有虛擬主機的日誌記錄都寫入到同乙個檔案。雖然我知道確實存在這樣的工具,它們能夠把多個虛擬主機混合的日誌記錄根據虛擬主機配置分開,指出哪些請求針對哪個虛擬主機發出,然後分別生成報表。然而,這種方法看起來實在是太麻煩了。
為每乙個虛擬主機分別指定日誌檔案時,我們只需在每個virtualhost區域指定該主機的日誌檔案。此後,當需要製作報表時,我們就可以分別地處理各個日誌檔案。
但 這裡必須注意一下可用檔案控制代碼的問題。也就是說,如果某台伺服器上執行的虛擬主機多達數百個,每個虛擬主機都有單獨的日誌檔案,系統可能會出現可用檔案句 柄不足的問題,它可能導致系統不穩定甚至導致系統崩潰。然而,只有當伺服器上執行的虛擬主機數量非常龐大時,我們才有關注這個問題的必要。
Apche日誌系列 5 高階技術
這是 apache日誌 系列文章的最後一篇,除了補充說明前面幾篇文章之外,另外討論了三個問題 如何將日誌記錄寫入指定的程式而不是日誌檔案,如何輪換日誌防止磁碟空間不足,多虛擬主機環境下的日誌檔案管理。一 把日誌記錄寫入到指定程式 日誌記錄並非只能寫入到檔案,它還可以寫入到指定的程序。當我們想要把日誌...
Apche日誌系列 1 訪問日誌
本文分五個部分 訪問日誌 錯誤日誌 定製日誌 日誌分析 其他用法。摘自永遠的linux,做了一些修整。想要知道什麼人在什麼時候瀏覽了 的哪些內容嗎?檢視apache的訪問日誌就可以知道。訪問日誌是apache的標準日誌,本文詳細解釋了訪問日誌的內容以及相關選項的配置。一 訪問日誌的格式 apache...
Apche日誌系列 3 定製日誌
有時候我們需要定製apache預設日誌的格式和內容,比如增加或減少日誌所記錄的資訊 改變預設日誌檔案的格式等。本文介紹可以用日誌記錄的所有資訊,以及如何設定apache使其記錄這些資訊。一 定義日誌格式 定製日誌檔案的格式涉及到兩個指令,即logformat指令和customlog指令。預設http...