關於apache的日誌配置和模板格式分析

apache上跑的日誌一直沒有去管。基本就是一個文件走天下,好處在於不需要再去其它地方找了,找一個文件就好了偷笑。問題在於日誌越來越大,打開查看就要好幾十分鐘了,要具體的查詢某一個時間點的日誌再去分析——這基本上屬於不可能的工作。So,這個工作到了必須要處理一下的時候了。


其實這個事情已經開始幾天了,但年紀大了學東西有點慢,又不願意搞個半懂不懂。所以可能會有點慢。分上下兩部分吧。

這一部分主要講配置和模板的格式分析。


一、最簡單的apache日誌設置。

直接在虛擬主機設置裏添加

ErrorLog "/路徑/error_log"
CustomLog "/路徑/access_log" common

即可針對每個虛擬主機設置單獨的日誌文件。

不過問題是,這還是僅僅是把單個虛擬主機的日誌從總體日誌裏分離出來,要具體管理還是不可能。


二、對日誌進行分割管理

apache提供了日誌管理程序rotatelogs,主要用來把日誌文件分割管理。


這個命令提供了兩種分割的方法,

第一種是按時間,以秒爲基準算的,86400就是一天。

第二種是以文件大小,給出的例子是5M。


正常情況下一般是採用日期對日誌進行管理的。所以在虛擬主機配置中加入以下的設置

ErrorLog "|  /apache安裝路徑/bin/rotatelogs  /路徑/%Y_%m_%d_error_log 86400 480"
CustomLog "|  /apache安裝路徑/bin/rotatelogs  /路徑/%Y_%m_%d_access_log 86400 480" common


%Y,%m,%d這三個都很明顯,分別表示的是年月日。

在86400後面的480其實是UTC的時間偏移量,畢竟我們的時區是東八區和日界線UTC時間差了八小時,如果沒有寫480,會按最原始的時候進行分割,這和我們要記錄的時間不一樣。這裏的時間單位是分鐘,8小時,即480分鐘。

common,其實是access_log的模板名稱。這個在http.conf文件裏有記錄。規定了access_log文件的記錄格式。如:


OK,保存好配置之後,重啓apche,對相對應的虛擬主機訪問一下,日誌文件就會產生了。


三、關於模板的解讀和access_log記錄的對照分析。

下面分析一下access_log和error_log兩個日誌的內容,畢竟日誌寫了如果看不懂基本等於無用功。

先access_log,沒別的,這個文件有一個默認模塊,識圖認字比較容易。

common模板(好吧。再出現一次)


如上所示。我們對上面八個選項逐個分析,分別是:

%h,%l,%u,%t,%r(不是\"%r\",那兩個\其實就是轉譯符,兩個"是當字符出現的),%>s,%b


%h  主要顯示的是訪問的域名/IP,一般來說是IP地址

%l   遠程登錄的名字,不過是由identd提供,所以一般都是空

%u  登錄用戶,這個有可能不是空,但我沒見過

%t   這個是訪問時間

%r  這個是訪問的方法+資源+協議,有點難懂吧?等下看過日誌就明白了,不過看過之後更加不明白了。

%>s  內部重定向的請求,如果沒加>是原來的請求,加了>是後來的請求。比如200是確認的正常返回碼,404是頁面無法訪問

%b  已經發送的字節數(這個最好懂)


OK。進入日誌具體分析

115.236.140.12  -  -  [07/Jan/2016:11:21:41 +0800]  "GET  /   HTTP/1.1"  200  1933

以此條日誌信息爲例,得出的日誌分析是  

115.236.140.12  在   北京時間(+0800)  2016年1月07日,上午11:21:41 訪問了站點的 / 協議爲HTTP/1.1 請求狀態碼是200,已發送字節 1933。

這裏除了登錄用戶名(第三項)爲空之外(第二個遠程登錄名一般是由identd提供的郵箱,常年爲空,當不存在了),其它的都好理解,相對比較麻煩的就是  訪問的方法+資源+協議這項,即 "GET  /   HTTP/1.1"  。其實協議也好辦,最難理解的是第一個方法,這整個一項也是日誌最核心的東西——也就是對方到底做了什麼。


分析如下的日誌


第一行,其實是我對站點進行訪問——自然也就訪問了站點的 / ,所以這裏用方法是GET,因爲是訪問所以發出的字節是 1933

第二行,是我在頁面登錄,提交了登錄信息。這裏很奇怪沒有登錄用戶名,但可以看到方法已經變成了POST,訪問是資源是/index.php——其實就是在index.php。由於是提交所以發出的字節是0。(之前傳出的1933,應該就是index.php)

而登錄完成之後的日誌如下:


系統後來直接跳轉訪問的其它頁面陸續出來,不過用的也是方法GET。

不過方法GET並不僅僅表示系統對頁面的直接訪問和加載,其實更直接的是對某個頁面的直接訪問,這個無論是系統還是其它人爲。爲什麼這麼說?因爲網絡還是很危險的,某位朋友對我的服務器好像採取了摸魚式的掃描。


用的自然也是GET方法。當然,這些最後返回的全是404,網絡世界真可怕。


從這幾天的觀察,方法值在GET居多,POST時有,還出現CONNECT和HEAD,但是還出現了一個不知道什麼鬼的\x16\x03\x03\x03\x0c\x01。

現在POST和GET 方法內容基本清楚,CONNECT,HEAD還有\x16\x03\x03\x03\x0c\x01,以及還未出現的其它方法,估計要查詢之後再才能得出答案。


error_log

這個文件的格式是固定的,相對簡單一點

錯誤時間    錯誤類型   對方地址   具體的錯誤信息

前面這三個基本上一目瞭然,最關鍵的最後後的具體錯誤信息,一天之內找到了如下的幾個

 File does not exist:   這種一般是找不到文件,後面接的一般是服務器內真實的絕對路徑。

script 'XXX.php' not found or unable to stat  這種和上面差不多都是找不到文件,但文件腳本本身是apache可以加載識別的

client denied by server configuration  這種錯誤一般和服務器的配置有關,錯誤都比較直接可以很快找到問題所在。但要明白的是,如果是配置過而錯誤,那是配置的問題;如果沒有配置還出現錯誤,那就是被人家掃描了。


還有兩個不知道什麼意思:

client sent HTTP/1.1 request without hostname 

Invalid URI in request \x16\x03\x01\x03\x0c\x01


這一節大概到這裏吧。大概搞清了日誌的分割設置方法和基本的解讀。下一節分析一下模板的可選項,自己做一個模板然後是日誌的備份。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章