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 02 Python
centos6.7安装python2.7.11的具体方法
Jan 16 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
Jun 09 Python
老生常谈进程线程协程那些事儿
Jul 24 Python
关于Tensorflow中的tf.train.batch函数的使用
Apr 24 Python
python实现批量修改图片格式和尺寸
Jun 07 Python
django 多对多表的创建和插入代码实现
Sep 09 Python
python文件读写代码实例
Oct 21 Python
pytorch 中的重要模块化接口nn.Module的使用
Apr 02 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 Python
Python如何在bool函数中取值
Sep 21 Python
运行python提示no module named sklearn的解决方法
Nov 29 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
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
Yii数据库缓存实例分析
2016/03/29 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
js操作checkbox遇到的问题解决
2013/06/29 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
灵活使用console让js调试更简单的方法步骤
2019/04/23 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
关于python中plt.hist参数的使用详解
2019/11/28 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
Booking.com美国:全球酒店预订网站
2017/04/18 全球购物
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
商务主管岗位职责
2013/12/08 职场文书
企业申诉管理制度
2014/01/30 职场文书
初一家长会邀请函
2014/01/31 职场文书
党员公开承诺践诺书
2014/03/25 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
财务人员入职担保书
2015/09/22 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL
Android Studio 计算器开发
2022/05/20 Java/Android