apache日志信息详解
?一、訪問日志的格式
? Apache內建了記錄服務器活動的功能,這就是它的日志功能。下文詳細介紹Apache的訪問日志、錯誤日志、以及如何分析日志數據,如何定制Apache日志,如何從日志數據生成統計報表等內容。
? 如果Apache的安裝方式是默認安裝,服務器一運行就會有兩個日志文件生成。這兩個文件是access_log和error_log、采用默認方式時,這些文件可以在/usr/local/apache/logs下找到。訪問日志access_log記錄了所有對web服務器的訪問活動。下面是訪問日志中的典型記錄:
?
216.35.116.91?-?-?[19/Aug/2000:14:47:37?-0400]?"GET?/?HTTP/1.0"?200?654
?? 這行內容由七項構成,上面的例子中有兩項空白,但整行內容仍舊分成了7項。
? (1)第一項信息是遠程主機的地址,即它表明訪問網站的究竟是誰。(可以要求apache查出所有的主機名字,并在日志文件中用主機名字來替代IP地址,但這種做法會極大的影響服務器記錄日志的速度,從而降低整個網站的效率,不值得推薦)。然而,如果確實有必要讓Apache找出遠程主機的名字,可以使用如下指令:
HostNameLookups?on
如果HostNameLookups設置成double而不是on,日志記錄程序將對它找到的主機名字進行反向查找,驗證該主機名字確實指向了原來出現的IP地址。
? (2)上例日志記錄的第二項是空白,用一個“-”占位符替代。實際上絕大多數時候這一項都是如此。這個位置用于記錄瀏覽者的標識,這不只是瀏覽者的登錄名字,而是瀏覽者的email地址或者其他唯一標識符。這個信息由identd返回,或者直接由瀏覽器返回。(為了避免用戶的郵箱被垃圾郵件騷擾,第二項就用“-”取代了)。
? (3)日記記錄的第三項也是空白。這個位置用于記錄瀏覽者進行身份驗證時提供的名字。當然,如果網站的某些內容要求用戶進行身份驗證,那么這項信息室不會空白的。但是,對于大多數網站來說,日志文件的大多數記錄中這一項仍舊是空白的。
? (4)日志記錄的第四項是請求的時間。這個信息用方括號包圍,而且采用“公用日志格式”或者“標準英文格式”。因此,時間信息最后的“-0400”表示服務器所處時區位于UTC之前的4小時。
? (5)日志記錄的第五項信息或許是整個日志記錄中最有用的信息,它告訴我們服務器受到的是一個什么樣的請求。該項信息的典型格式是“METHOD RESOURCE PROTOCOL”即“方法 資源 協議”(我們通常進行日志監控的時候,主要也是看這項內容)。例子中METHOD是GET,還有POST、HEAD等其他類型,主要是這三種。
RESOURCE是指瀏覽者向服務器請求的文檔或者URL。在這個例子中,瀏覽者請求的是“/”,即網站的根或者主頁。大多數情況下,“/”指向DocumentRoot目錄的index.html文檔,但根據服務器配置的不同也可能指向其他文件。
? PROTOCOL通常是HTTP,然后再加上版本號。
(6)日志的第六項信息室狀態代碼。它告訴我們請求是否成功,或者遇到了什么樣的錯誤。大多數時候這項是200,它表示服務器已經成功的響應瀏覽器的請求,一切正常。(以2開頭的狀態碼表示成功,以3開頭的狀態碼表示由于各種不同的原因用戶請求被重定向到了其他位置,以4開頭的狀態代碼表示客戶端存在某種錯誤,以5開頭的狀態代碼表示服務器遇到了某個錯誤)。
?(7)日志記錄的第七項表示發送客戶端的總字節數。它告訴我們傳輸是否被打斷(即該數值是否和文件的大小相同)
?
?
?二、配置訪問日志
? 訪問日志文件的位置實際上是一個配置選項。如果我們檢查(/../apache/conf/httpd-linux.conf)httpd.com配置文件,可以看到該文件中有如下這行內容:
? CustomLog /usr/local/apache/logs/access_log common
? CustomLog指令指定了保存日志文件的具體位置以及日志格式,自從有了web服務器開始,common格式就是它的標準格式,由此我們也可以理解,雖然幾乎不再有任何客戶程序向服務器提供用戶的標志信息,但訪問日志卻還保留著第二項內容。CustomLog指令中的路徑是日志文件的路徑。
?
?三、錯誤日志
? 錯誤日志和訪問日志一樣也是Apache的標準日志。
??錯誤日志無論在格式上還是內容上都和訪問日志不同。然而,錯誤日志和訪問日志一樣也提供豐富的信息,我們可以利用這些信息分析服務器的運行情況,哪里出了問題。
? 錯誤日志的文件名是error_log,,錯誤日志的位置可以通過ErrorLog指令設置:
? ErrorLog?logs/error.log
? 正如名字所示,錯誤日志記錄了服務器運行期間遇到的各種錯誤,以及一些普通的診斷信息,比如服務器何時啟動、何時關閉等。
? 我們可以設置日志文件記錄信息級別的高低,控制日志文件記錄信息的數量和類型。這是通過LoglLevel指令設置的。該指令默認設置的級別是error,即記錄稱得上錯誤的事件。
? 大多數情況下,我們在日志文件中見到內容分屬于兩類:文檔錯誤和CGI錯誤。但是錯誤日志中偶爾也會出現配置錯誤,另外還有前面提到的服務器啟動和關閉信息。
?
文檔錯誤:
? 文檔錯誤和服務器應答中的404系類代碼相對應,最常見的就是404錯誤(Document Not Fuond),除了404錯誤以外,用戶身份驗證錯誤也是一種常見的錯誤。
? 404錯誤在用戶請求資源(URL)不存在時出現,它可能由于用戶輸入錯的URL錯誤,或者由于服務器上原來存在的文檔因故被刪除或移動。當用戶不能打開服務器上的文檔時,錯誤日志中出現記錄如下:
[Fri?Aug?18?22:36:26?2000]?[error]
[client?192.168.1.6]?File?does?not?exist:
/usr/local/apache/bugletdocs/Img/south-korea.gif
? 可以看到,正如訪問日志access_log文件一樣,錯誤日志記錄也分為多項。
? (1)錯誤記錄的開頭是日期/時間標記,注意它們的格式和access_log中日期/時間格式不同。
? (2)錯誤日志的第二項是當前記錄的級別,它表明了問題的嚴重程度。這個級別信息可能是LogLevel指令的文檔中所列出的任一級別,error級別處于warn級別和crit級別之間。404屬于error級別,這個級別表示確實遇到了問題,但是服務器還可以運行。
? (3)錯誤記錄的第三項表示用戶發出請求時所用的IP地址
? (4)記錄的最后一項才是真正的錯誤信息。對于404錯誤,它還給出了完整路徑指示服務器試圖訪問的文件。當我們料想到某個文件應該在目標位置卻出現了404錯誤,這個信息是非常有用的。此時產生這種錯誤的原因往往是由于服務器配置錯誤、文件實際所處的虛擬主機和我們料想的不同,或者其他一些意料不到的情況。
?
CGI錯誤:
錯誤日志最主要的用途或許是診斷行為異常的CGI程序。為了進一步分析和處理方便,CGI程序輸出到STDERR(Standard Error,標準錯誤設備)的所有內容都將直接進入錯誤日志。這意味著,任何編寫良好的CGI程序,如果出現問題,錯誤日志就會告訴我們有關問題的詳細信息。
?
?四 、查看日志文件
? Tail –f /../error_log
? 該命令將顯示出日志文件的最后幾行內容,如果有新的內容加入到日志文件,它還會立即顯示出新加入的內容。
?
?五、定制日志
1、定義日志格式
? 很久以前,日志文件只有一種格式(common)。有時候我們血藥定制Apache默認日志的格式和內容,比如增加或者減少日志所記錄的信息、改變默認日志文件的格式等。定制日志格式設計到兩個指令,即LogFormat和CustomLog指令,默認httpd.conf文件提供了關于這兩個指令的幾個示例。
? LogFormat指令定義格式并未格式指定一個名字,以后我們就可以直接飲用這個名字。CustomLog指令設置日志文件,并指明日志文件所用的格式(通常通過格式的名字)。
?LogFormat指令的功能是定義日志格式并為它指定一個名字。例如在默認的httpd.conf文件中,我們可以找到下面這行代碼:
LogFormat "%h %l %u %t \"%r\" %>s %b" common
該行指令創建了一種名為“common”的日志格式,日志的格式在雙引號包圍的內容中指定。格式字符串中的每個變量代表著一項特定的信息,這些信息按照格式串規定的次序寫入到日志文件。
Apache日志格式串的變量及其含義:
-------------------------------------------------------------------------------
Java代碼 ??
?
?--------------------------------------------------------------------------------?
?
? 在所有上面列出的變量中,“…”表示一個可選的條件。如果沒有指定條件,則變量的值將以“-”取代。分析前面來自默認httpd.conf文件的LogFormat指令示例,可以看出它創建了一種名為“common”的日志格式,其中包括:遠程主機、遠程登錄名字、遠程用戶、請求時間、請求的第一行代碼、請求狀態,以及發送的字節數(LogFormat "%h %l %u %t \"%r\" %>s %b" common)
有時候我們只想在日志中記錄某些特定的、已定義的信息,這時就要用到”…”。如果在“%”和變量之間放入了一個或者多個HTTP狀態代碼,則只有當請求返回的狀態屬于指定的狀態代碼之一時,變量所代表的內容才會被記錄。?
?
轉載于:https://www.cnblogs.com/chenjianhong/p/4144536.html
總結
以上是生活随笔為你收集整理的apache日志信息详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: llinux环境变量查看和修改
- 下一篇: [LeetCode] Permutati