2019獨角獸企業重金招聘Python工程師標準>>>
當前web服務器的多樣化使得訪問日志的數據清洗變得越來越復雜,企業需要投入專業的數據清洗人員編寫數據清洗規則(解析規則或者解析正則),或者需要關心web服務器訪問日志的生成規則。手寫web服務數據解析規則存在以下3個問題:(1)需要投入專業技術人才完成編寫,成本高;(2)人工書寫解析規則容易犯錯;(3)解析規則生成不可復用,新的web服務需要重新編寫。如果能自動生成web服務器的日志,將大大提高web服務器日志接入和數據可視化過程。基于此,袋鼠云技術小組自研了日志解析規則自動生成組件,適用于nginx、apcahe、iis服務器,同時兼容類似這三種服務器日志規范的其他web服務器。以下內容將詳細說明web日志解析規則自動生成的過程,關鍵步驟有圖片演示。
?
web服務器的日志往往有著一定的規范,比如nginx的日志規范如圖所示,參見這里:
如上設置,日志內容將嚴格按照設定的字段順序打印,缺失的字段會適用占位符,如符號‘-‘,各字段被分隔符依次分開。
以下內容的基本原理是:
(1)日志取樣,獲取行日志分割符,把日志按照分隔符拆分;
(2)依次解析分割后的字段,生成字段類型序列;
(3)按照字段類型和順序,依次給字段命名,生成解析規則;
以上過程的流程圖如圖所示:
樣例演示
使用如上的方法生成下圖所示的nginx樣例日志的解析規則:
?
?
首先進行字段拆分,按照字段順序生成正則序列,如下圖所示,樣例日志中依次包含IP、時間、URL,數字和用戶瀏覽器標識useragent字段;
?
然后按照正則序列對字段進行映射,樣例日志是nginx日志,nginx日志的默認類型和字段映射關系如下:
IP->remoteAddr,
TIMESTAMP->timeLocal,
URL->request,
NUM1->status,
NUM2->bodybytesSend,
USERAGENT->useragent;
映射之后生成默認解析規則,結果如下圖所示,生成結束。
然后對生成的解析規則進行多輪檢驗并重復以上過程,最終生成匹配度最高的解析規則。
?