1. 程式人生 > >Apache伺服器訪問日誌access.log中各項資料的具體解釋

Apache伺服器訪問日誌access.log中各項資料的具體解釋

一、訪問日誌資訊

當瀏覽器請求伺服器時,如果在伺服器上設定了訪問日誌,就會記錄下使用者的訪問記錄。

例如我訪問本地apache所產生的一條預設的日誌:

127.0.0.1 - - [03/Feb/2015:23:14:24 +0800] "GET / HTTP/1.1" 200 2        分為7個部分
(1)第一項資訊是遠端主機的地址,即它表明訪問網站的究竟是誰。
(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的配置檔案httpd.conf中,有一行是這麼配置的:


CustomLog "logs/access.log" common


指定了日誌的目錄路徑./logs/,指定了日誌的格式,預設common。


common格式是通過:LogFormat "%h %l %u %t \"%r\" %>s %b" common定義的。


雙引號裡面的格式字串代表特定的資訊。


apache格式字串及其含義:


%%    百分號(Apache2.0.44或更高的版本)
%a    遠端IP地址
%A    本機IP地址
%B    除HTTP頭以外傳送的位元組數
%b    以CLF格式顯示的除HTTP頭以外傳送的位元組數,也就是當沒有位元組傳送時顯示'-'而不是0。
%{Foobar}C    在請求中傳送給服務端的cookieFoobar的內容。
%D    伺服器處理本請求所用時間,以微為單位。
%{FOOBAR}e    環境變數FOOBAR的值
%f    檔名
%h    遠端主機
%H    請求使用的協議
%{Foobar}i    傳送到伺服器的請求頭Foobar:的內容。
%l    遠端登入名(由identd而來,如果支援的話),除非IdentityCheck設為"On",否則將得到一個"-"。
%m    請求的方法
%{Foobar}n    來自另一個模組的註解Foobar的內容。
%{Foobar}o    應答頭Foobar:的內容。
%p    伺服器服務於該請求的標準埠。
%P    為本請求提供服務的子程序的PID。
%{format}P 服務於該請求的PID或TID(執行緒ID),format的取值範圍為:pid和tid(2.0.46及以後版本)以及hextid(需要APR1.2.0及以上版本)
%q    查詢字串(若存在則由一個"?"引導,否則返回空串)
%r    請求的第一行
%s    狀態。對於內部重定向的請求,這個狀態指的是原始請求的狀態,---%>s則指的是最後請求的狀態。
%t    時間,用普通日誌時間格式(標準英語格式)
%{format}t    時間,用strftime(3)指定的格式表示的時間。(預設情況下按本地化格式)
%T    處理完請求所花時間,以秒為單位。
%u    遠端使用者名稱(根據驗證資訊而來;如果返回status(%s)為401,可能是假的)
%U    請求的URL路徑,不包含查詢字串。
%v    對該請求提供服務的標準ServerName。
%V    根據UseCanonicalName指令設定的伺服器名稱。
</span><span style="font-size:18px;">




【補充】"<"和">"修飾符可以用來指定對於已被內部重定向的請求是選擇原始的請求還是選擇最終的請求。預設情況下,%s, %U, %T, %D, %r 使用原始請求,而所有其他格式串則選擇最終請求。例如,<strong>%>s</strong> 可以用於記錄請求的最終狀態,而 %<u 則記錄一個已經被內部重定向到非認證資源的請求的原始認證使用者。
  如果在“%”和變數之間放入了一個或者多個HTTP狀態程式碼,則只有當請求返回的狀態程式碼屬於指定的狀態程式碼之一時,變數所代表的內容才會被記錄。例如,如果我們想要記錄的是網站的所有無效連結,那麼可以使用:  
    LogFormat %404{Referer}i BrokenLinks  
  反之,如果我們想要記錄那些狀態程式碼不等於指定值的請求,只需加入一個“!”符號即可: 
  LogFormat %!200U SomethingWrong 


我們還可以自定義日誌格式,例如:


LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" " combine


定義了combine格式  其中\"%{Referer}i\" \"%{User-Agent}i\" 是傳送到伺服器的求情頭和Referer連結