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批量修改文件名的实现代码
Sep 01 Python
Python实现在线音乐播放器
Mar 03 Python
Python实现返回数组中第i小元素的方法示例
Dec 04 Python
Python中使用支持向量机SVM实践
Dec 27 Python
python 对dataframe下面的值进行大规模赋值方法
Jun 09 Python
python中的decimal类型转换实例详解
Jun 26 Python
python pickle存储、读取大数据量列表、字典数据的方法
Jul 07 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
用Python去除图像的黑色或白色背景实例
Dec 12 Python
scrapy中如何设置应用cookies的方法(3种)
Sep 22 Python
python实现KNN近邻算法
Dec 30 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
Jun 09 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 空格,换行,跳格使用说明
2009/12/18 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
JavaScript URL参数读取改进版
2009/01/16 Javascript
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
精心挑选的15款优秀jQuery 本特效插件和教程
2012/08/06 Javascript
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
jquery时间下拉框小例子
2013/04/15 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
node版本管理工具n包使用教程详解
2018/11/09 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
js对象属性名驼峰式转下划线的实例代码
2020/09/17 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
pandas带有重复索引操作方法
2018/06/08 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
python实现三维拟合的方法
2018/12/29 Python
python调用虹软2.0第三版的具体使用
2019/02/22 Python
使用tqdm显示Python代码执行进度功能
2019/12/08 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
python软件都是免费的吗
2020/06/18 Python
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
国际贸易个人求职信范文
2014/01/04 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
python 如何用terminal输入参数
2021/05/25 Python
vue动态绑定style样式
2022/04/20 Vue.js
MySQL常用慢查询分析工具详解
2022/08/14 MySQL