nginx日志详解,nginx日志变量

  nginx日志详解,nginx日志变量

  Python项目的一个需求就是解析nginx的日志文件,这里给出详细的过程分析。

  日志规则描述

  首先明确一下你的Nginx的日志格式,这里采用的是默认的Nginx日志格式:

  log _ format main $ remote _ addr-$ remote _ user[$ time _ local] $ request

  $ status $ body _ bytes _ sent $ http _ referer

  “$ http _ user _ agent”“$ http _ x _ forwarded _ for”;一个真实记录的例子如下:

  下面的代码是3360。

  172 . 22 . 8 . 207--[16/Dec/2014:17:57:35 0800] GET/report?domjjus 6 kew jp wculsqagdukaipodexmzawmdjdn 0 fc HTTP/1.1 200 0 - XXXXXXX/1 . 0 . 16;iPhone/iOS 8 . 1 . 2;8DA77E2F91D0

  其中客户端型号信息替换为XXXXXXX。

  Nginx日志文件已经根据项目中的业务规则进行了处理。命名规则如下:

  ID-ID-YYMMDD-hhmmss

  并且所有日志文件都存储在统一的路径中。

  解决思路

  获取所有日志文件path

  这里,使用Python的glob模块来获取日志文件路径。

  importglob

  defreadfile(路径):

  returnglob.glob(路径 *-*-*-* )获取日志文件中每一行的内容

  使用Python的linecache模块获取文件行的内容。

  importlinecache

  defreadline(路径):

  Returnlinecache.getlines(path)注意:linecache模块使用缓存,因此存在以下问题:

  在使用linecache模块读取文件内容之后,如果文件发生了变化,那么就需要使用linecache.updatecache(filename)来更新缓存,以获取最新的变化。

  linecache模块使用缓存,所以会消耗内存,消耗和要解析的文件有关。最好执行linecache.clearcache()在使用后清空缓存。

  当然,作为一种优化,这里可以使用生成器进行优化。暂时按下no手表。

  处理日志条目

  一条日志信息是一个特定格式的字符串,所以用正则表达式解析,这里用到了Python的re模块。

  下面,逐一建立规则:

  规则

  ip=r ?Pip[d.]*

  日期=r ?更新d

  月=r ?p月w

  年份=r ?Pyeard

  log_time=r ?PtimeS

  method=r ?p方法S

  request=r"?P<request>S+"

  status=r"?P<status>d+"

  bodyBytesSent=r"?P<bodybytessent>d+"

  refer=r"""?P<refer>

  [^"]*

  """

  userAgent=r"""?P<useragent>

  .*

  """

  </useragent></refer></bodybytessent></status></request></method></time></year></month></date></ip>解析

  代码如下:

  

p=re.compile(r"(%s)--\[(%s)/(%s)/(%s):(%s)[S]+]\"(%s)?[s]?(%s)?.*?"(%s)(%s)

这样,就可以得到日志条目中各个要素的原始数据。

 

  格式及内容转化

  得到日志原始数据之后,需要根据业务要求,对原始数据进行格式及内容转化。

  这里需要处理的内容包括:时间,request,userAgent

  时间格式转化

  在日志信息原始数据中存在Dec这样的信息,利用Python的time模块可以方便的进行解析

  

importtime

解析request

 

  在日志信息原始数据中得到的request的内容格式为:

  /report?XXXXXX

  这里只需要根据协议取出XXXXXX即可。

  这里仍然采用Python的re模块

  

importre

接下来需要根据业务协议解析参数内容。这里需要先利用base64模块解码,然后再利用struct模块解构内容:

 

  

importstruct

解析userAgent

 

  在日志信息原始数据中userAgent数据的格式为:

  XXX; XXX; XXX; XXX

  根据业务要求,只需要取出最后一项即可。

  这里采用re模块来解析。

  

importre

至此,nginx日志文件解析基本完成。

 

  剩下的工作就是根据业务需要,对获得的基本信息进行处理。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • nginx配置访问图片,nginx配置图片服务器
  • nginx配置访问图片,nginx配置图片服务器,Nginx搭建图片视频服务器的部署步骤
  • nginx负载均衡配置详解linux,nginx负载均衡服务器对性能有要求吗
  • nginx负载均衡配置详解linux,nginx负载均衡服务器对性能有要求吗,详解Nginx服务器之负载均衡策略(6种)
  • nginx正向代理与反向代理详解区别,nginx的正向代理和反向代理
  • nginx正向代理与反向代理详解区别,nginx的正向代理和反向代理,nginx正向代理与反向代理详解
  • nginx日常优化有哪些,nginx日常优化有哪些
  • nginx日常优化有哪些,nginx日常优化有哪些,nginx优化的六点方法
  • nginx拦截,nginx 屏蔽IP
  • nginx拦截,nginx 屏蔽IP,Nginx服务器屏蔽与禁止屏蔽网络爬虫的方法
  • nginx实现负载均衡几种方式,nginx负载均衡配置详解linux
  • nginx实现负载均衡几种方式,nginx负载均衡配置详解linux,使用nginx进行负载均衡的搭建全过程
  • nginx安装及配置教程,Nginx怎么安装
  • nginx安装及配置教程,Nginx怎么安装,Nginx 安装详细教程
  • nginx基本原理,nginx实现原理
  • 留言与评论(共有 条评论)
       
    验证码: