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中的localtime()方法使用详解
May 22 Python
win10系统中安装scrapy-1.1
Jul 03 Python
python模块之paramiko实例代码
Jan 31 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
python3.4实现邮件发送功能
May 28 Python
给我一面国旗 python帮你实现
Sep 30 Python
python 协程 gevent原理与用法分析
Nov 22 Python
简单了解python调用其他脚本方法实例
Mar 26 Python
Python 跨.py文件调用自定义函数说明
Jun 01 Python
Django ModelForm组件原理及用法详解
Oct 12 Python
Python实现简单的猜单词
Jun 15 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 UTF8编码内的繁简转换类
2009/07/20 PHP
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
Yaf框架封装的MySQL数据库操作示例
2019/03/06 PHP
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
JavaScript Math.round() 方法
2015/12/18 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
django 2.2和mysql使用的常见问题
2019/07/18 Python
Python 项目转化为so文件实例
2019/12/23 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
Python更新所有已安装包的操作
2020/02/13 Python
解决pip install psycopg2出错问题
2020/07/09 Python
python解决OpenCV在读取显示图片的时候闪退的问题
2021/02/23 Python
物流管理毕业生自荐信
2013/10/24 职场文书
销售顾问岗位职责
2014/02/25 职场文书
学生会部长竞聘书
2014/03/31 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
教师党员公开承诺事项
2014/05/28 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
乡镇三严三实学习心得体会
2014/10/13 职场文书
工作汇报开头与结尾怎么写
2014/11/08 职场文书
大学生村官入党自传
2015/06/26 职场文书
JavaScript中关于预编译、作用域链和闭包的理解
2021/03/31 Javascript
Python基本数据类型之字符串str
2021/07/21 Python