Python+Mongodb实现web日志分析

(本文已不再同步更新,最新代码请见github

web_log_analyse

This tool aim at trouble shooting and performance optimization based on web logs, it’s not a generally said log analyse/statistics solution. It preprocess logs on all web server with a specified period and save the intermediate results into mongodb for finally use(with log_show.py)

日志分析在日常中故障排查、性能分析方面有着非常重要的作用。该项目的侧重点不是通常的PV,UV等展示,而是在指定时间段内提供细粒度(最小分钟级别)的异常定位和性能分析。

Dependencies

  • Python 3.4+
  • pymongo-3.7.2+
  • MongoDB-server 3.4+

先明确几个术语
uri指不包含参数的请求;request_uri指原始的请求,包含参数;args指请求中的参数部分。(参照nginx中的定义)
uri_absargs_abs是指对uri和args进行抽象处理后的字符串(以便分类),例如:
"/sub/0/100414/4070?channel=ios&version=1.4.5"经抽象处理转换为uri_abs: “/sub/*/*/*”,args_abs: “channel=*&version=*”

功能

  1. 提供统一的日志分析入口:经由此入口,可查看站点在所有server上产生的日志的汇总分析;亦可根据时间段server两个维度进行过滤
  2. 支持对 request_uriipresponse_code 三大类进行分析;每一类又基于请求数响应大小响应时间三个维度进行分析。另外不同子项又各有特点
  3. request_uri 分析能直观展示哪类请求数量多、哪类请求耗时多、哪类请求占流量;另外可展示某一类请求在不同时间粒度里(minute, ten_min, hour, day)各指标随时间的分布变化;也可以针对某一 uri_abs 分析其不同 args_abs 各指标的分布
  4. IP 分析将所有请求分为3种来源(from_cdn/proxy, from_reverse_proxy, from_client_directly),三种来源各自展示其访问量前 N 的 IP 地址;并且可展示某一 IP 访问的各指标随时间的分布;也可针对某一 IP 分析其产生的不同 uri_abs 各指标的分布

特点

  1. 核心思想: 对request_uri进行抽象归类,将其中变化的部分以 “*” 表示,这样留下不变的部分就能代表具体的一类请求。实际上是换一种方式看待日志,从 “以具体的一行日志文本作为最小分析单位” 抽象上升到 “以某一功能点,某一接口或某一模块最为最小分析单位”
  2. 兼容plaintext和json格式的日志内容
  3. 配置方便,不需要写正则。只要将nginx中定义的log_format复制到config文件中即可
  4. 通过4分位数概念以实现对响应时间响应大小更准确的描述,因为对于日志中的响应时间,算数平均值的参考意义不大
  5. 支持定制抽象规则,可灵活指定请求中的某些部分是否要抽象处理以及该如何抽象处理
  6. 高效,本着谁产生的日志谁处理的思想,日志分析脚本log_analyse要在web服务器上定时运行(有点类似分布式),因而log_analyse的高效率低资源也是重中之重。经测试,在笔者的服务器上(磁盘:3*7200rpm RAID5,千兆局域网),处理速度在20000行/s~30000行/s之间

实现思路:

分析脚本(log_analyse.py)部署到各台web server,并通过crontab设置定时运行。log_analyse.py利用python的re模块通过正则表达式对日志进行分析处理,取得uriargs时间当前状态码响应大小响应时间server name 等信息并进行初步加工然后存储进MongoDB。查看脚本(log_show.py)作为入口即可对所有web server的日志进行分析查看,至于实时性,取决于web server上log_analyse.py脚本的执行频率。

配置文件

日志格式决定了代码中的正则表达式

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值