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;
映射之后生成默认解析规则,结果如下图所示,生成结束。
然后对生成的解析规则进行多轮检验并重复以上过程,最终生成匹配度最高的解析规则。