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的常见命令注入威胁
Feb 18 Python
Python函数中定义参数的四种方式
Nov 30 Python
用Python生成器实现微线程编程的教程
Apr 13 Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
Python之pandas读写文件乱码的解决方法
Apr 20 Python
Python实现的质因式分解算法示例
May 03 Python
python中使用print输出中文的方法
Jul 16 Python
python3的输入方式及多组输入方法
Oct 17 Python
Python求平面内点到直线距离的实现
Jan 19 Python
python使用smtplib模块发送邮件
Dec 17 Python
十个Python自动化常用操作,即拿即用
May 10 Python
python 字典和列表嵌套用法详解
Jun 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
真正的ZIP文件操作类(php)
2007/07/21 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
php添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
php安装swoole扩展的方法
2015/03/19 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
2016/11/28 Javascript
JS中的phototype详解
2017/02/04 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
2019/06/13 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
Python中单、双下划线的区别总结
2017/12/01 Python
Python实现的双色球生成功能示例
2017/12/18 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
高中自我鉴定
2013/12/20 职场文书
英语教师岗位职责
2014/03/16 职场文书
村委会贫困证明范文
2014/09/21 职场文书
员工自我评价范文
2015/03/11 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
旅行社计调工作总结
2015/08/12 职场文书
用Python写一个简易版弹球游戏
2021/04/13 Python
Python中使用ipython的详细教程
2021/06/22 Python