python实现的分析并统计nginx日志数据功能示例


Posted in Python onDecember 21, 2019

本文实例讲述了python实现的分析并统计nginx日志数据功能。分享给大家供大家参考,具体如下:

利用python脚本分析nginx日志内容,默认统计ip、访问url、状态,可以通过修改脚本统计分析其他字段。

一、脚本运行方式

python count_log.py -f med.xxxx.com.access.log

二、脚本内容

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
1.分析日志,每行日志按空格切分,取出需要统计的相应字段,作为字典的key,遍历相加
2.使用到字典的get方法,通过定义默认值,避免miss key的错误
3.使用列表解析表达式
4.使用sorted函数排序列表
5.使用argparse传入参数
6.nginx日志格式:
log_format     access_log
  '$remote_addr - $remote_user [$time_local] $request '
  '"$status" $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$request_time"' '"$upstream_addr"' '"$upstream_response_time"';
7.日志内容:
222.xx.xxx.15 - - [07/Dec/2016:00:03:27 +0800] GET /app/xxx/xxx.apk HTTP/1.0 "304" 0 "-" "Mozilla/5.0 Gecko/20100115 Firefox/3.6" "0.055""-""-"
8.脚本运行结果:
('106.xx.xx.46', '/gateway/xxx/user/mxxxxx/submitSelfTestOfSingleQuestion', '"200"', 299)
('182.1xx.xx.83', '/', '"200"', 185)
('222.xx.1xx.15', '/', '"200"', 152)
('125.xx.2xx.58', '/', '"200"', 145)
"""
import argparse
def count_log(filename, num):
  try:
    with open(filename) as f:
      dic = {}
      for l in f:
        if not l == '\n': # 判断空白行
          arr = l.split(' ')
          ip = arr[0]
          url = arr[6]
          status = arr[8]
          # 字典的key是有多个元素构成的元组
          # 字典的get方法,对取的key的值加1,第一次循环时由于字典为空指定的key不存在返回默认值0,因此读第一行日志时,统计结果为1
          dic[(ip, url, status)] = dic.get((ip, url, status), 0) + 1
    # 从字典中取出key和value,存在列表中,由于字典的key比较特殊是有多个元素构成的元组,通过索引k[#]的方式取出key的每个元素
    dic_list = [(k[0], k[1], k[2], v) for k, v in dic.items()]
    for k in sorted(dic_list, key=lambda x: x[3], reverse=True)[:num]:
      print(k)
  except Exception as e:
    print("open file error:", e)
if __name__ == '__main__':
  parser = argparse.ArgumentParser(description="传入日志文件")
  # 定义必须传入日志文件,使用格式-f filename
  parser.add_argument('-f', action='store', dest='filename', required=True)
  # 通过-n传入数值,取出最多的几行,默认取出前10
  parser.add_argument('-n', action='store', dest='num', type=int, required=False, default=10)
  given_args = parser.parse_args()
  filename = given_args.filename
  num = given_args.num
  count_log(filename, num)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python django事务transaction源码分析详解
Mar 17 Python
python数据类型判断type与isinstance的区别实例解析
Oct 31 Python
python机器人行走步数问题的解决
Jan 29 Python
Python反射的用法实例分析
Feb 11 Python
如何优雅地处理Django中的favicon.ico图标详解
Jul 05 Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 Python
Python3爬虫中pyspider的安装步骤
Jul 29 Python
Python判断字符串是否为合法标示符操作
Sep 03 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
Python使用protobuf序列化和反序列化的实现
May 19 Python
Pygame Time时间控制的具体使用详解
Nov 17 Python
Python数据持久化存储实现方法分析
Dec 21 #Python
python cv2截取不规则区域图片实例
Dec 21 #Python
Python lxml模块的基本使用方法分析
Dec 21 #Python
python Manager 之dict KeyError问题的解决
Dec 21 #Python
tornado+celery的简单使用详解
Dec 21 #Python
Python selenium的基本使用方法分析
Dec 21 #Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 #Python
You might like
php中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
PHP连接及操作PostgreSQL数据库的方法详解
2019/01/30 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
javascript创建数组之联合数组的使用方法示例
2013/12/26 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
2017/04/07 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
python使用socket连接远程服务器的方法
2015/04/29 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
2019/01/03 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
Python爬虫开发与项目实战
2020/12/16 Python
aec加密 php_php aes加密解密类(兼容php5、php7)
2021/03/14 PHP
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
生产部管理制度
2014/01/31 职场文书
爱之链教学反思
2014/04/30 职场文书
市场拓展计划书
2014/05/03 职场文书
学位证书委托书
2014/09/30 职场文书
业务员岗位职责
2015/02/03 职场文书
导游词之河姆渡遗址博物馆
2019/10/10 职场文书
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python