1. 程式人生 > >linux下使用awk,wc,sort,uniq,grep對nginx日誌進行分析和統計

linux下使用awk,wc,sort,uniq,grep對nginx日誌進行分析和統計

通過對awk, wc, uniq, grep, sort等命令的組合,分析nginx的access和error日誌。

統計各種總量、單位時間量。

access.log日誌格式(見下圖)


說明:
a). 按照Tab鍵拆分每項資料
b). 欄位含義(如下說明)
column1:ip_address
column2:log_time
column3:request
column4:status_code
column5:send_bytes
column6:referer

需求一:統計總記錄數,總成功數,各種失敗數:404,403,500

1. 提取總數

    思路:拆分原始檔案,找到狀態列,按照不同條件值,分別獲取總數。

    a). 使用awk拆分並提取狀態碼列,並保證該列值大於0,並使用wc命令計算總行

     wc -l 對結果進行彙總

     awk使用-F來指定資料項分隔符。一個字元可是直接使用,比如-F:(英文逗號分隔),否則應該使用英文‘’將分隔符括起來,比如

-F'\t'。

    b). 新增說明資訊

    wc -l 的結果作為awk的第一列,所以取$1

2. 提取成功、各種失敗總數

    a). 200成功總數

    在使用awk時,針對變數使用條件執行過濾


    b). 404失敗總數


    c). 403失敗總數


   d).500失敗總數


需求二:各種錯誤中,哪類URL出現的次數最多,要求剔除重複項,並倒敘給出結果

    思路:
    1). 拆分獲取request和StatusCode
    2). 對request再拆分獲取真實URL
    3). 對URL排序,排重,再計算總數,最後再倒敘給出結果

    a). 使用awk得到某類錯誤(status=500)包含request的中間結果。注意request和status之間使用空格連線

    b). 針對中間結果再次使用空格進行拆分,獲取request中的URL

    當內容預設使用空格或tab來分隔資料項時,使用awk拆分時,不需要使用-F來執行分隔符。

    如下面命令中的 awk '{print $2}' 沒有使用-F指定分隔符。

    c). 排序、去除重複項

使用sort對結果進行預設排序

使用uniq -c去除重複項並給出計數結果

    d). 根據圖上結果,發現重複的URL會被自動計數,但是計數的結果順序是隨機的。我們需要再次針對結果進行排序,使用sort 中的 -k指定列,並指明要求是按照數字的倒敘

去除重複項後,希望對結果進行倒敘

-k指明使用哪一列進行排序,-k1:表示使用第一列進行排序

n指明排序列為數字

r代表使用倒敘

所以-k1nr 代表:要進行排序的第一列請作為數字看待,並且結果要進行倒敘

注意:在去重前,最好先使用sort對結果進行排序,然後才能順利合併。

需求三:要統計URL中檔名出現的次數,結果中要包含Code 和 Referer。但是 URL和 Referer中都包含 / 字元,對於過濾有干擾,嘗試去解決。

    思路:
    1). 先拆分獲取必要資料
    2). 想辦法將URL中檔名之前的部分去除
    3). 然後再排序等

    a). 檢視原始檔案內容

使用cat命令檢視原始檔案內容。

    b). 獲取必要資訊

由於是\t分隔各個資料項,所以符合預設拆分,不需要-F指明分隔符

   c).將URL中檔名之前的部分剔除,但保留referer中的"/"。

這部分重點:使用了sed命令對URL進行過濾,只保留URL中的檔名部分,其餘部分不再要。

本sed命令只對第一列資料進行應用過濾操作。

#.*/\(.* \)#\1#解釋:

整個內容被#分成兩部分

第一部分(兩個#號中間的內容).*/\(.* \),用來匹配URL中的兩部分內容

比如URL為:/koubei/2012/11/19/60/abc.jpg (注意最後有一個空格)

.*/用來匹配:"/koubei/2012/11/19/60/"

\(.* \)用來匹配:"abc.jpg "

第二部分

\1,用來匹配第一部分中()中的內容,即 "檔名.副檔名 " 

整個命令的含義是:

將URL替換成檔名

即將 "/koubei/2012/11/19/60/abc.jpg "替換成"abc.jpg "

    d). 執行排序

注意這裡要對第一列先進行排序,否則會影響去重。

   e).去重

   f).倒敘出結果