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自动安装pip
Apr 24 Python
Python中在脚本中引用其他文件函数的实现方法
Jun 23 Python
windows10系统中安装python3.x+scrapy教程
Nov 08 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
使用python实现链表操作
Jan 26 Python
对numpy中array和asarray的区别详解
Apr 17 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
Python的matplotlib绘图如何修改背景颜色的实现
Jul 16 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
使用Python将语音转换为文本的方法
Aug 10 Python
详解python 条件语句和while循环的实例代码
Dec 28 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下删除一篇文章生成的多个静态页面
2010/08/08 PHP
ThinkPHP分页类使用详解
2014/03/05 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
学习ExtJS table布局
2009/10/08 Javascript
Javascript根据指定下标或对象删除数组元素
2012/12/21 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
vue中添加mp3音频文件的方法
2018/03/02 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
2018/08/07 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
python获得图片base64编码示例
2014/01/16 Python
Python中的列表生成式与生成器学习教程
2016/03/13 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
使用Django和Postgres进行全文搜索的实例代码
2020/02/13 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
Python插件机制实现详解
2020/05/04 Python
python 实现音频叠加的示例
2020/10/29 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
2021/02/06 Python
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
写一个方法1000的阶乘
2012/11/21 面试题
中学生运动会口号
2014/06/07 职场文书
琅琊山导游词
2015/02/05 职场文书
Ajax常用封装库——Axios的使用
2021/05/08 Javascript