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 将字符串转换成字典dict
Mar 24 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
Jan 20 Python
Python自定义主从分布式架构实例分析
Sep 19 Python
python自定义线程池控制线程数量的示例
Feb 22 Python
Python当中的array数组对象实例详解
Jun 12 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
python打印文件的前几行或最后几行教程
Feb 13 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 Python
TensorFlow实现批量归一化操作的示例
Apr 22 Python
python神经网络编程实现手写数字识别
May 27 Python
python collections模块的使用
Oct 16 Python
使用pytorch实现线性回归
Apr 11 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与浏览器缓存的分析
2013/06/03 PHP
php简单获取目录列表的方法
2015/03/24 PHP
php版阿里云OSS图片上传类详解
2016/12/01 PHP
PHP双向链表定义与用法示例
2018/01/31 PHP
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
使用JS正则表达式 替换括号,尖括号等
2016/11/29 Javascript
bootstrap手风琴制作方法详解
2017/01/11 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
Python Selenium参数配置方法解析
2020/01/19 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
Jeep牧马人、切诺基和自由人零配件:4 Wheel Drive Hardware
2017/07/02 全球购物
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
澳洲的服装老品牌:SABA
2018/02/06 全球购物
C语言面试题
2013/05/19 面试题
工程总经理工作职责
2013/12/09 职场文书
物业保安员岗位职责制度
2014/01/30 职场文书
普通党员四风问题对照检查材料
2014/09/27 职场文书
高三英语教学计划
2015/01/23 职场文书
个人工作能力自我评价
2015/03/05 职场文书
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL